DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKS_EXTWARPRGM_PVT

Source


1 PACKAGE BODY oks_extwarprgm_pvt AS
2 /* $Header: OKSREWRB.pls 120.87.12010000.2 2008/11/12 07:17:31 harlaksh ship $ */
3 
4    TYPE p_srvline_rec IS RECORD (
5       k_line_id   NUMBER
6    );
7 
8    TYPE p_srvline_tbl IS TABLE OF p_srvline_rec
9       INDEX BY BINARY_INTEGER;
10 
11 /**************************************************************************
12    Procedure Get_k_cle_id
13    Returns Service lines originated from Order having the same service item
14 ***************************************************************************/
15    PROCEDURE get_k_cle_id (
16       p_chrid          IN              NUMBER,
17       p_invserviceid   IN              NUMBER,
18       p_cle_tbl        OUT NOCOPY      p_srvline_tbl
19    )
20    IS
21       -- extwarr cascading
22       -- merging servcice lines
23       -- Modified the cusror for the fix of bug# 5088409
24 
25       CURSOR l_service_csr
26       IS
27          SELECT /*+ leading (kl)  use_nl (kl ki) */ kl.ID cle_id
28            FROM okc_k_lines_b kl, okc_k_items ki, okc_statuses_b ks
29           WHERE kl.dnz_chr_id = p_chrid
30             AND kl.lse_id IN (1, 14, 19)
31             AND kl.ID = ki.cle_id
32             AND ki.object1_id1 = TO_CHAR (p_invserviceid)
33             AND kl.upg_orig_system_ref = 'ORDER'
34             AND ks.code = kl.sts_code                              -- 04-jun-2002 merging service lines from OM
35             AND ks.ste_code NOT IN ('TERMINATED', 'CANCELLED')     -- Removed EXPIRED
36 	      AND kl.date_terminated is NULL;                        -- Modified for fix of bug 4690982
37 
38       -- Modified the cusror for the fix of bug# 5088409
39 
40       l_ctr           NUMBER;
41       l_service_rec   l_service_csr%ROWTYPE;
42 
43    BEGIN
44       l_ctr := 1;
45 
46       FOR l_service_rec IN l_service_csr
47       LOOP
48          p_cle_tbl (l_ctr).k_line_id := l_service_rec.cle_id;
49          l_ctr := l_ctr + 1;
50       END LOOP;
51    END get_k_cle_id;
52 
53 /***************************************************************************
54     Function check_merge_yn
55     Checks if the service line can be merged into an existing contract line
56 *****************************************************************************/
57    FUNCTION check_merge_yn (
58       p_k_line_id        IN   NUMBER,
59       p_source_line_id   IN   NUMBER,
60       p_warranty_flag    IN   VARCHAR2
61    )
62       RETURN BOOLEAN
63    IS
64       -- cursor to get the Order line attributes
65       CURSOR source_line_attrbs_csr
66       IS
67          SELECT invoicing_rule_id, accounting_rule_id, price_list_id,
68                 commitment_id, invoice_to_org_id, ship_to_org_id
69            FROM oe_order_lines_all
70           WHERE line_id = p_source_line_id;
71 
72       -- Cursor to compare the source line attributes with
73       -- target line attributes
74       CURSOR target_line_attrbs_csr (
75          l_inv_id       NUMBER,
76          l_acct_id      NUMBER,
77          l_prl_id       VARCHAR2,
78          l_commit_id    NUMBER,
79          l_invorg_id    NUMBER,
80          l_shiporg_id   NUMBER
81       )
82       IS
83          SELECT 'x'
84            FROM okc_k_lines_b kl, oks_k_lines_b sl
85           WHERE kl.ID = p_k_line_id
86             AND kl.ID = sl.cle_id
87             AND NVL (sl.acct_rule_id, -99) = NVL (l_acct_id, -99)
88             AND NVL (kl.inv_rule_id, -99) = NVL (l_inv_id, -99)
89             AND NVL (sl.commitment_id, -99) = NVL (l_commit_id, -99)
90             AND NVL (kl.price_list_id, -99) = NVL (l_prl_id, -99)
91             AND NVL (kl.bill_to_site_use_id, -99) = NVL (l_invorg_id, -99)
92             AND NVL (kl.ship_to_site_use_id, -99) = NVL (l_shiporg_id, -99);
93 
94       l_source_rec   source_line_attrbs_csr%ROWTYPE;
95       l_merge_yn     BOOLEAN                          := FALSE;
96       l_temp         VARCHAR2 (3);
97    BEGIN
98       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
99       THEN
100          fnd_log.STRING (fnd_log.level_statement,
101                          g_module_current || '.Check_merge_yn',
102                          'Warranty Flag ' || p_warranty_flag
103                         );
104       END IF;
105 
106       IF p_warranty_flag = 'W'
107       THEN
108          l_merge_yn := TRUE;
109          RETURN (l_merge_yn);
110       ELSE
111          OPEN source_line_attrbs_csr;
112 
113          FETCH source_line_attrbs_csr
114           INTO l_source_rec;
115 
116          IF source_line_attrbs_csr%NOTFOUND
117          THEN
118             CLOSE source_line_attrbs_csr;
119 
120             RAISE g_exception_halt_validation;
121          END IF;
122 
123          CLOSE source_line_attrbs_csr;
124 
125          OPEN target_line_attrbs_csr (l_source_rec.invoicing_rule_id,
126                                       l_source_rec.accounting_rule_id,
127                                       l_source_rec.price_list_id,
128                                       l_source_rec.commitment_id,
129                                       l_source_rec.invoice_to_org_id,
130                                       l_source_rec.ship_to_org_id
131                                      );
132 
133          FETCH target_line_attrbs_csr
134           INTO l_temp;
135 
136          IF target_line_attrbs_csr%FOUND
137          THEN
138             l_merge_yn := TRUE;
139          ELSE
140             l_merge_yn := FALSE;
141          END IF;
142 
143          CLOSE target_line_attrbs_csr;
144 
145          RETURN (l_merge_yn);
146       END IF;
147    END;
148 
149 --G_Debug_option := Fnd_profile.value('OKS_DEBUG_LOG');
150    FUNCTION get_top_line_number (p_chr_id IN NUMBER)
151       RETURN NUMBER;
152 
153    FUNCTION get_sub_line_number (p_chr_id IN NUMBER, p_cle_id IN NUMBER)
154       RETURN NUMBER;
155 
156    PROCEDURE get_sts_code (
157       p_ste_code                VARCHAR2,
158       p_sts_code                VARCHAR2,
159       x_ste_code   OUT NOCOPY   VARCHAR2,
160       x_sts_code   OUT NOCOPY   VARCHAR2
161    )
162    IS
163       CURSOR l_ste_csr
164       IS
165          SELECT code
166            FROM okc_statuses_b
167           WHERE ste_code = p_ste_code AND default_yn = 'Y';
168 
169       CURSOR l_sts_csr
170       IS
171          SELECT a.code, a.ste_code
172            FROM okc_statuses_b a, okc_statuses_b b
173           WHERE b.code = p_sts_code
174             AND b.ste_code = a.ste_code
175             AND a.default_yn = 'Y';
176 
177       l_sts_code   VARCHAR2 (30);
178    BEGIN
179       IF p_sts_code IS NULL
180       THEN
181          OPEN l_ste_csr;
182 
183          FETCH l_ste_csr
184           INTO x_sts_code;
185 
186          CLOSE l_ste_csr;
187 
188          x_ste_code := p_ste_code;
189       ELSE
190          OPEN l_sts_csr;
191 
192          FETCH l_sts_csr
193           INTO x_sts_code, x_ste_code;
194 
195          CLOSE l_sts_csr;
196       END IF;
197    EXCEPTION
198       WHEN OTHERS
199       THEN
200          okc_api.set_message (g_app_name,
201                               g_unexpected_error,
202                               g_sqlcode_token,
203                               SQLCODE,
204                               g_sqlerrm_token,
205                               SQLERRM
206                              );
207    END;
208 
209   -----------------------------------------------------------------------
210   --  Procedure: get_cc_trxn_extn
211   --  Added 03/03/2006 by Vijay Ramalingam
212   -----------------------------------------------------------------------
213   -- The get_cc_trxn_extn procedure is used to get a transaction extension
214   -- id from iPayments, based on an existing transaction extension id from
215   -- a sales order header or an order line from OM.
216   -- This API is called while creating an Extended warranty contract
217   -- from OM. It is called at the header level for a sales order header
218   -- or at line level for a sales order line.
219   -- p_context_level identifies the level at which it is called and the
220   -- applicable values are 'ORDER_HEADER' and 'ORDER_LINE'
221 
222    PROCEDURE get_cc_trxn_extn (
223       p_order_header_id  IN              NUMBER,
224       p_order_line_id    IN              NUMBER,
225       p_context_level    IN              VARCHAR2,
226       p_contract_hdr_id  IN              NUMBER,
227       p_contract_line_id IN              NUMBER,
228       x_entity_id        OUT NOCOPY      NUMBER,
229       x_return_status    OUT NOCOPY      VARCHAR2
230    ) IS
231 
232       l_payercontext_rec    iby_fndcpt_common_pub.payercontext_rec_type;
233       l_trxnextension_rec   iby_fndcpt_trxn_pub.trxnextension_rec_type;
234       l_response            iby_fndcpt_common_pub.result_rec_type;
235       l_order_number        NUMBER;
236       l_invoice_to_org_id   NUMBER;
237       l_trxn_extension_id   NUMBER;
238       l_entity_id           NUMBER;
239       l_instr_id            NUMBER;
240       l_iby_cust_id         NUMBER;
241       l_iby_party           NUMBER;
242       l_msg_count           NUMBER;
243       l_msg_data            VARCHAR2 (2000);
244       l_return_status       VARCHAR2 (1) := FND_API.G_RET_STS_SUCCESS;
245 
246       -- Cursor to get the transaction extension info for a sales order
247       CURSOR c_header_trxid (c_order_header_id IN NUMBER)
248       IS
249          SELECT ordhdr.order_number
250                ,ordhdr.invoice_to_org_id
251                ,pmt.trxn_extension_id
252            FROM
253                 oe_order_headers_all ordhdr
254                 ,oe_payments pmt
255           WHERE ordhdr.header_id = c_order_header_id
256             AND ordhdr.header_id = pmt.header_id
257             AND pmt.line_id IS NULL
258             AND pmt.payment_type_code = G_PAYMENT_CREDIT_CARD;
259 
260       -- Cursor to get the transaction extension info for a sales order line
261       CURSOR c_line_trxid (c_order_line_id IN NUMBER)
262       IS
263          SELECT ordline.invoice_to_org_id
264                ,pmt.trxn_extension_id
265            FROM
266                 oe_order_lines_all ordline
267                 ,oe_payments pmt
268           WHERE ordline.line_id = c_order_line_id
269             AND ordline.header_id = pmt.header_id
270             AND ordline.line_id = pmt.line_id
271             AND pmt.payment_type_code = G_PAYMENT_CREDIT_CARD;
272 
273       -- Cursor to get the instrument asignment id for a given transaction
274       -- extension id for a sales order header/line
275       CURSOR c_instrid (c_trxn_extension_id IN NUMBER)
276       IS
277          SELECT instr_assignment_id
278            FROM iby_trxn_extensions_v
279           WHERE trxn_extension_id = c_trxn_extension_id;
280 
281       -- Cursor to get the the Bill to customer account corresponding
282       -- to a bill to site id
283       CURSOR c_cust_csr (p_bill_to_site_use_id NUMBER)
284       IS
285          SELECT ca.cust_account_id
286            FROM hz_cust_acct_sites_all ca, hz_cust_site_uses_all cs
287           WHERE ca.cust_acct_site_id = cs.cust_acct_site_id
288             AND cs.site_use_id = p_bill_to_site_use_id;
289 
290       CURSOR c_party (c_cust_acct_id IN NUMBER)
291       IS
292          SELECT ca.party_id party_id
293            FROM hz_cust_accounts_all ca
294           WHERE ca.cust_account_id = c_cust_acct_id;
295 BEGIN
296 
297    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
298       fnd_log.STRING (fnd_log.level_statement,g_module_current||'.get_cc_trxn_extn parameters',
299                      'p_context_level = '||p_context_level);
300 
301       fnd_log.STRING (fnd_log.level_statement,g_module_current||'.get_cc_trxn_extn parameters',
302                      'p_order_header_id = '||p_order_header_id);
303 
304       fnd_log.STRING (fnd_log.level_statement,g_module_current||'.get_cc_trxn_extn parameters',
305                      'p_order_line_id = '||p_order_line_id);
306 
307       fnd_log.STRING (fnd_log.level_statement,g_module_current||'.get_cc_trxn_extn parameters',
308                      'p_contract_hdr_id = '||p_contract_hdr_id);
309 
310       fnd_log.STRING (fnd_log.level_statement,g_module_current||'.get_cc_trxn_extn parameters',
311                      'p_contract_line_id  = '||p_contract_line_id);
312    END IF;
313 
314    IF p_context_level = G_CONTEXT_ORDER_HEADER THEN
315 
316       OPEN c_header_trxid(p_order_header_id);
317       FETCH c_header_trxid INTO l_order_number,l_invoice_to_org_id,l_trxn_extension_id;
318       CLOSE c_header_trxid;
319 
320    ELSIF p_context_level = G_CONTEXT_ORDER_LINE THEN
321       OPEN c_line_trxid(p_order_line_id);
322       FETCH c_line_trxid INTO l_invoice_to_org_id,l_trxn_extension_id;
323       CLOSE c_line_trxid;
324 
325    END IF;
326 
327       -- Proceed Further only if a Credit Card info is to be processed
328       IF l_trxn_extension_id IS NOT NULL THEN
329          OPEN c_instrid (l_trxn_extension_id);
330          FETCH c_instrid INTO l_instr_id;
331          CLOSE c_instrid;
332 
333          -- For a transaction extension id, an instrument assignment id
334          -- should always exist in iPayments.
335          IF l_instr_id IS NULL THEN
336             IF (fnd_log.level_error >= fnd_log.g_current_runtime_level) THEN
337                IF p_context_level = G_CONTEXT_ORDER_HEADER THEN
338                   fnd_log.STRING (fnd_log.level_error,
339                                   g_module_current
340                                || '.get_cc_trxn_extn-Header.ERROR',
341                                   'After CURSOR - c_InstrId'
342                                || '   ,Payment Txn ID = '
343                                || l_trxn_extension_id
344                                || '   ,p_order_header_id = '
345                                || p_order_header_id
346                               );
347                ELSE
348                   fnd_log.STRING (fnd_log.level_error,
349                                   g_module_current
350                                || '.get_cc_trxn_extn-Line.ERROR',
351                                   'After CURSOR - c_InstrId'
352                                || '  ,Payment Txn ID = '
353                                || l_trxn_extension_id
354                                || '  ,p_line_id = '
355                                || p_order_line_id
356                               );
357                END IF;
358             END IF;
359             IF p_context_level = G_CONTEXT_ORDER_HEADER THEN
360                okc_api.set_message(g_app_name,
361                                    'OKS_CC_INS_ASSG_NOT_FOUND',
362                                    'ORDER_NUMBER',
363                                    l_order_number
364                                    );
365             ELSE
366                okc_api.set_message(g_app_name,
367                                    'OKS_LINE_CC_INS_ASSG_NOT_FOUND',
368                                    'ORDER_LINE_ID',
369                                    p_order_line_id
370                                    );
371             END IF;
372             RAISE g_exception_halt_validation;
373          END IF;
374 
375          OPEN c_cust_csr(l_invoice_to_org_id);
376          FETCH c_cust_csr INTO l_iby_cust_id;
377          CLOSE c_cust_csr;
378 
379          OPEN c_party (l_iby_cust_id);
380          FETCH c_party INTO l_iby_party;
381          CLOSE c_party;
382 
383          l_payercontext_rec.payment_function := IBY_FNDCPT_COMMON_PUB.G_PMT_FUNCTION_CUST_PMT;
384          l_payercontext_rec.party_id := l_iby_party;
385          l_payercontext_rec.cust_account_id := l_iby_cust_id;
386 
387          -- Based on the header or line level, the corresponding contract header
388          -- or contract line id is passed as the order id
389          IF p_context_level = G_CONTEXT_ORDER_HEADER THEN
390             l_trxnextension_rec.order_id := p_contract_hdr_id;
391          ELSE
392             l_trxnextension_rec.order_id := p_contract_line_id;
393          END IF;
394 
395          l_trxnextension_rec.originating_application_id := g_app_id;
396          l_trxnextension_rec.trxn_ref_number1 := TO_CHAR (SYSDATE, 'ddmmyyyyhhmmssss');
397 
398          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
399             IF p_context_level = G_CONTEXT_ORDER_HEADER THEN
400                fnd_log.STRING(fnd_log.level_statement,g_module_current,' ');
401                fnd_log.STRING(
402                fnd_log.level_statement,
403                 g_module_current || '.get_cc_trxn_extn-Header',
404                    'Before call to IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension for order header'
405                 || '  ,Party_Id = '
406                 || l_payercontext_rec.party_id
407                 || '  ,Cust_Account_Id = '
408                 || l_payercontext_rec.cust_account_id
409                 || '  ,order_id = '
410                 || l_trxnextension_rec.order_id
411                 || '  ,Trxn_Ref_Number1 = '
412                 || l_trxnextension_rec.trxn_ref_number1
413                 || '  ,instr_assignment = '
414                 || l_instr_id
415                 || '  ,application_id= '
416                 || l_trxnextension_rec.originating_application_id
417                );
418                  fnd_log.STRING(fnd_log.level_statement,g_module_current,' ');
419             ELSE
420                fnd_log.STRING(fnd_log.level_statement,g_module_current,' ');
421                fnd_log.STRING
422                (fnd_log.level_statement,
423                 g_module_current || '.get_cc_trxn_extn-Line',
424                    'Before call to IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension for order line'
425                 || '  ,Party_Id = '
426                 || l_payercontext_rec.party_id
427                 || '  ,Cust_Account_Id = '
428                 || l_payercontext_rec.cust_account_id
429                 || '  ,order_id (i.e. order line id) = '
430                 || l_trxnextension_rec.order_id
431                 || '  ,Trxn_Ref_Number1 = '
432                 || l_trxnextension_rec.trxn_ref_number1
433                 || '  ,instr_assignment = '
434                 || l_instr_id
435                 || '  ,application_id= '
436                 || l_trxnextension_rec.originating_application_id
437                );
438                  fnd_log.STRING(fnd_log.level_statement,g_module_current,' ');
439             END IF;
440          END IF;
441 
442          -- A payer equivalency level of full is provided for iPayments to be
443          -- able to traverse up and down for a given instrument id
444          -- Note: The new transaction extension that is created at a customer
445          -- account level.
446          iby_fndcpt_trxn_pub.create_transaction_extension
447                                   (p_api_version            => 1.0,
448                                    p_init_msg_list          => 'T',
449                                    p_commit                 => 'F',
450                                    x_return_status          => l_return_status,
451                                    x_msg_count              => l_msg_count,
452                                    x_msg_data               => l_msg_data,
453                                    p_payer                  => l_payercontext_rec,
454                                    p_payer_equivalency      => IBY_FNDCPT_COMMON_PUB.G_PAYER_EQUIV_FULL,
455                                    p_pmt_channel            => G_PAYMENT_CREDIT_CARD,
456                                    p_instr_assignment       => l_instr_id,
457                                    p_trxn_attribs           => l_trxnextension_rec,
458                                    x_entity_id              => l_entity_id,
459                                    x_response               => l_response
460                                   );
461 
462          IF l_return_status <> 'S' THEN
463             IF (fnd_log.level_error >= fnd_log.g_current_runtime_level) THEN
464                IF p_context_level = G_CONTEXT_ORDER_HEADER THEN
465                   fnd_log.STRING
466                   (fnd_log.level_error,
467                    g_module_current || '.get_cc_trxn_extn-Header.ERROR',
468                       'After call to IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension'
469                    || '  ,x_return_status= '
470                    || l_return_status
471                    || '  ,Result Code = '
472                    || l_response.result_code
473                    || '  ,Result Category= '
474                    || l_response.result_category
475                    || '  ,Result Message= '
476                    || l_response.result_message
477                   );
478                ELSE
479                   fnd_log.STRING
480                   (fnd_log.level_error,
481                    g_module_current || '.get_cc_trxn_extn-Line.ERROR',
482                       'After call to IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension'
483                    || '  ,x_return_status= '
484                    || l_return_status
485                    || '  ,Result Code = '
486                    || l_response.result_code
487                    || '  ,Result Category= '
488                    || l_response.result_category
489                    || '  ,Result Message= '
490                    || l_response.result_message
491                   );
492 			   END IF;
493             END IF;
494             IF p_context_level = G_CONTEXT_ORDER_HEADER THEN
495                okc_api.set_message(g_app_name,
496                                    'OKS_CC_EXTN_CREATN_FAILED',
497                                    'ORDER_NUMBER',
498                                    l_order_number
499                                    );
500             ELSE
501                okc_api.set_message(g_app_name,
502                                    'OKS_LINE_CC_EXTN_CREATN_FAILED',
503                                    'ORDER_LINE_ID',
504                                    p_order_line_id
505                                    );
506             END IF;
507             RAISE g_exception_halt_validation;
508          END IF;
509 
510          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
511             fnd_log.STRING (fnd_log.level_statement,
512                      g_module_current||'.get_cc_trxn_extn ',
513                      'l_entity_id = '||l_entity_id);
514          END IF;
515 
516          x_entity_id := l_entity_id;
517       END IF;
518       x_return_status := l_return_status;
519    EXCEPTION
520       WHEN g_exception_halt_validation THEN
521          x_return_status := FND_API.G_RET_STS_ERROR;
522       WHEN OTHERS THEN
523          IF c_header_trxid%ISOPEN THEN
524             CLOSE c_header_trxid;
525          END IF;
526 
527          IF c_line_trxid%ISOPEN THEN
528             CLOSE c_line_trxid;
529          END IF;
530 
531          IF c_instrid%ISOPEN THEN
532             CLOSE c_instrid;
533          END IF;
534 
535          IF c_cust_csr%ISOPEN THEN
536             CLOSE c_cust_csr;
537          END IF;
538 
539          IF c_party%ISOPEN THEN
540             CLOSE c_party;
541          END IF;
542 
543          x_return_status := okc_api.g_ret_sts_unexp_error;
544          okc_api.set_message (g_app_name,
545                               g_unexpected_error,
546                               g_sqlcode_token,
547                               SQLCODE,
548                               g_sqlerrm_token,
549                               SQLERRM
550                              );
551 
552          IF fnd_log.level_unexpected >= fnd_log.g_current_runtime_level THEN
553             IF p_context_level = G_CONTEXT_ORDER_HEADER THEN
554             fnd_log.STRING (fnd_log.level_unexpected,
555                                g_module_current
556                             || '.get_cc_trxn_extn-Header.UNEXPECTED',
557                             ' sqlcode = ' || SQLCODE || ', sqlerrm = '
558                             || SQLERRM
559                            );
560             ELSE
561             fnd_log.STRING (fnd_log.level_unexpected,
562                                g_module_current
563                             || '.get_cc_trxn_extn-Line.UNEXPECTED',
564                             ' sqlcode = ' || SQLCODE || ', sqlerrm = '
565                             || SQLERRM
566                            );
567             END IF;
568          END IF;
569 END get_cc_trxn_extn;
570 
571 
572    PROCEDURE party_role (
573       p_chrid           IN              NUMBER,
574       p_cleid           IN              NUMBER,
575       p_rle_code        IN              VARCHAR2,
576       p_partyid         IN              NUMBER,
577       p_object_code     IN              VARCHAR2,
578       x_roleid          OUT NOCOPY      NUMBER,
579       x_msg_count       OUT NOCOPY      NUMBER,
580       x_msg_data        OUT NOCOPY      VARCHAR2,
581       x_return_status   OUT NOCOPY      VARCHAR2
582    )
583    IS
584       l_api_version     CONSTANT NUMBER                               := 1.0;
585       l_init_msg_list   CONSTANT VARCHAR2 (1)                         := 'F';
586       l_return_status            VARCHAR2 (1)    := okc_api.g_ret_sts_success;
587       l_index                    VARCHAR2 (240);
588       --Party Role
589       l_cplv_tbl_in              okc_contract_party_pub.cplv_tbl_type;
590       l_cplv_tbl_out             okc_contract_party_pub.cplv_tbl_type;
591 
592       CURSOR l_party_csr
593       IS
594          SELECT ID
595            FROM okc_k_party_roles_b
596           WHERE dnz_chr_id = p_chrid
597             AND cle_id IS NULL
598             AND chr_id = p_chrid
599             AND rle_code = p_rle_code;
600 
601       CURSOR l_lparty_csr
602       IS
603          SELECT ID
604            FROM okc_k_party_roles_b
605           WHERE dnz_chr_id = p_chrid
606             AND chr_id IS NULL
607             AND cle_id = p_cleid
608             AND rle_code = p_rle_code;
609 
610       l_roleid                   NUMBER;
611    BEGIN
612       l_return_status := okc_api.g_ret_sts_success;
613 
614       IF p_cleid IS NULL
615       THEN
616          l_roleid := NULL;
617 
618          OPEN l_party_csr;
619 
620          FETCH l_party_csr
621           INTO l_roleid;
622 
623          CLOSE l_party_csr;
624 
625          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
626          THEN
627             fnd_log.STRING (fnd_log.level_statement,
628                             g_module_current || '.PARTY_ROLE',
629                             'Party Role Id = ' || l_roleid
630                            );
631          END IF;
632 
633          IF l_roleid IS NOT NULL
634          THEN
635             x_roleid := l_roleid;
636             RETURN;
637          END IF;
638 
639          l_cplv_tbl_in (1).chr_id := p_chrid;
640       ELSE
641          l_roleid := NULL;
642 
643          OPEN l_lparty_csr;
644 
645          FETCH l_lparty_csr
646           INTO l_roleid;
647 
648          CLOSE l_lparty_csr;
649 
650          IF l_roleid IS NOT NULL
651          THEN
652             x_roleid := l_roleid;
653             RETURN;
654          END IF;
655 
656          l_cplv_tbl_in (1).cle_id := p_cleid;
657       END IF;
658 
659       l_cplv_tbl_in (1).sfwt_flag := 'N';
660       l_cplv_tbl_in (1).rle_code := p_rle_code;
661       l_cplv_tbl_in (1).object1_id1 := p_partyid;
662       l_cplv_tbl_in (1).object1_id2 := '#';
663       l_cplv_tbl_in (1).jtot_object1_code := p_object_code;
664       l_cplv_tbl_in (1).dnz_chr_id := p_chrid;
665       okc_contract_party_pub.create_k_party_role
666                                           (p_api_version        => l_api_version,
667                                            p_init_msg_list      => l_init_msg_list,
668                                            x_return_status      => l_return_status,
669                                            x_msg_count          => x_msg_count,
670                                            x_msg_data           => x_msg_data,
671                                            p_cplv_tbl           => l_cplv_tbl_in,
672                                            x_cplv_tbl           => l_cplv_tbl_out
673                                           );
674 
675       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
676       THEN
677          fnd_log.STRING
678              (fnd_log.level_event,
679               g_module_current || '.PARTY_ROLE.external_call.after',
680                  'okc_contract_party_pub.create_k_party_role(Return status ='
681               || l_return_status
682               || ')'
683               || 'Party Role Id = '
684               || l_cplv_tbl_out (1).ID
685              );
686       END IF;
687 
688       IF l_return_status = 'S'
689       THEN
690          x_roleid := l_cplv_tbl_out (1).ID;
691       ELSE
692          okc_api.set_message (g_app_name,
693                               g_required_value,
694                               g_col_name_token,
695                               p_rle_code || ' Party Role (HEADER)'
696                              );
697          RAISE g_exception_halt_validation;
698       END IF;
699    EXCEPTION
700       WHEN g_exception_halt_validation
701       THEN
702          x_return_status := l_return_status;
703          NULL;
704       WHEN OTHERS
705       THEN
706          x_return_status := okc_api.g_ret_sts_unexp_error;
707          okc_api.set_message (g_app_name,
708                               g_unexpected_error,
709                               g_sqlcode_token,
710                               SQLCODE,
711                               g_sqlerrm_token,
712                               SQLERRM
713                              );
714    END;
715 
716 -----------------------------------------------------------------------
717 --  GetFormattedInvoiceText
718 --  added 05/29/2002  --Vigandhi
719 --  For Bug#2396580
720 -----------------------------------------------------------------------
721    FUNCTION getformattedinvoicetext (
722       p_product_item   IN   NUMBER,
723       p_start_date     IN   DATE,
724       p_end_date       IN   DATE,
725       p_item_desc      IN   VARCHAR2,
726       p_qty            IN   NUMBER
727    )
728       RETURN VARCHAR2
729    IS
730       /* CURSOR l_item_csr IS
731             SELECT jtot_object1_code,
732                    object1_id1,
733                    object1_id2,
734                    number_of_items
735               FROM okc_k_items
736              WHERE cle_id = p_cle_id;
737              */
738       CURSOR l_inv_csr (p_product_item NUMBER)
739       IS
740          SELECT t.description NAME, b.concatenated_segments description
741            FROM mtl_system_items_b_kfv b, mtl_system_items_tl t
742           WHERE b.inventory_item_id = t.inventory_item_id
743             AND b.organization_id = t.organization_id
744             AND t.LANGUAGE = USERENV ('LANG')
745             AND b.inventory_item_id = p_product_item
746             AND ROWNUM < 2;
747 
748       l_object_code              okc_k_items.jtot_object1_code%TYPE;
749       l_object1_id1              okc_k_items.object1_id1%TYPE;
750       l_object1_id2              okc_k_items.object1_id2%TYPE;
751       l_no_of_items              okc_k_items.number_of_items%TYPE;
752       l_name                     VARCHAR2 (2000);
753       l_desc                     VARCHAR2 (2000);
754       l_formatted_invoice_text   VARCHAR2 (2000);
755    BEGIN
756       OPEN l_inv_csr (p_product_item);
757 
758       FETCH l_inv_csr
759        INTO l_name, l_desc;
760 
761       CLOSE l_inv_csr;
762 
763       IF fnd_profile.VALUE ('OKS_ITEM_DISPLAY_PREFERENCE') = 'DISPLAY_DESC'
764       THEN
765          l_desc := l_name;                                          --l_desc;
766       ELSE
767          l_desc := l_desc;                                          --l_name;
768       END IF;
769 
770       l_formatted_invoice_text :=
771          SUBSTR (   p_item_desc
772                  || ':'
773                  || p_qty
774                  || ':'
775                  || l_desc
776                  || ':'
777                  || to_char(p_start_date,'DD-MON-YYYY')
778                  || ':'
779                  || to_char(p_end_date,'DD-MON-YYYY'),
780                  1,
781                  450
782                 );
783       RETURN (l_formatted_invoice_text);
784    END getformattedinvoicetext;
785 
786 -----------------------------------------------------------------------
787 -- Get Contract Hearder Id
788 -----------------------------------------------------------------------
789    FUNCTION get_k_hdr_id (
790       p_type             VARCHAR2,
791       p_object_id   IN   NUMBER,
792       p_enddate     IN   DATE
793    )
794       RETURN NUMBER
795    IS
796       CURSOR l_kexists_csr (p_jtf_id VARCHAR2)
797       IS
798          SELECT chr_id
799            FROM okc_k_rel_objs
800           WHERE object1_id1 = TO_CHAR (p_object_id)
801             AND jtot_object1_code = p_jtf_id;
802 
803       CURSOR l_wexists_csr (p_jtf_id VARCHAR2)
804       IS
805          SELECT chr_id
806            FROM okc_k_rel_objs
807           WHERE object1_id1 = TO_CHAR (p_object_id)
808             AND jtot_object1_code = p_jtf_id
809             AND rty_code = 'CONTRACTWARRANTYORDER';
810 
811       l_wchrid   NUMBER;
812       l_kchrid   NUMBER;
813       l_jtf_id   VARCHAR2 (30);
814 
815       CURSOR l_hdr_csr
816       IS
817          SELECT ID chr_id
818            FROM okc_k_headers_v
819           WHERE attribute1 = p_object_id AND end_date = p_enddate;
820    BEGIN
821       IF p_type = 'ORDER'
822       THEN
823          l_jtf_id := g_jtf_order_hdr;
824 
825          OPEN l_kexists_csr (l_jtf_id);
826 
827          FETCH l_kexists_csr
828           INTO l_kchrid;
829 
830          IF l_kexists_csr%NOTFOUND
831          THEN
832             CLOSE l_kexists_csr;
833 
834             RETURN (NULL);
835          END IF;
836 
837          CLOSE l_kexists_csr;
838 
839          RETURN (l_kchrid);
840       ELSIF p_type = 'RENEW'
841       THEN
842          OPEN l_hdr_csr;
843 
844          FETCH l_hdr_csr
845           INTO l_kchrid;
846 
847          IF l_hdr_csr%NOTFOUND
848          THEN
849             CLOSE l_hdr_csr;
850 
851             RETURN (NULL);
852          END IF;
853 
854          CLOSE l_hdr_csr;
855 
856          RETURN (l_kchrid);
857       ELSIF p_type = 'WARR'
858       THEN
859          l_jtf_id := g_jtf_order_hdr;
860 
861          OPEN l_wexists_csr (l_jtf_id);
862 
863          FETCH l_wexists_csr
864           INTO l_wchrid;
865 
866          IF l_wexists_csr%NOTFOUND
867          THEN
868             CLOSE l_wexists_csr;
869 
870             RETURN (NULL);
871          END IF;
872 
873          CLOSE l_wexists_csr;
874 
875          RETURN (l_wchrid);
876       END IF;
877    END get_k_hdr_id;
878 
879    FUNCTION priced_yn (p_lse_id IN NUMBER)
880       RETURN VARCHAR2
881    IS
882       CURSOR c_priced_yn
883       IS
884          SELECT priced_yn
885            FROM okc_line_styles_b
886           WHERE ID = p_lse_id;
887 
888       v_priced   VARCHAR2 (50) := 'N';
889    BEGIN
890       FOR cur_c_priced_yn IN c_priced_yn
891       LOOP
892          v_priced := cur_c_priced_yn.priced_yn;
893          EXIT;
894       END LOOP;
895 
896       RETURN (v_priced);
897    END priced_yn;
898 
899    FUNCTION check_strmlvl_exists (p_cle_id IN NUMBER)
900       RETURN NUMBER
901    IS
902       CURSOR l_billsch_csr (p_cle_id IN NUMBER)
903       IS
904          SELECT ID
905            FROM oks_stream_levels_v
906           WHERE cle_id = p_cle_id;
907 
908       l_strmlvl_id   NUMBER;
909    BEGIN
910       OPEN l_billsch_csr (p_cle_id);
911 
912       FETCH l_billsch_csr
913        INTO l_strmlvl_id;
914 
915       IF (l_billsch_csr%FOUND)
916       THEN
917          RETURN (l_strmlvl_id);
918       ELSE
919          RETURN (NULL);
920       END IF;
921 
922       CLOSE l_billsch_csr;
923    EXCEPTION
924       WHEN NO_DATA_FOUND
925       THEN
926          RETURN (NULL);
927    END;
928 
929    FUNCTION check_lvlelements_exists (p_cle_id IN NUMBER)
930       RETURN BOOLEAN
931    IS
932       CURSOR l_billsll_csr (p_cle_id IN NUMBER)
933       IS
934          SELECT 'x'
935            FROM oks_stream_levels_v sll, oks_level_elements lvl
936           WHERE lvl.rul_id = sll.ID AND sll.cle_id = p_cle_id;
937 
938       v_flag   BOOLEAN      := FALSE;
939       v_temp   VARCHAR2 (5);
940    BEGIN
941       OPEN l_billsll_csr (p_cle_id);
942 
943       FETCH l_billsll_csr
944        INTO v_temp;
945 
946       IF (l_billsll_csr%FOUND)
947       THEN
948          v_flag := TRUE;
949       ELSE
950          v_flag := FALSE;
951       END IF;
952 
953       CLOSE l_billsll_csr;
954 
955       RETURN (v_flag);
956    END;
957 
958 /*************************************************************
959 Creates a record in operation instances for Transfer, Split, Replace
960  and Update transactions.
961 **************************************************************/
962    PROCEDURE create_operation_instance (
963       p_target_chr_id                   NUMBER,
964       p_transaction                     VARCHAR2,
965       x_oper_instance_id   OUT NOCOPY   NUMBER,
966       x_return_status      OUT NOCOPY   VARCHAR2,
967       x_msg_count          OUT NOCOPY   NUMBER,
968       x_msg_data           OUT NOCOPY   VARCHAR2
969    )
970    IS
971       CURSOR cop_csr (p_opn_code VARCHAR2)
972       IS
973          SELECT ID
974            FROM okc_class_operations
975           WHERE cls_code = (SELECT cls_code
976                               FROM okc_subclasses_b
977                              WHERE code = 'SERVICE')
978                 AND opn_code = p_opn_code;
979 
980       l_cop_id                   NUMBER;
981       l_api_version     CONSTANT NUMBER                          := 1.0;
982       l_init_msg_list   CONSTANT VARCHAR2 (1)                    := 'F';
983       l_return_status            VARCHAR2 (1)                    := 'S';
984       l_oiev_tbl_in              okc_oper_inst_pvt.oiev_tbl_type;
985       l_oiev_tbl_out             okc_oper_inst_pvt.oiev_tbl_type;
986    BEGIN
987       x_return_status := l_return_status;
988 
989       -- get class operation id
990       OPEN cop_csr (p_transaction);
991 
992       FETCH cop_csr
993        INTO l_cop_id;
994 
995       CLOSE cop_csr;
996 
997       l_oiev_tbl_in (1).status_code := 'PROCESSED';
998       l_oiev_tbl_in (1).cop_id := l_cop_id;
999       l_oiev_tbl_in (1).target_chr_id := p_target_chr_id;
1000       okc_oper_inst_pub.create_operation_instance
1001                                          (p_api_version        => l_api_version,
1002                                           p_init_msg_list      => l_init_msg_list,
1003                                           x_return_status      => l_return_status,
1004                                           x_msg_count          => x_msg_count,
1005                                           x_msg_data           => x_msg_data,
1006                                           p_oiev_tbl           => l_oiev_tbl_in,
1007                                           x_oiev_tbl           => l_oiev_tbl_out
1008                                          );
1009       x_oper_instance_id := l_oiev_tbl_out (1).ID;
1010       x_return_status := l_return_status;
1011    EXCEPTION
1012       WHEN OTHERS
1013       THEN
1014          x_return_status := okc_api.g_ret_sts_unexp_error;
1015          okc_api.set_message (g_app_name,
1016                               g_unexpected_error,
1017                               g_sqlcode_token,
1018                               SQLCODE,
1019                               g_sqlerrm_token,
1020                               SQLERRM
1021                              );
1022    END;
1023 
1024 /***********************************************
1025 Create operation lines , linking the old and new lines
1026 for Split, replace, transfer and update transactions
1027 ***********************************************/
1028    PROCEDURE create_operation_lines (
1029       p_source_line_id                 NUMBER,
1030       p_target_line_id                 NUMBER,
1031       p_source_chr_id                  NUMBER,
1032       p_target_chr_id                  NUMBER,
1033       p_opr_instance_id                NUMBER,
1034       x_return_status     OUT NOCOPY   VARCHAR2,
1035       x_msg_count         OUT NOCOPY   NUMBER,
1036       x_msg_data          OUT NOCOPY   VARCHAR2
1037    )
1038    IS
1039       l_api_version     CONSTANT NUMBER                          := 1.0;
1040       l_init_msg_list   CONSTANT VARCHAR2 (1)                    := 'F';
1041       l_return_status            VARCHAR2 (1)                    := 'S';
1042       l_olev_tbl_in              okc_oper_inst_pvt.olev_tbl_type;
1043       l_olev_tbl_out             okc_oper_inst_pvt.olev_tbl_type;
1044    BEGIN
1045       x_return_status := l_return_status;
1046       l_olev_tbl_in (1).oie_id := p_opr_instance_id;
1047       l_olev_tbl_in (1).process_flag := 'P';
1048       l_olev_tbl_in (1).subject_chr_id := p_target_chr_id;
1049       l_olev_tbl_in (1).object_chr_id := p_source_chr_id;
1050       l_olev_tbl_in (1).subject_cle_id := p_target_line_id;
1051       l_olev_tbl_in (1).object_cle_id := p_source_line_id;
1052       l_olev_tbl_in (1).active_yn := 'Y';
1053       okc_oper_inst_pub.create_operation_line
1054                                          (p_api_version        => l_api_version,
1055                                           p_init_msg_list      => l_init_msg_list,
1056                                           x_return_status      => l_return_status,
1057                                           x_msg_count          => x_msg_count,
1058                                           x_msg_data           => x_msg_data,
1059                                           p_olev_tbl           => l_olev_tbl_in,
1060                                           x_olev_tbl           => l_olev_tbl_out
1061                                          );
1062       x_return_status := l_return_status;
1063    EXCEPTION
1064       WHEN OTHERS
1065       THEN
1066          x_return_status := okc_api.g_ret_sts_unexp_error;
1067          okc_api.set_message (g_app_name,
1068                               g_unexpected_error,
1069                               g_sqlcode_token,
1070                               SQLCODE,
1071                               g_sqlerrm_token,
1072                               SQLERRM
1073                              );
1074    END;
1075 
1076 /***********************************************
1077 
1078 Check if two contract headers can be merged for
1079 System Transfers
1080 ************************************************/
1081    PROCEDURE header_merge_yn (
1082       p_source_chr_id   IN              NUMBER,
1083       p_target_chr_id   IN              NUMBER,
1084       p_sts_code        IN              VARCHAR2,
1085       x_eligible_yn     OUT NOCOPY      VARCHAR2,
1086       x_msg_count       OUT NOCOPY      NUMBER,
1087       x_msg_data        OUT NOCOPY      VARCHAR2,
1088       x_return_status   OUT NOCOPY      VARCHAR2
1089    )
1090    IS
1091       -- [Signed] [Active] (Profile)         <=> [Signed] [Active](Target)
1092       -- [Entered] (Profile)                  => [Entered, Active] (Target)
1093       CURSOR source_csr (l_chr_id NUMBER)
1094       IS
1095          SELECT a.payment_term_id, a.price_list_id, c.ste_code, --a.STS_CODE,
1096                 a.authoring_org_id, a.currency_code, a.template_yn,
1097                 a.conversion_type, a.conversion_rate, a.conversion_rate_date,
1098                 a.conversion_euro_rate, b.inv_trx_type, b.ar_interface_yn,
1099                 b.summary_trx_yn, b.hold_billing, a.inv_organization_id,
1100                 a.scs_code, c.ste_code source_ste_code, b.period_start,
1101                 b.period_type, b.price_uom, a.billed_at_source
1102            FROM okc_k_headers_all_b a, oks_k_headers_b b, okc_statuses_b c
1103           WHERE a.ID = l_chr_id AND a.ID = b.chr_id AND p_sts_code = c.code;
1104 
1105       -- and c.ste_code in ('ACTIVE','ENTERED','SIGNED');
1106 
1107       -- Comparing the profile value 'OKS_TRANSFER_STATUS' with target ste_code
1108       CURSOR target_csr (
1109          l_target_chr_id     NUMBER,
1110          l_pay_term          NUMBER,
1111          l_price_list        NUMBER,
1112          l_profile           VARCHAR2,
1113          l_source_ste_code   VARCHAR2,
1114          l_org_id            NUMBER,
1115          l_curr_code         VARCHAR2,
1116          l_temp_yn           VARCHAR2,
1117          l_conv_type         VARCHAR2,
1118          l_conv_rate         VARCHAR2,
1119          l_conv_rate_date    DATE,
1120          l_conv_euro         NUMBER,
1121          l_trx_type          VARCHAR2,
1122          l_ar_int            VARCHAR2,
1123          l_sum_trx           VARCHAR2,
1124          l_hold_bill         VARCHAR2,
1125          l_inv_org_id        NUMBER,
1126          l_scs_code          VARCHAR2,
1127          l_period_start      VARCHAR2,
1128          l_period_type       VARCHAR2,
1129          l_price_uom         VARCHAR2,
1130 	 l_billed_at_source  VARCHAR2
1131       )
1132       IS
1133          SELECT a.ID
1134            FROM okc_k_headers_all_b a, oks_k_headers_b b, okc_statuses_b c
1135           WHERE a.ID = l_target_chr_id
1136             AND a.ID = b.chr_id
1137             AND a.sts_code= c.code --Bug fix 5614310
1138             AND c.ste_code IN ('ACTIVE', 'ENTERED', 'SIGNED')
1139             AND (   DECODE (DECODE (l_source_ste_code,
1140                                     'ACTIVE', 1,
1141                                     'SIGNED', 1,
1142                                     'HOLD', 1,
1143                                     0
1144                                    ),
1145                             DECODE (l_profile, 'ACTIVE', 1, 2), 1,
1146                             3
1147                            ) =
1148                               DECODE (c.ste_code,
1149                                       'ACTIVE', 1,
1150                                       'SIGNED', 1,
1151                                       4
1152                                      )
1153                  OR DECODE (DECODE (l_source_ste_code,
1154                                     'ACTIVE', 1,
1155                                     'SIGNED', 1,
1156                                     'HOLD', 1,
1157                                     0
1158                                    ),
1159                             DECODE (l_profile, 'ENTERED', 1, 2), 1,
1160                             3
1161                            ) = DECODE (c.ste_code, 'ENTERED', 1, 4)
1162                  OR DECODE (l_source_ste_code, 'ENTERED', 1, 2) =
1163                                           DECODE (c.ste_code,
1164                                                   'ENTERED', 1,
1165                                                   3
1166                                                  )
1167                 )
1168             AND NVL (a.payment_term_id, -99) = NVL (l_pay_term, -99)
1169             AND NVL (a.price_list_id, -99) = NVL (l_price_list, -99)
1170             AND a.authoring_org_id = l_org_id
1171             AND a.currency_code = l_curr_code
1172             AND a.template_yn = l_temp_yn
1173             AND NVL (a.conversion_type, -99) = NVL (l_conv_type, -99)
1174             AND NVL (a.conversion_rate, -99) = NVL (l_conv_rate, -99)
1175             AND DECODE (a.conversion_rate_date,
1176                         NULL, -99,
1177                         SYSDATE - TRUNC (a.conversion_rate_date)
1178                        ) =
1179                    DECODE (l_conv_rate_date,
1180                            NULL, -99,
1181                            SYSDATE - TRUNC (l_conv_rate_date)
1182                           )
1183             AND NVL (a.conversion_euro_rate, -99) = NVL (l_conv_euro, -99)
1184             AND NVL (b.inv_trx_type, -99) = NVL (l_trx_type, -99)
1185             AND NVL (b.ar_interface_yn, -99) = NVL (l_ar_int, -99)
1186             AND NVL (b.summary_trx_yn, -99) = NVL (l_sum_trx, -99)
1187             AND NVL (b.hold_billing, -99) = NVL (l_hold_bill, -99)
1188             AND NVL (a.inv_organization_id, -99) = NVL (l_inv_org_id, -99)
1189             AND NVL (a.scs_code, -99) = NVL (l_scs_code, -99)
1190             AND NVL (b.period_start, -99) = NVL (l_period_start, -99)
1191             AND NVL (b.period_type, -99) = NVL (l_period_type, -99)
1192             AND NVL (b.price_uom, -99) = NVL (l_price_uom, -99)
1193 	    AND NVL (a.billed_at_source, '-99') = NVL(l_billed_at_source, '-99');
1194 
1195       l_target_rec   target_csr%ROWTYPE;
1196       l_source_rec   source_csr%ROWTYPE;
1197    BEGIN
1198       x_return_status := okc_api.g_ret_sts_success;
1199 
1200       OPEN source_csr (p_source_chr_id);
1201 
1202       FETCH source_csr
1203        INTO l_source_rec;
1204 
1205       CLOSE source_csr;
1206 
1207       OPEN target_csr (p_target_chr_id,
1208                        l_source_rec.payment_term_id,
1209                        l_source_rec.price_list_id,
1210                        fnd_profile.VALUE ('OKS_TRANSFER_STATUS'),
1211                        l_source_rec.source_ste_code,
1212                        l_source_rec.authoring_org_id,
1213                        l_source_rec.currency_code,
1214                        l_source_rec.template_yn,
1215                        l_source_rec.conversion_type,
1216                        l_source_rec.conversion_rate,
1217                        l_source_rec.conversion_rate_date,
1218                        l_source_rec.conversion_euro_rate,
1219                        l_source_rec.inv_trx_type,
1220                        l_source_rec.ar_interface_yn,
1221                        l_source_rec.summary_trx_yn,
1222                        l_source_rec.hold_billing,
1223                        l_source_rec.inv_organization_id,
1224                        l_source_rec.scs_code,
1225                        l_source_rec.period_start,
1226                        l_source_rec.period_type,
1227                        l_source_rec.price_uom,
1228                        l_source_rec.billed_at_source
1229                       );
1230 
1231       FETCH target_csr
1232        INTO l_target_rec;
1233 
1234       IF target_csr%NOTFOUND
1235       THEN
1236          x_eligible_yn := 'N';
1237       ELSE
1238          x_eligible_yn := 'Y';
1239       END IF;
1240 
1241       CLOSE target_csr;
1242    EXCEPTION
1243       WHEN OTHERS
1244       THEN
1245          x_return_status := okc_api.g_ret_sts_unexp_error;
1246          okc_api.set_message (g_app_name,
1247                               g_unexpected_error,
1248                               g_sqlcode_token,
1249                               SQLCODE,
1250                               g_sqlerrm_token,
1251                               SQLERRM
1252                              );
1253    END header_merge_yn;
1254 
1255 /***********************************************
1256 
1257 Check if two contract lines can be merged for
1258 System Transfers
1259 ************************************************/
1260    PROCEDURE line_merge_yn (
1261       p_source_line_id   IN              NUMBER,
1262       p_target_line_id   IN              NUMBER,
1263       p_source_flag      IN              VARCHAR2,
1264       x_eligible_yn      OUT NOCOPY      VARCHAR2,
1265       x_msg_count        OUT NOCOPY      NUMBER,
1266       x_msg_data         OUT NOCOPY      VARCHAR2,
1267       x_return_status    OUT NOCOPY      VARCHAR2
1268    )
1269    IS
1270       -- [Signed]  [Active] (Profile)         <=> [Signed]  [Active] (Target)
1271       -- [Entered] (Profile)                  => [Entered, Active] (Target)
1272       CURSOR source_line (l_line_id NUMBER)
1273       IS
1274          SELECT b.acct_rule_id, a.price_list_id, c.ste_code, a.lse_id,
1275                 a.bill_to_site_use_id, a.line_renewal_type_code,
1276                 b.tax_code                              --Fix for bug 4121175
1277                           ,
1278                 b.price_uom
1279            FROM okc_k_lines_b a, oks_k_lines_b b, okc_statuses_b c
1280           WHERE a.ID = l_line_id AND a.ID = b.cle_id AND a.sts_code = c.code;
1281 
1282       CURSOR service_item (l_line_id NUMBER)
1283       IS
1284          SELECT object1_id1
1285            FROM okc_k_items
1286           WHERE cle_id = l_line_id AND jtot_object1_code LIKE 'OKX_SYSITEM';
1287 
1288       -- if date_completed is not null then it's billed.
1289       CURSOR get_date_complete (l_line_id NUMBER)
1290       IS
1291          SELECT a.date_completed
1292            FROM oks_level_elements a, oks_stream_levels_b b
1293           WHERE b.cle_id = l_line_id AND a.rul_id = b.ID;
1294 
1295       CURSOR target_line (
1296          l_line_id                  NUMBER,
1297          l_acct_rule_id             NUMBER,
1298          l_price_list_id            NUMBER,
1299          l_ste_code                 VARCHAR2,
1300          l_lse_id                   NUMBER,
1301          l_flag                     VARCHAR2,
1302          l_bill_to_site_use_id      NUMBER,
1303          l_line_renewal_type_code   VARCHAR2,
1304          l_tax_code                 VARCHAR2,
1305          l_price_uom                VARCHAR2
1306       )
1307       IS
1308          SELECT a.ID
1309            FROM okc_k_lines_b a, oks_k_lines_b b, okc_statuses_b c
1310           WHERE a.ID = l_line_id
1311             AND a.ID = b.cle_id
1312             AND a.sts_code = c.code
1313             AND c.ste_code IN ('ACTIVE', 'ENTERED', 'SIGNED')
1314             AND NVL (b.acct_rule_id, -99) = NVL (l_acct_rule_id, -99)
1315             AND NVL (b.tax_code, -99) = NVL (l_tax_code, -99)
1316             --Fix for bug 4121175
1317             AND NVL (b.price_uom, -99) = NVL (l_price_uom, -99)
1318             AND NVL (a.price_list_id, -99) = NVL (l_price_list_id, -99)
1319             /*
1320             AND (  c.ste_code = l_ste_code
1321                 OR decode (l_ste_code, 'SIGNED', 1, 'ACTIVE', 1,  4) =
1322                    decode(c.ste_code, 'SIGNED', 1, 'ACTIVE', 1, 3)
1323                  )
1324             */
1325             AND a.lse_id = l_lse_id
1326             AND (   DECODE (l_flag, 'N', 0, 1) = 0
1327                  OR (    DECODE (l_flag, 'Y', 1, 0) = 1
1328                      AND NVL (a.bill_to_site_use_id, -99) =
1329                                                NVL (l_bill_to_site_use_id,
1330                                                     -99)
1331                      AND NVL (a.line_renewal_type_code, -99) =
1332                                             NVL (l_line_renewal_type_code,
1333                                                  -99)
1334                     )
1335                 );
1336 
1337       CURSOR sales_credit_csr (l_line_id NUMBER)
1338       IS
1339          SELECT PERCENT, sc.sales_credit_type_id1, sct.quota_flag,
1340                 sc.ctc_id sales_person_id, sc.sales_group_id
1341            FROM oks_k_sales_credits sc, oe_sales_credit_types sct
1342           WHERE sc.sales_credit_type_id1 = sct.sales_credit_type_id
1343             AND sc.cle_id = l_line_id;
1344 
1345       CURSOR target_sales_credit_csr (
1346          l_line_id                 NUMBER,
1347          l_percent                 NUMBER,
1348          l_sales_credit_type_id1   NUMBER,
1349          l_quota_flag              VARCHAR2,
1350          l_sales_person_id         NUMBER,
1351          l_sales_group_id          NUMBER
1352       )
1353       IS
1354          SELECT PERCENT, sc.sales_credit_type_id1, sct.quota_flag,
1355                 sc.ctc_id sales_person_id, sc.sales_group_id
1356            FROM oks_k_sales_credits sc, oe_sales_credit_types sct
1357           WHERE sc.sales_credit_type_id1 = sct.sales_credit_type_id
1358             AND sc.cle_id = l_line_id
1359             AND PERCENT = l_percent
1360             AND sc.sales_credit_type_id1 = l_sales_credit_type_id1
1361             AND sct.quota_flag = l_quota_flag
1362             AND sc.ctc_id = l_sales_person_id
1363             AND NVL (sc.sales_group_id, -99) = NVL (l_sales_group_id, -99);
1364 
1365       CURSOR sales_credit_count_csr (l_line_id NUMBER)
1366       IS
1367          SELECT COUNT (*)
1368            FROM oks_k_sales_credits
1369           WHERE cle_id = l_line_id;
1370 
1371       l_source_rec               source_line%ROWTYPE;
1372       l_target_rentype           target_line%ROWTYPE;
1373       l_target_sales_rec         target_sales_credit_csr%ROWTYPE;
1374       l_source_sales_count       NUMBER;
1375       l_target_sales_count       NUMBER;
1376       l_target_bill_completed    DATE;
1377       l_source_bill_completed    DATE;
1378       l_source_service_item_id   NUMBER;
1379       l_target_service_item_id   NUMBER;
1380       l_api_version     CONSTANT NUMBER                            := 1.0;
1381       l_init_msg_list            VARCHAR2 (2000)            := okc_api.g_false;
1382       l_return_status            VARCHAR2 (1);
1383    BEGIN
1384       l_return_status := okc_api.g_ret_sts_success;
1385 
1386       OPEN source_line (p_source_line_id);
1387 
1388       FETCH source_line
1389        INTO l_source_rec;
1390 
1391       CLOSE source_line;
1392 
1393       -- Check invoice rule, accounting rule, price list id , currency code,
1394       -- status, line style id, payment type, billing schedule type.
1395       OPEN target_line (p_target_line_id,
1396                         l_source_rec.acct_rule_id,
1397                         l_source_rec.price_list_id,
1398                         fnd_profile.VALUE ('OKS_TRANSFER_STATUS'),
1399                         l_source_rec.lse_id,
1400                         p_source_flag,
1401                         l_source_rec.bill_to_site_use_id,
1402                         l_source_rec.line_renewal_type_code,
1403                         l_source_rec.tax_code,
1404                         l_source_rec.price_uom
1405                        );
1406 
1407       FETCH target_line
1408        INTO l_target_rentype;
1409 
1410       IF target_line%NOTFOUND
1411       THEN
1412          x_eligible_yn := 'N';
1413       ELSE
1414          ------------------------- Check Service Item Id ------------------------
1415          OPEN service_item (p_source_line_id);
1416 
1417          FETCH service_item
1418           INTO l_source_service_item_id;
1419 
1420          CLOSE service_item;
1421 
1422          OPEN service_item (p_target_line_id);
1423 
1424          FETCH service_item
1425           INTO l_target_service_item_id;
1426 
1427          CLOSE service_item;
1428 
1429          IF NVL (l_target_service_item_id, -99) =
1430                                            NVL (l_source_service_item_id,
1431                                                 -99)
1432          THEN
1433             x_eligible_yn := 'Y';
1434          END IF;
1435 
1436          -------------------------- Check  Coverage -----------------------------
1437          IF     x_eligible_yn = 'Y'
1438             AND fnd_profile.VALUE ('OKS_CHECK_COV_MATCH') = 'Y'
1439          THEN
1440             oks_coverages_pub.check_coverage_match
1441                               (p_api_version                  => l_api_version,
1442                                p_init_msg_list                => l_init_msg_list,
1443                                x_return_status                => l_return_status,
1444                                x_msg_count                    => x_msg_count,
1445                                x_msg_data                     => x_msg_data,
1446                                p_source_contract_line_id      => p_source_line_id,
1447                                p_target_contract_line_id      => p_target_line_id,
1448                                x_coverage_match               => x_eligible_yn
1449                               );
1450 
1451             IF l_return_status <> okc_api.g_ret_sts_success
1452             THEN
1453                CLOSE target_line;
1454 
1455                RAISE g_exception_halt_validation;
1456             END IF;
1457          END IF;
1458 
1459          -- Vigandhi 06/10/2004
1460          -- Remove the check for date completed for line merging.
1461          /*   --------------------- Check Date Completed -----------------------
1462             If x_eligible_yn = 'Y' Then
1463                 -- The billing is one time so we'll only have one level element.
1464                 Open get_date_complete(p_source_line_id);
1465                 Fetch get_date_complete into l_source_bill_completed;
1466                 Close get_date_complete;
1467 
1468                 Open get_date_complete(p_target_line_id);
1469                 Fetch get_date_complete into l_target_bill_completed;
1470                 Close get_date_complete;
1471 
1472                 If l_source_bill_completed is null and l_target_bill_completed is null then
1473                     x_eligible_yn := 'Y';
1474                 Elsif l_source_bill_completed is not null and l_target_bill_completed is not null
1475                     and  trunc(l_source_bill_completed) = trunc(l_target_bill_completed) then
1476                     x_eligible_yn := 'Y';
1477                 Else
1478                     x_eligible_yn := 'N';
1479                 End If;
1480 
1481             End If;        */
1482             --------------------- Check Sales Credit -----------------------
1483          IF x_eligible_yn = 'Y'
1484          THEN
1485             OPEN sales_credit_count_csr (p_source_line_id);
1486 
1487             FETCH sales_credit_count_csr
1488              INTO l_source_sales_count;
1489 
1490             CLOSE sales_credit_count_csr;
1491 
1492             OPEN sales_credit_count_csr (p_target_line_id);
1493 
1494             FETCH sales_credit_count_csr
1495              INTO l_target_sales_count;
1496 
1497             CLOSE sales_credit_count_csr;
1498 
1499             IF l_source_sales_count <> l_target_sales_count
1500             THEN
1501                x_eligible_yn := 'N';
1502             ELSE
1503                FOR sales_credit_rec IN sales_credit_csr (p_source_line_id)
1504                LOOP
1505                   OPEN target_sales_credit_csr
1506                                      (p_target_line_id,
1507                                       sales_credit_rec.PERCENT,
1508                                       sales_credit_rec.sales_credit_type_id1,
1509                                       sales_credit_rec.quota_flag,
1510                                       sales_credit_rec.sales_person_id,
1511                                       sales_credit_rec.sales_group_id
1512                                      );
1513 
1514                   FETCH target_sales_credit_csr
1515                    INTO l_target_sales_rec;
1516 
1517                   IF target_sales_credit_csr%NOTFOUND
1518                   THEN
1519                      x_eligible_yn := 'N';
1520 
1521                      CLOSE target_sales_credit_csr;
1522 
1523                      EXIT;
1524                   END IF;
1525 
1526                   CLOSE target_sales_credit_csr;
1527                END LOOP;
1528             END IF;            -- l_source_sales_count <> l_target_sales_count
1529          END IF;                                       --  x_eligible_yn = 'Y'
1530       --------------------- Check Sales Credit Finished -----------------------
1531       END IF;                                          -- target_line%NOTFOUND
1532 
1533       CLOSE target_line;
1534 
1535       x_return_status := l_return_status;
1536    EXCEPTION
1537       WHEN g_exception_halt_validation
1538       THEN
1539          x_return_status := l_return_status;
1540       WHEN OTHERS
1541       THEN
1542          x_return_status := okc_api.g_ret_sts_unexp_error;
1543          okc_api.set_message (g_app_name,
1544                               g_unexpected_error,
1545                               g_sqlcode_token,
1546                               SQLCODE,
1547                               g_sqlerrm_token,
1548                               SQLERRM
1549                              );
1550    END line_merge_yn;
1551 
1552    PROCEDURE check_line_effectivity (
1553       p_cle_id     IN              NUMBER,
1554       p_srv_sdt    IN              DATE,
1555       p_srv_edt    IN              DATE,
1556       x_line_sdt   OUT NOCOPY      DATE,
1557       x_line_edt   OUT NOCOPY      DATE,
1558       x_status     OUT NOCOPY      VARCHAR2
1559    )
1560    IS
1561       CURSOR l_line_csr
1562       IS
1563          SELECT start_date, end_date
1564            FROM okc_k_lines_b
1565           WHERE ID = p_cle_id;
1566 
1567       l_line_csr_rec   l_line_csr%ROWTYPE;
1568    BEGIN
1569       OPEN l_line_csr;
1570 
1571       FETCH l_line_csr
1572        INTO l_line_csr_rec;
1573 
1574       IF l_line_csr%FOUND
1575       THEN
1576          IF     p_srv_sdt >= l_line_csr_rec.start_date
1577             AND p_srv_edt <= l_line_csr_rec.end_date
1578          THEN
1579             x_status := 'N';
1580          ELSE
1581             IF p_srv_sdt >= l_line_csr_rec.start_date
1582             THEN
1583                x_line_sdt := l_line_csr_rec.start_date;
1584             ELSE
1585                x_line_sdt := p_srv_sdt;
1586             END IF;
1587 
1588             IF p_srv_edt >= l_line_csr_rec.end_date
1589             THEN
1590                x_line_edt := p_srv_edt;
1591             ELSE
1592                x_line_edt := l_line_csr_rec.end_date;
1593             END IF;
1594 
1595             x_status := 'Y';
1596          END IF;
1597       ELSE
1598          x_status := 'E';
1599       END IF;
1600    END;
1601 
1602    PROCEDURE update_line_dates (
1603       p_cle_id          IN              NUMBER,
1604       p_chr_id          IN              NUMBER,
1605       p_new_sdt         IN              DATE,
1606       p_new_edt         IN              DATE,
1607       p_sts_flag        IN              VARCHAR2,
1608       p_warranty_flag   IN              VARCHAR2,
1609       x_status          OUT NOCOPY      VARCHAR2,
1610       x_msg_count       OUT NOCOPY      NUMBER,
1611       x_msg_data        OUT NOCOPY      VARCHAR2
1612    )
1613    IS
1614       CURSOR l_rulegroup_csr
1615       IS
1616          SELECT inv_rule_id
1617            FROM okc_k_lines_b
1618           WHERE cle_id = p_cle_id AND dnz_chr_id = p_chr_id;
1619 
1620 --General
1621       l_api_version     CONSTANT NUMBER                         := 1.0;
1622       l_init_msg_list   CONSTANT VARCHAR2 (1)              := okc_api.g_false;
1623       l_return_status            VARCHAR2 (1)                   := 'S';
1624       l_index                    VARCHAR2 (2000);
1625 --Contract Line
1626       l_clev_tbl_in              okc_contract_pub.clev_tbl_type;
1627       l_clev_tbl_out             okc_contract_pub.clev_tbl_type;
1628       l_cleid                    NUMBER;
1629       l_rgp_id                   NUMBER;
1630       l_rule_id                  NUMBER;
1631       l_invoice_rule_id          NUMBER;
1632       l_ste_code                 VARCHAR2 (30);
1633       l_sts_code                 VARCHAR2 (30);
1634    BEGIN
1635       x_status := okc_api.g_ret_sts_success;
1636 
1637       IF p_sts_flag = 'Y'
1638       THEN
1639          IF p_new_sdt > SYSDATE
1640          THEN
1641             get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
1642             l_clev_tbl_in (1).sts_code := l_sts_code;
1643          ELSIF p_new_sdt <= SYSDATE AND p_new_edt >= SYSDATE
1644          THEN
1645             get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
1646             l_clev_tbl_in (1).sts_code := l_sts_code;
1647          ELSIF p_new_edt < SYSDATE
1648          THEN
1649             get_sts_code ('EXPIRED', NULL, l_ste_code, l_sts_code);
1650             l_clev_tbl_in (1).sts_code := l_sts_code;
1651          END IF;
1652       END IF;
1653 
1654       --Contract Header Date Update
1655       l_clev_tbl_in (1).ID := p_cle_id;
1656       l_clev_tbl_in (1).start_date := p_new_sdt;
1657       l_clev_tbl_in (1).end_date := p_new_edt;
1658       okc_contract_pub.update_contract_line
1659                                        (p_api_version            => l_api_version,
1660                                         p_init_msg_list          => l_init_msg_list,
1661                                         p_restricted_update      => okc_api.g_true,
1662                                         x_return_status          => l_return_status,
1663                                         x_msg_count              => x_msg_count,
1664                                         x_msg_data               => x_msg_data,
1665                                         p_clev_tbl               => l_clev_tbl_in,
1666                                         x_clev_tbl               => l_clev_tbl_out
1667                                        );
1668 
1669       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1670       THEN
1671          fnd_log.STRING
1672                  (fnd_log.level_event,
1673                   g_module_current || '.Update_Line_Dates.external_call.after',
1674                      'okc_contract_pub.update_contract_line(Return status = '
1675                   || l_return_status
1676                   || ')'
1677                  );
1678       END IF;
1679 
1680       IF l_return_status = 'S'
1681       THEN
1682          l_cleid := l_clev_tbl_out (1).ID;
1683       ELSE
1684          x_status := 'E';
1685          RAISE g_exception_halt_validation;
1686       END IF;
1687    EXCEPTION
1688       WHEN g_exception_halt_validation
1689       THEN
1690          NULL;
1691       WHEN OTHERS
1692       THEN
1693          x_status := okc_api.g_ret_sts_unexp_error;
1694          okc_api.set_message (g_app_name,
1695                               g_unexpected_error,
1696                               g_sqlcode_token,
1697                               SQLCODE,
1698                               g_sqlerrm_token,
1699                               SQLERRM
1700                              );
1701 
1702          IF fnd_log.level_exception >= fnd_log.g_current_runtime_level
1703          THEN
1704             fnd_log.STRING (fnd_log.level_exception,
1705                             g_module_current
1706                             || '.Update_Line_Dates.UNEXPECTED',
1707                             'sqlcode = ' || SQLCODE || ', sqlerrm = '
1708                             || SQLERRM
1709                            );
1710          END IF;
1711    END;
1712 
1713 /*-----------------------------------------------------------------
1714 -- warranty/Extwarranty consolidation
1715 -- P_rty_code new parameter
1716 ------------------------------------------------------------------*/
1717    PROCEDURE create_obj_rel (
1718       p_k_id            IN              NUMBER,
1719       p_line_id         IN              NUMBER,
1720       p_orderhdrid      IN              NUMBER,
1721       p_rty_code        IN              VARCHAR2,
1722       p_orderlineid     IN              NUMBER,
1723       x_return_status   OUT NOCOPY      VARCHAR2,
1724       x_msg_count       OUT NOCOPY      NUMBER,
1725       x_msg_data        OUT NOCOPY      VARCHAR2,
1726       x_crjv_tbl_out    OUT NOCOPY      okc_k_rel_objs_pub.crjv_tbl_type
1727    )
1728    IS
1729       l_api_version     CONSTANT NUMBER                           := 1.0;
1730       l_init_msg_list   CONSTANT VARCHAR2 (1)                     := 'F';
1731       l_return_status            VARCHAR2 (1)                     := 'S';
1732       l_crjv_tbl_in              okc_k_rel_objs_pub.crjv_tbl_type;
1733       l_crjv_tbl_out             okc_k_rel_objs_pub.crjv_tbl_type;
1734    BEGIN
1735       x_return_status := l_return_status;
1736 
1737       IF p_orderhdrid IS NOT NULL
1738       THEN
1739          l_crjv_tbl_in (1).chr_id := p_k_id;
1740          l_crjv_tbl_in (1).object1_id1 := p_orderhdrid;
1741          l_crjv_tbl_in (1).object1_id2 := '#';
1742          l_crjv_tbl_in (1).jtot_object1_code := 'OKX_ORDERHEAD';
1743          --l_crjv_tbl_in( 1 ).rty_code        := 'CONTRACTSERVICESORDER';
1744          l_crjv_tbl_in (1).rty_code := p_rty_code;
1745          okc_k_rel_objs_pub.create_row (p_api_version        => l_api_version,
1746                                         p_init_msg_list      => l_init_msg_list,
1747                                         x_return_status      => l_return_status,
1748                                         x_msg_count          => x_msg_count,
1749                                         x_msg_data           => x_msg_data,
1750                                         p_crjv_tbl           => l_crjv_tbl_in,
1751                                         x_crjv_tbl           => l_crjv_tbl_out
1752                                        );
1753 
1754          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1755          THEN
1756             fnd_log.STRING
1757                          (fnd_log.level_event,
1758                              g_module_current
1759                           || '.Create_Obj_Rel.external_call_hdr.after',
1760                              'okc_k_rel_objs_pub.create_row(Return status = '
1761                           || l_return_status
1762                           || ')'
1763                          );
1764          END IF;
1765 
1766          IF l_return_status = 'S'
1767          THEN
1768             x_crjv_tbl_out := l_crjv_tbl_out;
1769          ELSE
1770             x_return_status := l_return_status;
1771          END IF;
1772       ELSIF p_orderlineid IS NOT NULL
1773       THEN
1774          l_crjv_tbl_in (1).cle_id := p_line_id;
1775          l_crjv_tbl_in (1).chr_id := p_k_id;           -- Fix for Bug 2844603
1776          l_crjv_tbl_in (1).object1_id1 := p_orderlineid;
1777          l_crjv_tbl_in (1).object1_id2 := '#';
1778          l_crjv_tbl_in (1).jtot_object1_code := 'OKX_ORDERLINE';
1779          --l_crjv_tbl_in(1).rty_code          := 'CONTRACTSERVICESORDER';
1780          l_crjv_tbl_in (1).rty_code := p_rty_code;
1781          okc_k_rel_objs_pub.create_row (p_api_version        => l_api_version,
1782                                         p_init_msg_list      => l_init_msg_list,
1783                                         x_return_status      => l_return_status,
1784                                         x_msg_count          => x_msg_count,
1785                                         x_msg_data           => x_msg_data,
1786                                         p_crjv_tbl           => l_crjv_tbl_in,
1787                                         x_crjv_tbl           => l_crjv_tbl_out
1788                                        );
1789 
1790          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1791          THEN
1792             fnd_log.STRING
1793                          (fnd_log.level_event,
1794                              g_module_current
1795                           || '.Create_Obj_Rel.external_call_line.after',
1796                              'okc_k_rel_objs_pub.create_row(Return status = '
1797                           || l_return_status
1798                           || ')'
1799                          );
1800          END IF;
1801 
1802          IF l_return_status = 'S'
1803          THEN
1804             x_crjv_tbl_out := l_crjv_tbl_out;
1805          ELSE
1806             x_return_status := l_return_status;
1807          END IF;
1808       END IF;
1809    EXCEPTION
1810       WHEN OTHERS
1811       THEN
1812          x_return_status := okc_api.g_ret_sts_unexp_error;
1813          okc_api.set_message (g_app_name,
1814                               g_unexpected_error,
1815                               g_sqlcode_token,
1816                               SQLCODE,
1817                               g_sqlerrm_token,
1818                               SQLERRM
1819                              );
1820    END;
1821 
1822    PROCEDURE check_hdr_effectivity (
1823       p_chr_id    IN              NUMBER,
1824       p_srv_sdt   IN              DATE,
1825       p_srv_edt   IN              DATE,
1826       x_hdr_sdt   OUT NOCOPY      DATE,
1827       x_hdr_edt   OUT NOCOPY      DATE,
1828       x_status    OUT NOCOPY      VARCHAR2
1829    )
1830    IS
1831       CURSOR l_hdr_csr
1832       IS
1833          SELECT start_date, end_date
1834            FROM okc_k_headers_v
1835           WHERE ID = p_chr_id;
1836 
1837       l_hdr_csr_rec   l_hdr_csr%ROWTYPE;
1838    BEGIN
1839       OPEN l_hdr_csr;
1840 
1841       FETCH l_hdr_csr
1842        INTO l_hdr_csr_rec;
1843 
1844       IF l_hdr_csr%FOUND
1845       THEN
1846          IF     p_srv_sdt >= l_hdr_csr_rec.start_date
1847             AND p_srv_edt <= l_hdr_csr_rec.end_date
1848          THEN
1849             x_status := 'N';
1850          ELSE
1851             IF p_srv_sdt >= l_hdr_csr_rec.start_date
1852             THEN
1853                x_hdr_sdt := l_hdr_csr_rec.start_date;
1854             ELSE
1855                x_hdr_sdt := p_srv_sdt;
1856             END IF;
1857 
1858             IF p_srv_edt >= l_hdr_csr_rec.end_date
1859             THEN
1860                x_hdr_edt := p_srv_edt;
1861             ELSE
1862                x_hdr_edt := l_hdr_csr_rec.end_date;
1863             END IF;
1864 
1865             x_status := 'Y';
1866          END IF;
1867       ELSE
1868          x_status := 'E';
1869       END IF;
1870    END;
1871 
1872    PROCEDURE update_hdr_dates (
1873       p_chr_id      IN              NUMBER,
1874       p_new_sdt     IN              DATE,
1875       p_new_edt     IN              DATE,
1876       p_sts_flag    IN              VARCHAR2,
1877       x_status      OUT NOCOPY      VARCHAR2,
1878       x_msg_count   OUT NOCOPY      NUMBER,
1879       x_msg_data    OUT NOCOPY      VARCHAR2
1880    )
1881    IS
1882       --General
1883       l_api_version     CONSTANT NUMBER                         := 1.0;
1884       l_init_msg_list   CONSTANT VARCHAR2 (1)              := okc_api.g_false;
1885       l_return_status            VARCHAR2 (1)                   := 'S';
1886       l_index                    VARCHAR2 (2000);
1887       --Contract Header
1888       l_chrv_tbl_in              okc_contract_pub.chrv_tbl_type;
1889       l_chrv_tbl_out             okc_contract_pub.chrv_tbl_type;
1890       --Rule Related
1891       --l_rulv_tbl_in                 okc_rule_pub.rulv_tbl_type;
1892       --l_rulv_tbl_out                okc_rule_pub.rulv_tbl_type;
1893       --Time Value Related
1894       l_isev_ext_tbl_in          okc_time_pub.isev_ext_tbl_type;
1895       l_isev_ext_tbl_out         okc_time_pub.isev_ext_tbl_type;
1896       l_chrid                    NUMBER;
1897       l_timevalue_id             NUMBER;
1898       l_rgp_id                   NUMBER;
1899       l_rule_id                  NUMBER;
1900       l_ste_code                 VARCHAR2 (30);
1901       l_sts_code                 VARCHAR2 (30);
1902    BEGIN
1903       x_status := okc_api.g_ret_sts_success;
1904 
1905       IF p_sts_flag = 'Y'
1906       THEN
1907          IF p_new_sdt > SYSDATE
1908          THEN
1909             get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
1910             l_chrv_tbl_in (1).sts_code := l_sts_code;
1911          ELSIF p_new_sdt <= SYSDATE AND p_new_edt >= SYSDATE
1912          THEN
1913             get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
1914             l_chrv_tbl_in (1).sts_code := l_sts_code;
1915          ELSIF p_new_edt < SYSDATE
1916          THEN
1917             get_sts_code ('EXPIRED', NULL, l_ste_code, l_sts_code);
1918             l_chrv_tbl_in (1).sts_code := l_sts_code;
1919          END IF;
1920       END IF;
1921 
1922       --Contract Header Date Update
1923       l_chrv_tbl_in (1).ID := p_chr_id;
1924       l_chrv_tbl_in (1).start_date := p_new_sdt;
1925       l_chrv_tbl_in (1).end_date := p_new_edt;
1926       okc_contract_pub.update_contract_header
1927                                        (p_api_version            => l_api_version,
1928                                         p_init_msg_list          => l_init_msg_list,
1929                                         p_restricted_update      => okc_api.g_true,
1930                                         x_return_status          => l_return_status,
1931                                         x_msg_count              => x_msg_count,
1932                                         x_msg_data               => x_msg_data,
1933                                         p_chrv_tbl               => l_chrv_tbl_in,
1934                                         x_chrv_tbl               => l_chrv_tbl_out
1935                                        );
1936 
1937       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1938       THEN
1939          fnd_log.STRING
1940                (fnd_log.level_event,
1941                 g_module_current || '.Update_Hdr_Dates.external_call.after',
1942                    'okc_contract_pub.update_contract_header(Return status = '
1943                 || l_return_status
1944                 || ')'
1945                );
1946       END IF;
1947 
1948       IF l_return_status = 'S'
1949       THEN
1950          l_chrid := l_chrv_tbl_out (1).ID;
1951       ELSE
1952          x_status := 'E';
1953          RAISE g_exception_halt_validation;
1954       --End If;
1955       END IF;
1956    EXCEPTION
1957       WHEN g_exception_halt_validation
1958       THEN
1959          NULL;
1960       WHEN OTHERS
1961       THEN
1962          x_status := okc_api.g_ret_sts_unexp_error;
1963          okc_api.set_message (g_app_name,
1964                               g_unexpected_error,
1965                               g_sqlcode_token,
1966                               SQLCODE,
1967                               g_sqlerrm_token,
1968                               SQLERRM
1969                              );
1970    END;
1971 
1972    FUNCTION get_contract_number (p_hdrid IN NUMBER)
1973       RETURN VARCHAR2
1974    IS
1975       CURSOR l_hdr_csr
1976       IS
1977          SELECT contract_number
1978            FROM okc_k_headers_v
1979           WHERE ID = p_hdrid;
1980 
1981       l_contract_number   VARCHAR2 (120);
1982    BEGIN
1983       OPEN l_hdr_csr;
1984 
1985       FETCH l_hdr_csr
1986        INTO l_contract_number;
1987 
1988       CLOSE l_hdr_csr;
1989 
1990       RETURN l_contract_number;
1991    END;
1992 
1993    PROCEDURE launch_workflow (p_msg IN VARCHAR2)
1994    IS
1995 --Workflow attributes
1996       l_itemtype      VARCHAR2 (40)  := 'OKSWARWF';
1997       l_itemkey       VARCHAR2 (240)
1998                            := 'OKS-' || TO_CHAR (SYSDATE, 'MMDDYYYYHH24MISS');
1999       l_process       VARCHAR2 (40)  := 'OKSWARPROC';
2000       l_notify        VARCHAR2 (10)  := 'Y';
2001       l_receiver      VARCHAR2 (30);
2002       l_itemkey_seq   INTEGER;
2003    BEGIN
2004       l_notify := NVL (fnd_profile.VALUE ('OKS_INTEGRATION_NOTIFY_YN'), 'NO');
2005       l_receiver :=
2006             NVL (fnd_profile.VALUE ('OKS_INTEGRATION_NOTIFY_TO'), 'SYSADMIN');
2007 
2008       IF UPPER (l_notify) = 'YES'
2009       THEN
2010          SELECT oks_wf_item_key_number_s1.NEXTVAL
2011            INTO l_itemkey_seq
2012            FROM DUAL;
2013 
2014          l_itemkey := 'OKS-' || l_itemkey_seq;
2015          wf_engine.createprocess (itemtype      => l_itemtype,
2016                                   itemkey       => l_itemkey,
2017                                   process       => l_process
2018                                  );
2019          wf_engine.setitemattrtext (itemtype      => l_itemtype,
2020                                     itemkey       => l_itemkey,
2021                                     aname         => 'MSG_TXT',
2022                                     avalue        => p_msg
2023                                    );
2024          wf_engine.setitemattrtext (itemtype      => l_itemtype,
2025                                     itemkey       => l_itemkey,
2026                                     aname         => 'MSG_RECV',
2027                                     avalue        => l_receiver
2028                                    );
2029          wf_engine.startprocess (itemtype      => l_itemtype,
2030                                  itemkey       => l_itemkey);
2031       END IF;
2032    END;
2033 
2034    PROCEDURE update_cov_level (
2035       p_covered_line_id      IN              NUMBER,
2036       p_new_end_date         IN              DATE,
2037       p_k_item_id            IN              NUMBER,
2038       p_new_negotiated_amt   IN              NUMBER,
2039       p_new_cp_qty           IN              NUMBER,
2040       p_list_price           IN              NUMBER,
2041       x_return_status        OUT NOCOPY      VARCHAR2,
2042       x_msg_count            OUT NOCOPY      NUMBER,
2043       x_msg_data             OUT NOCOPY      VARCHAR2
2044    )
2045    IS
2046       CURSOR l_parent_line_csr
2047       IS
2048          SELECT cle_id
2049            FROM okc_k_lines_b
2050           WHERE ID = p_covered_line_id;
2051 
2052       l_api_version     CONSTANT NUMBER                              := 1.0;
2053       l_init_msg_list   CONSTANT VARCHAR2 (1)              := okc_api.g_false;
2054       l_return_status            VARCHAR2 (1)                        := 'S';
2055       l_index                    VARCHAR2 (2000);
2056       --Contract Line Table
2057       l_clev_tbl_in              okc_contract_pub.clev_tbl_type;
2058       l_clev_tbl_out             okc_contract_pub.clev_tbl_type;
2059       --Contract Item
2060       l_cimv_tbl_in              okc_contract_item_pub.cimv_tbl_type;
2061       l_cimv_tbl_out             okc_contract_item_pub.cimv_tbl_type;
2062       l_parent_line_id           NUMBER;
2063       l_line_id                  NUMBER;
2064       l_line_item_id             NUMBER;
2065    BEGIN
2066       IF p_new_end_date IS NOT NULL
2067       THEN
2068          x_return_status := okc_api.g_ret_sts_success;
2069          l_clev_tbl_in (1).ID := p_covered_line_id;
2070          l_clev_tbl_in (1).end_date := p_new_end_date;
2071          okc_contract_pub.update_contract_line
2072                                       (p_api_version            => l_api_version,
2073                                        p_init_msg_list          => l_init_msg_list,
2074                                        p_restricted_update      => okc_api.g_true,
2075                                        x_return_status          => l_return_status,
2076                                        x_msg_count              => x_msg_count,
2077                                        x_msg_data               => x_msg_data,
2078                                        p_clev_tbl               => l_clev_tbl_in,
2079                                        x_clev_tbl               => l_clev_tbl_out
2080                                       );
2081 
2082          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2083          THEN
2084             fnd_log.STRING
2085                  (fnd_log.level_event,
2086                      g_module_current
2087                   || '.update_contract_line.external_call.after',
2088                      'okc_contract_pub.update_contract_line(Return status = '
2089                   || l_return_status
2090                   || ')'
2091                  );
2092          END IF;
2093 
2094          IF l_return_status <> 'S'
2095          THEN
2096             okc_api.set_message (g_app_name,
2097                                  g_required_value,
2098                                  g_col_name_token,
2099                                  'Contract Line Update(UPDATE SUB LINE)'
2100                                 );
2101             RAISE g_exception_halt_validation;
2102          END IF;
2103       END IF;
2104 
2105       IF p_new_negotiated_amt IS NOT NULL
2106       THEN
2107          x_return_status := okc_api.g_ret_sts_success;
2108          l_clev_tbl_in (1).ID := p_covered_line_id;
2109          l_clev_tbl_in (1).price_negotiated := p_new_negotiated_amt;
2110          l_clev_tbl_in (1).price_unit := p_list_price;
2111          okc_contract_pub.update_contract_line
2112                                       (p_api_version            => l_api_version,
2113                                        p_init_msg_list          => l_init_msg_list,
2114                                        p_restricted_update      => okc_api.g_true,
2115                                        x_return_status          => l_return_status,
2116                                        x_msg_count              => x_msg_count,
2117                                        x_msg_data               => x_msg_data,
2118                                        p_clev_tbl               => l_clev_tbl_in,
2119                                        x_clev_tbl               => l_clev_tbl_out
2120                                       );
2121 
2122          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2123          THEN
2124             fnd_log.STRING
2125                  (fnd_log.level_event,
2126                   g_module_current || '.Update_Cov_level.external_call.after',
2127                      'okc_contract_pub.update_contract_line(Return status = '
2128                   || l_return_status
2129                   || ')'
2130                  );
2131          END IF;
2132 
2133          IF l_return_status = 'S'
2134          THEN
2135             l_line_id := l_clev_tbl_out (1).ID;
2136          ELSE
2137             RAISE g_exception_halt_validation;
2138          END IF;
2139       END IF;
2140 
2141       IF p_new_cp_qty IS NOT NULL
2142       THEN
2143          l_cimv_tbl_in (1).ID := p_k_item_id;
2144          l_cimv_tbl_in (1).number_of_items := p_new_cp_qty;
2145          okc_contract_item_pub.update_contract_item
2146                                          (p_api_version        => l_api_version,
2147                                           p_init_msg_list      => l_init_msg_list,
2148                                           x_return_status      => l_return_status,
2149                                           x_msg_count          => x_msg_count,
2150                                           x_msg_data           => x_msg_data,
2151                                           p_cimv_tbl           => l_cimv_tbl_in,
2152                                           x_cimv_tbl           => l_cimv_tbl_out
2153                                          );
2154 
2155          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2156          THEN
2157             fnd_log.STRING
2158                (fnd_log.level_event,
2159                 g_module_current || '.Update_Cov_level.external_call.after',
2160                    'okc_contract_item_pub.update_contract_item(Return status = '
2161                 || l_return_status
2162                 || ')'
2163                );
2164          END IF;
2165 
2166          IF l_return_status = 'S'
2167          THEN
2168             l_line_item_id := l_cimv_tbl_out (1).ID;
2169          ELSE
2170             RAISE g_exception_halt_validation;
2171          END IF;
2172       END IF;
2173    EXCEPTION
2174       WHEN g_exception_halt_validation
2175       THEN
2176          x_return_status := l_return_status;
2177          NULL;
2178       WHEN OTHERS
2179       THEN
2180          x_return_status := okc_api.g_ret_sts_unexp_error;
2181          okc_api.set_message (g_app_name,
2182                               g_unexpected_error,
2183                               g_sqlcode_token,
2184                               SQLCODE,
2185                               g_sqlerrm_token,
2186                               SQLERRM
2187                              );
2188    END;
2189 
2190 /***************************************************************************
2191 
2192             PROCEDURE CREATE_K_HDR
2193            Creates the Contract Header
2194 
2195 ***************************************************************************/
2196    PROCEDURE create_k_hdr (
2197       p_k_header_rec         IN              k_header_rec_type,
2198       p_contact_tbl          IN              contact_tbl,
2199       p_salescredit_tbl_in   IN              salescredit_tbl,
2200       --mmadhavi for bug 4174921
2201       p_caller               IN              VARCHAR2,
2202       x_order_error          OUT NOCOPY      VARCHAR2,
2203       x_chr_id               OUT NOCOPY      NUMBER,
2204       x_return_status        OUT NOCOPY      VARCHAR2,
2205       x_msg_count            OUT NOCOPY      NUMBER,
2206       x_msg_data             OUT NOCOPY      VARCHAR2
2207    )
2208    IS
2209       --Third party id
2210       CURSOR l_thirdparty_csr (p_id NUMBER)
2211       IS
2212          SELECT ca.party_id
2213            FROM okx_customer_accounts_v ca, okx_cust_site_uses_v cs
2214           WHERE ca.id1 = cs.cust_account_id AND cs.id1 = p_id;
2215 
2216       --party id
2217       CURSOR l_cust_csr (p_contactid NUMBER)
2218       IS
2219          SELECT party_id
2220            FROM okx_cust_contacts_v
2221           WHERE id1 = p_contactid AND id2 = '#';
2222 
2223       CURSOR l_ra_hcontacts_cur (p_contact_id NUMBER)
2224       IS
2225          SELECT hzr.object_id                                  --, subject_id
2226                              ,
2227                 hzr.party_id
2228            --NPALEPU
2229                      --18-JUN-2005,09-AUG-2005
2230                      --TCA Project
2231                      --Replaced hz_party_relationships table with hz_relationships table and ra_hcontacts view with OKS_RA_HCONTACTS_V.
2232                      --Replaced hzr.party_relationship_id column with hzr.relationship_id column and added new conditions
2233                     /* FROM ra_hcontacts rah, hz_party_relationships hzr
2234                        WHERE rah.contact_id = p_contact_id
2235                        AND rah.party_relationship_id = hzr.party_relationship_id;*/
2236          FROM   oks_ra_hcontacts_v rah, hz_relationships hzr
2237           WHERE rah.contact_id = p_contact_id
2238             AND rah.party_relationship_id = hzr.relationship_id
2239             AND hzr.subject_table_name = 'HZ_PARTIES'
2240             AND hzr.object_table_name = 'HZ_PARTIES'
2241             AND hzr.directional_flag = 'F';
2242 
2243       --END NPALEPU
2244 
2245       --status code
2246       CURSOR l_sts_csr (p_chr_id NUMBER)
2247       IS
2248          SELECT ste_code
2249            FROM okc_statuses_b, okc_k_headers_v kh
2250           WHERE code = kh.sts_code AND kh.ID = p_chr_id;
2251 
2252       --Check for vendor object_code
2253       CURSOR object_code_csr (p_code VARCHAR2)
2254       IS
2255          SELECT 'x'
2256            FROM okc_contact_sources_v
2257           WHERE cro_code = p_code
2258             AND buy_or_sell = 'S'
2259             AND rle_code = 'VENDOR'
2260             AND jtot_object_code = 'OKX_SALEPERS';
2261 
2262       -- Contact address
2263       CURSOR address_cur_new (p_contact_id NUMBER)
2264       IS
2265          SELECT a.id1
2266            FROM okx_cust_sites_v a, okx_cust_contacts_v b
2267           WHERE b.id1 = p_contact_id
2268             AND a.id1 = b.cust_acct_site_id
2269             AND a.org_id = okc_context.get_okc_org_id;
2270 
2271       -- party contact id
2272       CURSOR party_cont_cur (p_contact_id NUMBER)
2273       IS
2274          SELECT hzr.party_id
2275            --NPALEPU
2276                      --18-JUN-2005,09-AUG-2005
2277                      --TCA Project
2278                      --Replaced hz_party_relationships table with hz_relationships table and ra_hcontacts view with OKS_RA_HCONTACTS_V.
2279                      --Replaced hzr.party_relationship_id column with hzr.relationship_id column and added new conditions
2280                       /* FROM ra_hcontacts rah,
2281                             hz_party_relationships hzr
2282                          WHERE rah.contact_id  = p_contact_id
2283                          AND rah.party_relationship_id = hzr.party_relationship_id;*/
2284          FROM   oks_ra_hcontacts_v rah, hz_relationships hzr
2285           WHERE rah.contact_id = p_contact_id
2286             AND rah.party_relationship_id = hzr.relationship_id
2287             AND hzr.subject_table_name = 'HZ_PARTIES'
2288             AND hzr.object_table_name = 'HZ_PARTIES'
2289             AND hzr.directional_flag = 'F';
2290 
2291       --END NPALEPU
2292 
2293       -- Primary e-mail address
2294       CURSOR email_cur_new (p_party_id NUMBER)
2295       IS
2296          SELECT contact_point_id
2297            FROM okx_contact_points_v
2298           WHERE contact_point_type = 'EMAIL'
2299             AND primary_flag = 'Y'
2300             AND owner_table_id = p_party_id;
2301 
2302       -- Primary telephone number
2303       CURSOR phone_cur_new (p_party_id NUMBER)
2304       IS
2305          SELECT contact_point_id
2306            FROM hz_contact_points
2307           WHERE contact_point_type = 'PHONE'
2308             AND NVL (phone_line_type, 'GEN') = 'GEN'
2309             AND primary_flag = 'Y'
2310             AND owner_table_id = p_party_id;
2311 
2312       -- Any one fax number
2313       CURSOR fax_cur_new (p_party_id NUMBER)
2314       IS
2315          SELECT contact_point_id
2316            FROM hz_contact_points
2317           WHERE contact_point_type = 'PHONE'
2318             AND phone_line_type = 'FAX'
2319             AND owner_table_id = p_party_id;
2320 
2321       CURSOR l_salesgrp_csr (p_id NUMBER, p_start_date DATE, p_end_date DATE)
2322       IS
2323          SELECT GROUP_ID
2324            FROM jtf_rs_srp_groups
2325           WHERE salesrep_id = p_id
2326             AND org_id = okc_context.get_okc_org_id
2327             AND p_start_date BETWEEN start_date AND end_date
2328             AND p_end_date BETWEEN start_date AND end_date;
2329 
2330       CURSOR l_bookdt_csr (p_ord_hdrid NUMBER)
2331       IS
2332          SELECT booked_date, order_firmed_date
2333            FROM oe_order_headers_all
2334           WHERE header_id = p_ord_hdrid;
2335 
2336       --Territory changes
2337       CURSOR resource_details (p_resource_id NUMBER)
2338       IS
2339          SELECT fu.user_id
2340            FROM jtf_rs_defresources_vl jrd, fnd_user fu
2341           WHERE jrd.resource_id = p_resource_id AND fu.user_id = jrd.user_id;
2342 
2343       CURSOR l_salesrep_csr (p_res_id NUMBER, p_org_id NUMBER)
2344       IS
2345          SELECT salesrep_id
2346            FROM jtf_rs_salesreps
2347           WHERE resource_id = p_res_id AND org_id = p_org_id;
2348 
2349       l_salesgroup_id            NUMBER;
2350       l_rah_party_id             NUMBER;
2351       l_rah_hdr_object1_id1      NUMBER;
2352       l_thirdparty_id            NUMBER;
2353       l_thirdparty_role          VARCHAR2 (30);
2354       l_api_version     CONSTANT NUMBER                                 := 1.0;
2355       l_init_msg_list   CONSTANT VARCHAR2 (1)               := okc_api.g_false;
2356       l_return_status            VARCHAR2 (1)                           := 'S';
2357       l_index                    VARCHAR2 (2000);
2358       i                          NUMBER;
2359       --Contract Header
2360       l_chrv_tbl_in              okc_contract_pub.chrv_tbl_type;
2361       l_chrv_tbl_out             okc_contract_pub.chrv_tbl_type;
2362       l_khrv_tbl_in              oks_khr_pvt.khrv_tbl_type;
2363       l_khrv_tbl_out             oks_khr_pvt.khrv_tbl_type;
2364       --SalesCredit
2365       l_scrv_tbl_in              oks_sales_credit_pub.scrv_tbl_type;
2366       l_scrv_tbl_out             oks_sales_credit_pub.scrv_tbl_type;
2367       --Contract Groupings
2368       l_cgcv_tbl_in              okc_contract_group_pub.cgcv_tbl_type;
2369       l_cgcv_tbl_out             okc_contract_group_pub.cgcv_tbl_type;
2370       --Contacts
2371       l_ctcv_tbl_in              okc_contract_party_pub.ctcv_tbl_type;
2372       l_ctcv_tbl_out             okc_contract_party_pub.ctcv_tbl_type;
2373       --Agreements/Governance
2374       l_gvev_tbl_in              okc_contract_pub.gvev_tbl_type;
2375       l_gvev_tbl_out             okc_contract_pub.gvev_tbl_type;
2376       --Time Value Related
2377       l_isev_ext_tbl_in          okc_time_pub.isev_ext_tbl_type;
2378       l_isev_ext_tbl_out         okc_time_pub.isev_ext_tbl_type;
2379       --Approval WorkFlow
2380       l_cpsv_tbl_in              okc_contract_pub.cpsv_tbl_type;
2381       l_cpsv_tbl_out             okc_contract_pub.cpsv_tbl_type;
2382       --REL OBJS
2383       l_crjv_tbl_out             okc_k_rel_objs_pub.crjv_tbl_type;
2384       --Return IDs
2385       l_chrid                    NUMBER;
2386       l_partyid                  NUMBER;
2387       l_partyid_v                NUMBER;
2388       l_partyid_t                NUMBER;
2389       l_add2partyid              NUMBER;
2390       l_rule_group_id            NUMBER;
2391       l_rule_id                  NUMBER;
2392       l_govern_id                NUMBER;
2393       l_time_value_id            NUMBER;
2394       l_contact_id               NUMBER;
2395       l_grpid                    NUMBER;
2396       l_pdfid                    NUMBER;
2397       l_ctrgrp                   NUMBER;
2398       l_cust_partyid             NUMBER;
2399       l_findparty_id             NUMBER;
2400       l_hdr_contactid            NUMBER;
2401       l_sts_code                 VARCHAR2 (30);
2402       l_ste_code                 VARCHAR2 (30);
2403       --l_object_code               VARCHAR2( 200 );
2404       l_temp                     VARCHAR2 (1);
2405       l_email_id                 NUMBER;
2406       l_phone_id                 NUMBER;
2407       l_fax_id                   NUMBER;
2408       l_site_id                  NUMBER;
2409       l_msg_data                 VARCHAR2 (2000);
2410       l_ind                      NUMBER;
2411       l_book_dt                  DATE;
2412       l_ord_firmed_date          DATE;
2413       l_party_contact            NUMBER;
2414       l_salescredit_id           NUMBER;
2415       j                          NUMBER;
2416       -- Territory changes
2417       l_counter                  NUMBER;
2418       l_user_id                  NUMBER;
2419       l_count                    NUMBER;
2420       l_party_name               VARCHAR2 (360);
2421       l_country_code             VARCHAR2 (60);
2422       l_state_code               VARCHAR2 (120);
2423       l_gen_bulk_rec             jtf_terr_assign_pub.bulk_trans_rec_type;
2424       l_gen_return_rec           jtf_terr_assign_pub.bulk_winners_rec_type;
2425       l_use_type                 VARCHAR2 (30);
2426       l_msg_count                NUMBER;
2427       l_derived_res_id           NUMBER;
2428       l_resource_id              NUMBER;
2429       l_salesrep_id              NUMBER;
2430       l_new_org_id               NUMBER;
2431       l_entity_id		 NUMBER;
2432    BEGIN
2433       x_return_status := okc_api.g_ret_sts_success;
2434 
2435       IF fnd_log.level_procedure >= fnd_log.g_current_runtime_level
2436       THEN
2437          fnd_log.STRING (fnd_log.level_procedure,
2438                          g_module_current || '.Create_K_Hdr.begin',
2439                             'Merge Type = '
2440                          || p_k_header_rec.merge_type
2441                          || 'Merge Id'
2442                          || p_k_header_rec.merge_object_id
2443                         );
2444       END IF;
2445 
2446       IF p_k_header_rec.merge_type = 'NEW'
2447       THEN
2448          l_chrid := NULL;
2449       ELSIF p_k_header_rec.merge_type = 'LTC'
2450       THEN
2451          l_chrid := p_k_header_rec.merge_object_id;
2452       ELSIF p_k_header_rec.merge_type IS NOT NULL
2453       THEN
2454          l_chrid :=
2455             get_k_hdr_id (p_type           => p_k_header_rec.merge_type,
2456                           p_object_id      => p_k_header_rec.merge_object_id,
2457                           p_enddate        => p_k_header_rec.end_date
2458                          );
2459       END IF;
2460 
2461       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
2462       THEN
2463          fnd_log.STRING (fnd_log.level_statement,
2464                          g_module_current || '.Create_K_Hdr',
2465                          'Chr id = ' || l_chrid
2466                         );
2467       END IF;
2468 
2469       IF l_chrid IS NOT NULL
2470       THEN
2471          OPEN l_sts_csr (l_chrid);
2472 
2473          FETCH l_sts_csr
2474           INTO l_sts_code;
2475 
2476          CLOSE l_sts_csr;
2477 
2478          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
2479          THEN
2480             fnd_log.STRING (fnd_log.level_statement,
2481                             g_module_current || '.Create_K_Hdr',
2482                             'Status code = ' || l_sts_code
2483                            );
2484          END IF;
2485 
2486          IF l_sts_code NOT IN ('TERMINATED', 'CANCELLED')
2487          THEN                                               -- Removed EXPIRED
2488             IF l_sts_code = 'EXPIRED'
2489             THEN
2490                get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
2491 
2492                UPDATE okc_k_headers_b
2493                   SET sts_code = l_sts_code
2494                 WHERE ID = l_chrid;
2495             END IF;
2496 
2497             x_chr_id := l_chrid;
2498             l_return_status := okc_api.g_ret_sts_success;
2499             RAISE g_exception_halt_validation;
2500          END IF;
2501       END IF;
2502 
2503       get_sts_code (NULL, p_k_header_rec.sts_code, l_ste_code, l_sts_code);
2504 
2505       -------Fix for Bug 2707303
2506       IF NVL (l_ste_code, 'ENTERED') IN ('ACTIVE', 'SIGNED')
2507       THEN
2508          l_book_dt := NULL;
2509 
2510          IF p_k_header_rec.order_hdr_id IS NOT NULL
2511          THEN
2512             OPEN l_bookdt_csr (p_k_header_rec.order_hdr_id);
2513 
2514             FETCH l_bookdt_csr
2515              INTO l_book_dt, l_ord_firmed_date;
2516 
2517             CLOSE l_bookdt_csr;
2518          END IF;
2519 
2520          l_chrv_tbl_in (1).date_signed :=
2521             NVL (NVL (l_ord_firmed_date, l_book_dt),
2522                  p_k_header_rec.start_date);
2523          l_chrv_tbl_in (1).date_approved :=
2524             NVL (NVL (l_ord_firmed_date, l_book_dt),
2525                  p_k_header_rec.start_date);
2526       ELSE
2527          l_chrv_tbl_in (1).date_signed := NULL;
2528          l_chrv_tbl_in (1).date_approved := NULL;
2529       END IF;
2530 
2531       IF p_k_header_rec.cust_po_number IS NOT NULL
2532       THEN
2533          l_chrv_tbl_in (1).cust_po_number_req_yn := 'Y';
2534       ELSE
2535          l_chrv_tbl_in (1).cust_po_number_req_yn := 'N';
2536       END IF;
2537 
2538       -- rules seeded by okc
2539       l_chrv_tbl_in (1).price_list_id := p_k_header_rec.price_list_id;   --PRE
2540       l_chrv_tbl_in (1).payment_term_id := p_k_header_rec.payment_term_id;
2541       --PTR
2542       l_chrv_tbl_in (1).conversion_type := p_k_header_rec.cvn_type;      --CVN
2543       l_chrv_tbl_in (1).conversion_rate := p_k_header_rec.cvn_rate;      --CVN
2544       l_chrv_tbl_in (1).conversion_rate_date := p_k_header_rec.cvn_date; --CVN
2545       l_chrv_tbl_in (1).conversion_euro_rate := p_k_header_rec.cvn_euro_rate;
2546       --CVN
2547       l_chrv_tbl_in (1).billed_at_source := p_k_header_rec.billed_at_source;
2548       --IMP
2549 
2550       l_chrv_tbl_in (1).bill_to_site_use_id := p_k_header_rec.bill_to_id;
2551       --BTO
2552       l_chrv_tbl_in (1).ship_to_site_use_id := p_k_header_rec.ship_to_id;
2553       --STO
2554       l_chrv_tbl_in (1).inv_rule_id := p_k_header_rec.invoice_rule_id;   --IRE
2555 
2556       IF p_k_header_rec.renewal_type IS NOT NULL
2557       THEN                                                               --REN
2558          l_chrv_tbl_in (1).renewal_type_code := p_k_header_rec.renewal_type;
2559          l_chrv_tbl_in (1).APPROVAL_TYPE := p_k_header_rec.RENEWAL_APPROVAL_FLAG;  --Bug# 5173373
2560       END IF;
2561 
2562       l_chrv_tbl_in (1).sfwt_flag := 'N';
2563       l_chrv_tbl_in (1).contract_number := p_k_header_rec.contract_number;
2564       l_chrv_tbl_in (1).sts_code := p_k_header_rec.sts_code;
2565       l_chrv_tbl_in (1).scs_code := NVL (p_k_header_rec.scs_code, 'WARRANTY');
2566       l_chrv_tbl_in (1).authoring_org_id := p_k_header_rec.authoring_org_id;
2567       l_chrv_tbl_in (1).inv_organization_id :=
2568          NVL (p_k_header_rec.inv_organization_id,
2569               okc_context.get_okc_organization_id
2570              );
2571       l_chrv_tbl_in (1).pre_pay_req_yn := 'N';
2572       l_chrv_tbl_in (1).cust_po_number := p_k_header_rec.cust_po_number;
2573       l_chrv_tbl_in (1).qcl_id := p_k_header_rec.qcl_id;
2574       l_chrv_tbl_in (1).short_description :=
2575           NVL (p_k_header_rec.short_description, 'Warranty/Extended Warranty');
2576       l_chrv_tbl_in (1).template_yn := 'N';
2577       l_chrv_tbl_in (1).start_date := p_k_header_rec.start_date;
2578       l_chrv_tbl_in (1).end_date := p_k_header_rec.end_date;
2579       l_chrv_tbl_in (1).chr_type := okc_api.g_miss_char;
2580       l_chrv_tbl_in (1).archived_yn := 'N';
2581       l_chrv_tbl_in (1).deleted_yn := 'N';
2582       l_chrv_tbl_in (1).created_by := okc_api.g_miss_num;
2583       l_chrv_tbl_in (1).creation_date := okc_api.g_miss_date;
2584       l_chrv_tbl_in (1).currency_code := p_k_header_rec.currency;
2585       l_chrv_tbl_in (1).buy_or_sell := 'S';
2586       l_chrv_tbl_in (1).issue_or_receive := 'I';
2587       l_chrv_tbl_in (1).attribute1 := p_k_header_rec.attribute1;
2588       l_chrv_tbl_in (1).attribute2 := p_k_header_rec.attribute2;
2589       l_chrv_tbl_in (1).attribute3 := p_k_header_rec.attribute3;
2590       l_chrv_tbl_in (1).attribute4 := p_k_header_rec.attribute4;
2591       l_chrv_tbl_in (1).attribute5 := p_k_header_rec.attribute5;
2592       l_chrv_tbl_in (1).attribute6 := p_k_header_rec.attribute6;
2593       l_chrv_tbl_in (1).attribute7 := p_k_header_rec.attribute7;
2594       l_chrv_tbl_in (1).attribute8 := p_k_header_rec.attribute8;
2595       l_chrv_tbl_in (1).attribute9 := p_k_header_rec.attribute9;
2596       l_chrv_tbl_in (1).attribute10 := p_k_header_rec.attribute10;
2597       l_chrv_tbl_in (1).attribute11 := p_k_header_rec.attribute11;
2598       l_chrv_tbl_in (1).attribute12 := p_k_header_rec.attribute12;
2599       l_chrv_tbl_in (1).attribute13 := p_k_header_rec.attribute13;
2600       l_chrv_tbl_in (1).attribute14 := p_k_header_rec.attribute14;
2601       l_chrv_tbl_in (1).attribute15 := p_k_header_rec.attribute15;
2602 
2603       IF p_k_header_rec.merge_type = 'RENEW'
2604       THEN
2605          l_chrv_tbl_in (1).attribute1 := p_k_header_rec.merge_object_id;
2606       END IF;
2607 
2608       okc_contract_pub.create_contract_header
2609                                           (p_api_version        => l_api_version,
2610                                            p_init_msg_list      => l_init_msg_list,
2611                                            x_return_status      => l_return_status,
2612                                            x_msg_count          => x_msg_count,
2613                                            x_msg_data           => x_msg_data,
2614                                            p_chrv_tbl           => l_chrv_tbl_in,
2615                                            x_chrv_tbl           => l_chrv_tbl_out
2616                                           );
2617 
2618       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2619       THEN
2620          fnd_log.STRING
2621                (fnd_log.level_event,
2622                 g_module_current || '.Create_K_Hdr.external_call.after',
2623                    'okc_contract_pub.create_contract_header(Return Status = '
2624                 || l_return_status
2625                 || ')'
2626                );
2627       END IF;
2628 
2629       IF l_return_status = 'S'
2630       THEN
2631          l_chrid := l_chrv_tbl_out (1).ID;
2632       ELSE
2633          --mmadhavi
2634          IF (p_caller = 'OC')
2635          THEN
2636             x_order_error := '#';
2637 
2638             FOR i IN 1 .. fnd_msg_pub.count_msg
2639             LOOP
2640                fnd_msg_pub.get (p_msg_index          => i,
2641                                 p_encoded            => 'T',
2642                                 p_data               => l_msg_data,
2643                                 p_msg_index_out      => l_ind
2644                                );
2645                x_order_error := x_order_error || l_msg_data || '#';
2646 
2647                IF (g_fnd_log_option = 'Y')
2648                THEN
2649                   fnd_message.set_encoded (l_msg_data);
2650                   l_msg_data := fnd_message.get;
2651                   fnd_file.put_line
2652                              (fnd_file.LOG,
2653                                  '(okc_contract_pub).create_contract_header '
2654                               || l_msg_data
2655                              );
2656                END IF;
2657             END LOOP;
2658 
2659             RAISE g_exception_halt_validation;
2660          ELSE
2661             --mmadhavi
2662             okc_api.set_message (g_app_name,
2663                                  g_required_value,
2664                                  g_col_name_token,
2665                                  'HEADER (HEADER)'
2666                                 );
2667          END IF;
2668 
2669          RAISE g_exception_halt_validation;
2670       END IF;
2671 
2672 
2673       -- Get the transaction extension id for the contract header
2674       IF p_k_header_rec.order_hdr_id IS NOT NULL THEN
2675          get_cc_trxn_extn (
2676             p_order_header_id  => p_k_header_rec.order_hdr_id,
2677             p_order_line_id    => NULL,
2678             p_context_level    => G_CONTEXT_ORDER_HEADER,
2679             p_contract_hdr_id  => l_chrid,
2680             p_contract_line_id => NULL,
2681             x_entity_id        => l_entity_id,
2682             x_return_status    => l_return_status );
2683 
2684          IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2685             -- Populate the oks header record with the trxn_extension_id
2686             l_khrv_tbl_in (1).trxn_extension_id := l_entity_id;
2687             IF l_entity_id IS NOT NULL THEN
2688                l_khrv_tbl_in (1).payment_type := 'CCR';  -- Credit Card
2689             END IF;
2690          ELSE
2691             FOR i IN 1 .. fnd_msg_pub.count_msg
2692             LOOP
2693                fnd_msg_pub.get (p_msg_index          => i,
2694                                 p_encoded            => 'T',
2695                                 p_data               => l_msg_data,
2696                                 p_msg_index_out      => l_ind
2697                                );
2698 
2699                IF (g_fnd_log_option = 'Y') THEN
2700                   fnd_message.set_encoded (l_msg_data);
2701                   l_msg_data := fnd_message.get;
2702                   fnd_file.put_line
2703                              (fnd_file.LOG,
2704                                  'get_cc_trxn for header'
2705                               || l_msg_data
2706                              );
2707                END IF;
2708             END LOOP;
2709             RAISE g_exception_halt_validation;
2710          END IF;
2711       END IF;
2712 
2713 
2714       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
2715       THEN
2716          fnd_log.STRING (fnd_log.level_statement,
2717                          g_module_current || '.Create_K_Hdr.oks_header_rules',
2718                             'Accounting id = '
2719                          || p_k_header_rec.accounting_rule_id
2720                          || ',renewal type = '
2721                          || p_k_header_rec.renewal_type
2722                          || ',billing id = '
2723                          || p_k_header_rec.billing_profile_id
2724                          || ',renewal po = '
2725                          || p_k_header_rec.renewal_po
2726                          || ',ren price list = '
2727                          || p_k_header_rec.renewal_price_list_id
2728                         );
2729          fnd_log.STRING (fnd_log.level_statement,
2730                          g_module_current || '.Create_K_Hdr.oks_header_rules',
2731                             'ren markup = '
2732                          || p_k_header_rec.renewal_markup
2733                          || ',qto contact = '
2734                          || p_k_header_rec.qto_contact_id
2735                          || ',contact id = '
2736                          || p_k_header_rec.contact_id
2737                          || ',tax status = '
2738                          || p_k_header_rec.tax_status_flag
2739                         );
2740       END IF;
2741 
2742       -- Hdr rules inserted by oks
2743       l_khrv_tbl_in (1).chr_id := l_chrv_tbl_out (1).ID;
2744       l_khrv_tbl_in (1).acct_rule_id := p_k_header_rec.accounting_rule_id;
2745       --ARL
2746       l_khrv_tbl_in (1).billing_profile_id :=
2747                                              p_k_header_rec.billing_profile_id;
2748       -- Fix for bug 3396484
2749       l_khrv_tbl_in (1).renewal_po_required :=p_k_header_rec.renewal_po; /*Bug:7555733*/
2750       --RPO
2751       l_khrv_tbl_in (1).renewal_pricing_type :=
2752                                            p_k_header_rec.renewal_pricing_type;
2753       --RPT
2754       l_khrv_tbl_in (1).price_uom := p_k_header_rec.price_uom;
2755 
2756       --mmadhavi fix for bug 4004028
2757       IF (l_khrv_tbl_in (1).renewal_pricing_type = 'MAN')
2758       THEN
2759          l_khrv_tbl_in (1).renewal_price_list := NULL;
2760       ELSE
2761          l_khrv_tbl_in (1).renewal_price_list :=
2762                                          p_k_header_rec.renewal_price_list_id;
2763       END IF;
2764 
2765       --mmadhavi
2766       IF p_k_header_rec.renewal_pricing_type = 'PCT'
2767       THEN                                                               --RPT
2768          l_khrv_tbl_in (1).renewal_markup_percent :=
2769                                                 p_k_header_rec.renewal_markup;
2770       ELSE
2771          l_khrv_tbl_in (1).renewal_markup_percent := NULL;
2772       END IF;
2773 
2774       IF p_k_header_rec.qto_contact_id IS NOT NULL
2775       THEN                                                               --QTO
2776          l_khrv_tbl_in (1).quote_to_contact_id :=
2777                                                 p_k_header_rec.qto_contact_id;
2778          l_khrv_tbl_in (1).quote_to_site_id := p_k_header_rec.qto_site_id;
2779          l_khrv_tbl_in (1).quote_to_email_id := p_k_header_rec.qto_email_id;
2780          l_khrv_tbl_in (1).quote_to_phone_id := p_k_header_rec.qto_phone_id;
2781          l_khrv_tbl_in (1).quote_to_fax_id := p_k_header_rec.qto_fax_id;
2782       ELSIF p_k_header_rec.contact_id IS NOT NULL
2783       THEN
2784          OPEN party_cont_cur (p_k_header_rec.contact_id);
2785 
2786          FETCH party_cont_cur
2787           INTO l_party_contact;
2788 
2789          CLOSE party_cont_cur;
2790 
2791          OPEN address_cur_new (p_k_header_rec.contact_id);
2792 
2793          FETCH address_cur_new
2794           INTO l_site_id;
2795 
2796          CLOSE address_cur_new;
2797 
2798          OPEN email_cur_new (l_party_contact);
2799 
2800          FETCH email_cur_new
2801           INTO l_email_id;
2802 
2803          CLOSE email_cur_new;
2804 
2805          OPEN phone_cur_new (l_party_contact);
2806 
2807          FETCH phone_cur_new
2808           INTO l_phone_id;
2809 
2810          CLOSE phone_cur_new;
2811 
2812          OPEN fax_cur_new (l_party_contact);
2813 
2814          FETCH fax_cur_new
2815           INTO l_fax_id;
2816 
2817          CLOSE fax_cur_new;
2818 
2819          l_khrv_tbl_in (1).quote_to_contact_id := p_k_header_rec.contact_id;
2820          l_khrv_tbl_in (1).quote_to_site_id := l_site_id;
2821          l_khrv_tbl_in (1).quote_to_email_id := l_email_id;
2822          l_khrv_tbl_in (1).quote_to_phone_id := l_phone_id;
2823          l_khrv_tbl_in (1).quote_to_fax_id := l_fax_id;
2824       END IF;
2825 
2826       l_khrv_tbl_in (1).ar_interface_yn :=
2827                                       p_k_header_rec.ar_interface_yn;
2828       l_khrv_tbl_in (1).hold_billing := NVL (p_k_header_rec.hold_billing, 'N');
2829       l_khrv_tbl_in (1).summary_trx_yn :=
2830                                       NVL (p_k_header_rec.summary_trx_yn, 'N');
2831       l_khrv_tbl_in (1).inv_trx_type := p_k_header_rec.inv_trx_type;
2832       l_khrv_tbl_in (1).tax_status := p_k_header_rec.tax_status_flag;    --TAX
2833       l_khrv_tbl_in (1).tax_code := NULL;                                --TAX
2834       l_khrv_tbl_in (1).tax_exemption_id := p_k_header_rec.tax_exemption_id;
2835       --TAX
2836       l_khrv_tbl_in (1).created_by := okc_api.g_miss_num;
2837       l_khrv_tbl_in (1).creation_date := okc_api.g_miss_date;
2838 
2839       IF p_k_header_rec.ccr_number IS NOT NULL
2840       THEN
2841          l_khrv_tbl_in (1).payment_type := 'CCR';
2842          l_khrv_tbl_in (1).cc_no := p_k_header_rec.ccr_number;
2843          l_khrv_tbl_in (1).cc_expiry_date := p_k_header_rec.ccr_exp_date;
2844       END IF;
2845 
2846       l_khrv_tbl_in (1).period_start := p_k_header_rec.period_start;
2847       l_khrv_tbl_in (1).period_type := p_k_header_rec.period_type;
2848       l_khrv_tbl_in (1).grace_period := p_k_header_rec.grace_period;
2849       l_khrv_tbl_in (1).grace_duration := p_k_header_rec.grace_duration;
2850       l_khrv_tbl_in (1).renewal_status := p_k_header_rec.renewal_status;
2851                                    -- Added by JVARGHES for 12.0 enhancements.
2852       -- Added for 120 CC EXTN project
2853    --   l_khrv_tbl_in (1).trxn_extension_id := p_k_header_rec.trxn_extension_id;
2854 
2855       --
2856 
2857       --Added in R12 by rsu
2858       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
2859       THEN
2860          fnd_log.STRING (fnd_log.level_statement,
2861                          g_module_current || '.Create_K_Hdr',
2862                          'Before calling oks_contract_hdr_pub.create_header'
2863                         );
2864          fnd_log.STRING (fnd_log.level_statement,
2865                          g_module_current || '.Create_K_Hdr',
2866                             'p_k_header_rec.tax_classification_code: '
2867                          || p_k_header_rec.tax_classification_code
2868                         );
2869          fnd_log.STRING (fnd_log.level_statement,
2870                          g_module_current || '.Create_K_Hdr',
2871                             'p_k_header_rec.exemption_certificate_number: '
2872                          || p_k_header_rec.exemption_certificate_number
2873                         );
2874          fnd_log.STRING (fnd_log.level_statement,
2875                          g_module_current || '.Create_K_Hdr',
2876                             'p_k_header_rec.exemption_reason_code: '
2877                          || p_k_header_rec.exemption_reason_code
2878                         );
2879          fnd_log.STRING (fnd_log.level_statement,
2880                          g_module_current || '.Create_K_Hdr',
2881                             'p_k_header_rec.tax_status_flag: '
2882                          || p_k_header_rec.tax_status_flag
2883                         );
2884       END IF;
2885 
2886       l_khrv_tbl_in (1).tax_classification_code :=
2887                                         p_k_header_rec.tax_classification_code;
2888       l_khrv_tbl_in (1).exempt_certificate_number :=
2889                                    p_k_header_rec.exemption_certificate_number;
2890       l_khrv_tbl_in (1).exempt_reason_code :=
2891                                           p_k_header_rec.exemption_reason_code;
2892       --End: added in R12 by rsu
2893       oks_contract_hdr_pub.create_header (p_api_version        => l_api_version,
2894                                           p_init_msg_list      => l_init_msg_list,
2895                                           x_return_status      => l_return_status,
2896                                           x_msg_count          => x_msg_count,
2897                                           x_msg_data           => x_msg_data,
2898                                           p_khrv_tbl           => l_khrv_tbl_in,
2899                                           x_khrv_tbl           => l_khrv_tbl_out,
2900                                           p_validate_yn        => 'N'
2901                                          );
2902 
2903       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2904       THEN
2905          fnd_log.STRING
2906                    (fnd_log.level_event,
2907                     g_module_current || '.Create_K_Hdr.external_call.after',
2908                        ' oks_contract_hdr_pub.create_header(Return Status = '
2909                     || l_return_status
2910                     || ')'
2911                    );
2912       END IF;
2913 
2914       IF NOT l_return_status = okc_api.g_ret_sts_success
2915       THEN
2916          --mmadhavi
2917          IF (p_caller = 'OC')
2918          THEN
2919             x_order_error := '#';
2920 
2921             FOR i IN 1 .. fnd_msg_pub.count_msg
2922             LOOP
2923                fnd_msg_pub.get (p_msg_index          => i,
2924                                 p_encoded            => 'T',
2925                                 p_data               => l_msg_data,
2926                                 p_msg_index_out      => l_ind
2927                                );
2928                x_order_error := x_order_error || l_msg_data || '#';
2929 
2930                IF (g_fnd_log_option = 'Y')
2931                THEN
2932                   fnd_message.set_encoded (l_msg_data);
2933                   l_msg_data := fnd_message.get;
2934                   fnd_file.put_line
2935                                   (fnd_file.LOG,
2936                                       '(oks_contract_hdr_pub).create_header '
2937                                    || l_msg_data
2938                                   );
2939                END IF;
2940             END LOOP;
2941 
2942             RAISE g_exception_halt_validation;
2943          ELSE
2944             --mmadhavi
2945             okc_api.set_message (g_app_name,
2946                                  g_required_value,
2947                                  g_col_name_token,
2948                                  'OKS (HEADER)'
2949                                 );
2950             RAISE g_exception_halt_validation;
2951          END IF;
2952       END IF;
2953 
2954       IF p_k_header_rec.order_line_id IS NOT NULL
2955       THEN
2956          oks_extwar_util_pvt.update_contract_details
2957                                                (l_chrid,
2958                                                 p_k_header_rec.order_line_id,
2959                                                 l_return_status
2960                                                );
2961 
2962          IF NOT l_return_status = okc_api.g_ret_sts_success
2963          THEN
2964             x_return_status := l_return_status;
2965             RAISE g_exception_halt_validation;
2966          END IF;
2967       END IF;
2968 
2969       IF p_k_header_rec.scs_code IN ('WARRANTY', 'SERVICE')
2970       THEN
2971          --Party Role Routine ('VENDOR')
2972          party_role (p_chrid              => l_chrid,
2973                      p_cleid              => NULL,
2974                      p_rle_code           => 'VENDOR',
2975                      p_partyid            => p_k_header_rec.authoring_org_id,
2976                      p_object_code        => g_jtf_party_vendor,
2977                      x_roleid             => l_partyid_v,
2978                      x_msg_count          => x_msg_count,
2979                      x_msg_data           => x_msg_data,
2980                      x_return_status      => l_return_status
2981                     );
2982 
2983          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2984          THEN
2985             fnd_log.STRING (fnd_log.level_event,
2986                                g_module_current
2987                             || '.Create_K_Hdr.Internal_call.after',
2988                                ' Party_role for Vendor(Return Status = '
2989                             || l_return_status
2990                             || ')'
2991                             || l_partyid_v
2992                            );
2993          END IF;
2994 
2995          IF NOT l_return_status = okc_api.g_ret_sts_success
2996          THEN
2997             x_return_status := l_return_status;
2998             RAISE g_exception_halt_validation;
2999          END IF;
3000 
3001          --Party Role Routine ('CUSTOMER')
3002          party_role (p_chrid              => l_chrid,
3003                      p_cleid              => NULL,
3004                      p_rle_code           => 'CUSTOMER',
3005                      p_partyid            => p_k_header_rec.party_id,
3006                      p_object_code        => g_jtf_party,
3007                      x_roleid             => l_partyid,
3008                      x_msg_count          => x_msg_count,
3009                      x_msg_data           => x_msg_data,
3010                      x_return_status      => l_return_status
3011                     );
3012 
3013          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3014          THEN
3015             fnd_log.STRING (fnd_log.level_event,
3016                                g_module_current
3017                             || '.Create_K_Hdr.Internal_call.after',
3018                                ' Party_role for Customer(Return Status = '
3019                             || l_return_status
3020                             || ')'
3021                             || l_partyid
3022                            );
3023          END IF;
3024 
3025          IF NOT l_return_status = okc_api.g_ret_sts_success
3026          THEN
3027             x_return_status := l_return_status;
3028             RAISE g_exception_halt_validation;
3029          END IF;
3030       ELSE
3031          --Party Role Routine ('MERCHANT')
3032          party_role (p_chrid              => l_chrid,
3033                      p_cleid              => NULL,
3034                      p_rle_code           => 'MERCHANT',
3035                      p_partyid            => p_k_header_rec.authoring_org_id,
3036                      p_object_code        => g_jtf_party_vendor,
3037                      x_roleid             => l_partyid_v,
3038                      x_msg_count          => x_msg_count,
3039                      x_msg_data           => x_msg_data,
3040                      x_return_status      => l_return_status
3041                     );
3042 
3043          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3044          THEN
3045             fnd_log.STRING (fnd_log.level_event,
3046                                g_module_current
3047                             || '.Create_K_Hdr.Internal_call.after',
3048                                ' Party_role for Merchant(Return Status = '
3049                             || l_return_status
3050                             || ')'
3051                             || l_partyid_v
3052                            );
3053          END IF;
3054 
3055          IF NOT l_return_status = okc_api.g_ret_sts_success
3056          THEN
3057             x_return_status := l_return_status;
3058             RAISE g_exception_halt_validation;
3059          END IF;
3060 
3061          --Party Role Routine ('SUBSCRIBER')
3062          party_role (p_chrid              => l_chrid,
3063                      p_cleid              => NULL,
3064                      p_rle_code           => 'SUBSCRIBER',
3065                      p_partyid            => p_k_header_rec.party_id,
3066                      p_object_code        => g_jtf_party,
3067                      x_roleid             => l_partyid,
3068                      x_msg_count          => x_msg_count,
3069                      x_msg_data           => x_msg_data,
3070                      x_return_status      => l_return_status
3071                     );
3072 
3073          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3074          THEN
3075             fnd_log.STRING (fnd_log.level_event,
3076                                g_module_current
3077                             || '.Create_K_Hdr.Internal_call.after',
3078                                ' Party_role for Subscriber(Return Status = '
3079                             || l_return_status
3080                             || ')'
3081                             || l_partyid
3082                            );
3083          END IF;
3084 
3085          IF NOT l_return_status = okc_api.g_ret_sts_success
3086          THEN
3087             x_return_status := l_return_status;
3088             RAISE g_exception_halt_validation;
3089          END IF;
3090       END IF;
3091 
3092       /* Check if the bill to belong to the order customer, if not create a third party role*/
3093       l_thirdparty_id := NULL;
3094 
3095       OPEN l_thirdparty_csr (p_k_header_rec.bill_to_id);
3096 
3097       FETCH l_thirdparty_csr
3098        INTO l_thirdparty_id;
3099 
3100       CLOSE l_thirdparty_csr;
3101 
3102       IF l_thirdparty_id IS NOT NULL
3103       THEN
3104          IF NOT l_thirdparty_id = p_k_header_rec.party_id
3105          THEN
3106             --Party Role Routine ('THIRD_PARTY')
3107             l_thirdparty_role :=
3108                          NVL (p_k_header_rec.third_party_role, 'THIRD_PARTY');
3109 
3110             --mmadhavi
3111             IF (p_caller = 'OC')
3112             THEN
3113                IF (l_thirdparty_role IN ('VENDOR', 'CUSTOMER'))
3114                THEN
3115                   fnd_message.set_name (g_app_name,
3116                                         'OKS_INVD_THIRD_PARTY_ROLE'
3117                                        );
3118                   x_order_error := '#' || fnd_message.get_encoded || '#';
3119                   l_return_status := okc_api.g_ret_sts_error;
3120                   RAISE g_exception_halt_validation;
3121                END IF;
3122             END IF;
3123 
3124             --mmadhavi
3125             party_role (p_chrid              => l_chrid,
3126                         p_cleid              => NULL,
3127                         p_rle_code           => l_thirdparty_role,
3128                         p_partyid            => l_thirdparty_id,
3129                         p_object_code        => g_jtf_party,
3130                         x_roleid             => l_partyid_t,
3131                         x_msg_count          => x_msg_count,
3132                         x_msg_data           => x_msg_data,
3133                         x_return_status      => l_return_status
3134                        );
3135 
3136             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3137             THEN
3138                fnd_log.STRING
3139                            (fnd_log.level_event,
3140                                g_module_current
3141                             || '.Create_K_Hdr.Internal_call.after',
3142                                ' Party_role for Third Party(Return Status = '
3143                             || l_return_status
3144                             || ')'
3145                             || l_partyid_t
3146                            );
3147             END IF;
3148 
3149             IF NOT l_return_status = okc_api.g_ret_sts_success
3150             THEN
3151                x_return_status := l_return_status;
3152                RAISE g_exception_halt_validation;
3153             END IF;
3154          END IF;
3155       END IF;
3156 
3157       ---Creating Vendor Contact
3158 
3159       -- Fix for the Bug3557612
3160       -- Create vendor contact role if the profile option is not null
3161       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
3162       THEN
3163          fnd_log.STRING (fnd_log.level_statement,
3164                             g_module_current
3165                          || '.Create_K_Hdr.before_vendor_contact',
3166                             ' Vendor contact profile option value = '
3167                          || fnd_profile.VALUE ('OKS_VENDOR_CONTACT_ROLE')
3168                          || ' Territory profile option value = '
3169                          || fnd_profile.VALUE ('OKS_TERR_SALES_REP')
3170                         );
3171       END IF;
3172 
3173       /************ Territory changes ****************************/
3174       IF    ( NVL (fnd_profile.VALUE ('OKS_TERR_SALES_REP'), 'RET') = 'DER'
3175          AND p_k_header_rec.order_hdr_id IS NOT NULL) or (p_caller = 'ST')
3176       THEN
3177          get_jtf_resource (p_authorg_id         => p_k_header_rec.authoring_org_id,
3178                            p_party_id           => p_k_header_rec.party_id,
3179                            x_winners_rec        => l_gen_return_rec,
3180                            x_msg_count          => l_msg_count,
3181                            x_msg_data           => l_msg_data,
3182                            x_return_status      => l_return_status
3183                           );
3184 
3185          IF (l_return_status <> okc_api.g_ret_sts_success)
3186          THEN
3187             -- Setup error
3188             If p_caller = 'ST' Then
3189                   send_notification (null, l_chrid, 'SER');
3190             Else
3191 
3192                   send_notification (p_k_header_rec.order_hdr_id, NULL, 'SER');
3193             End If;
3194 
3195          ELSE
3196             l_counter := l_gen_return_rec.trans_object_id.FIRST;
3197             l_count := 0;
3198 
3199             WHILE (l_counter <= l_gen_return_rec.trans_object_id.LAST)
3200             LOOP
3201                IF (l_count = 0)
3202                THEN
3203                   OPEN resource_details
3204                          (p_resource_id      => l_gen_return_rec.resource_id
3205                                                                     (l_counter)
3206                          );
3207 
3208                   FETCH resource_details
3209                    INTO l_user_id;
3210 
3211                   CLOSE resource_details;
3212 
3213                   l_derived_res_id := l_gen_return_rec.resource_id (l_counter);
3214                END IF;
3215 
3216                l_counter := l_counter + 1;
3217                l_count := l_count + 1;
3218             END LOOP;
3219 
3220             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
3221             THEN
3222                fnd_log.STRING (fnd_log.level_statement,
3223                                g_module_current,
3224                                'Resource ID is : ' || l_derived_res_id
3225                               );
3226             END IF;
3227 
3228             IF l_count = 0
3229             THEN
3230                -- No resource setup
3231                If p_caller = 'ST' Then
3232                    send_notification (Null, l_chrid, 'NRS');
3233                Else
3234                   send_notification (p_k_header_rec.order_hdr_id, NULL, 'NRS');
3235                End If;
3236             ELSIF l_count >= 1
3237             THEN
3238                l_new_org_id := okc_context.get_okc_org_id;
3239 
3240                OPEN l_salesrep_csr (l_derived_res_id, l_new_org_id);
3241 
3242                FETCH l_salesrep_csr
3243                 INTO l_salesrep_id;
3244 
3245                CLOSE l_salesrep_csr;
3246 
3247                IF l_salesrep_id IS NULL
3248                THEN
3249                    If p_caller = 'ST' Then
3250 
3251                            send_notification (NULL, l_chrid,'ISP');
3252                    Else
3253                            send_notification (p_k_header_rec.order_hdr_id, NULL,'ISP');
3254                     End If;
3255                END IF;
3256             END IF;
3257          END IF;
3258       ELSE
3259          l_salesrep_id := p_k_header_rec.salesrep_id;
3260       END IF;
3261 
3262       /************ Territory changes end****************************/
3263       IF     l_salesrep_id IS NOT NULL
3264          AND fnd_profile.VALUE ('OKS_VENDOR_CONTACT_ROLE') IS NOT NULL
3265       THEN
3266          l_salesgroup_id :=
3267             jtf_rs_integration_pub.get_default_sales_group
3268                                      (p_salesrep_id      => l_salesrep_id,
3269                                       p_org_id           => okc_context.get_okc_org_id,
3270                                       p_date             => p_k_header_rec.start_date
3271                                      );
3272          l_ctcv_tbl_in (1).object1_id1 := l_salesrep_id;
3273          l_ctcv_tbl_in (1).cpl_id := l_partyid_v;
3274          l_ctcv_tbl_in (1).dnz_chr_id := l_chrid;
3275          l_ctcv_tbl_in (1).cro_code :=
3276                                  fnd_profile.VALUE ('OKS_VENDOR_CONTACT_ROLE');
3277          l_ctcv_tbl_in (1).object1_id2 := '#';
3278          l_ctcv_tbl_in (1).sales_group_id := l_salesgroup_id;
3279 
3280          OPEN object_code_csr (l_ctcv_tbl_in (1).cro_code);
3281 
3282          FETCH object_code_csr
3283           INTO l_temp;
3284 
3285          IF object_code_csr%NOTFOUND
3286          THEN
3287             CLOSE object_code_csr;
3288 
3289             okc_api.set_message (g_app_name,
3290                                  g_unexpected_error,
3291                                  g_sqlcode_token,
3292                                  SQLCODE,
3293                                  g_sqlerrm_token,
3294                                  'Wrong vendor contact role assigned'
3295                                 );
3296             l_return_status := okc_api.g_ret_sts_error;
3297             RAISE g_exception_halt_validation;
3298          END IF;
3299 
3300          CLOSE object_code_csr;
3301 
3302          l_ctcv_tbl_in (1).jtot_object1_code := 'OKX_SALEPERS';
3303          --l_object_code;
3304          okc_contract_party_pub.create_contact
3305                                           (p_api_version        => l_api_version,
3306                                            p_init_msg_list      => l_init_msg_list,
3307                                            x_return_status      => l_return_status,
3308                                            x_msg_count          => x_msg_count,
3309                                            x_msg_data           => x_msg_data,
3310                                            p_ctcv_tbl           => l_ctcv_tbl_in,
3311                                            x_ctcv_tbl           => l_ctcv_tbl_out
3312                                           );
3313 
3314          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3315          THEN
3316             fnd_log.STRING
3317                 (fnd_log.level_event,
3318                  g_module_current || '.Create_K_Hdr.External_call.after',
3319                     ' okc_contract_party_pub.create_contact(Return Status = '
3320                  || l_return_status
3321                  || ')'
3322                 );
3323          END IF;
3324 
3325          IF l_return_status = 'S'
3326          THEN
3327             l_contact_id := l_ctcv_tbl_out (1).ID;
3328          ELSE
3329             okc_api.set_message (g_app_name,
3330                                  g_required_value,
3331                                  g_col_name_token,
3332                                     l_ctcv_tbl_in (1).cro_code
3333                                  || 'Vendor  Contact (HEADER) '
3334                                  || ' OKX_SALEPERS'
3335                                 );
3336             RAISE g_exception_halt_validation;
3337          END IF;
3338       END IF;
3339 
3340       --mmadhavi --Create SalesCredits bug 4174921
3341       IF p_salescredit_tbl_in.COUNT > 0
3342       THEN
3343          j := p_salescredit_tbl_in.FIRST;
3344 
3345          LOOP
3346             l_scrv_tbl_in (1).PERCENT := p_salescredit_tbl_in (j).PERCENT;
3347             l_scrv_tbl_in (1).chr_id := l_chrid;
3348             l_scrv_tbl_in (1).cle_id := NULL;
3349             l_scrv_tbl_in (1).ctc_id := p_salescredit_tbl_in (j).ctc_id;
3350             l_scrv_tbl_in (1).sales_credit_type_id1 :=
3351                                 p_salescredit_tbl_in (j).sales_credit_type_id;
3352             l_scrv_tbl_in (1).sales_credit_type_id2 := '#';
3353             l_scrv_tbl_in (1).sales_group_id :=
3354                                       p_salescredit_tbl_in (j).sales_group_id;
3355             oks_sales_credit_pub.insert_sales_credit
3356                                          (p_api_version        => 1.0,
3357                                           p_init_msg_list      => okc_api.g_false,
3358                                           x_return_status      => l_return_status,
3359                                           x_msg_count          => x_msg_count,
3360                                           x_msg_data           => x_msg_data,
3361                                           p_scrv_tbl           => l_scrv_tbl_in,
3362                                           x_scrv_tbl           => l_scrv_tbl_out
3363                                          );
3364 
3365             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3366             THEN
3367                fnd_log.STRING
3368                   (fnd_log.level_event,
3369                    g_module_current || '.Create_K_Hdr.external_call.after',
3370                       'oks_sales_credit_pub.insert_sales_credit(Return status = '
3371                    || l_return_status
3372                    || ')'
3373                   );
3374             END IF;
3375 
3376             IF l_return_status = 'S'
3377             THEN
3378                l_salescredit_id := l_scrv_tbl_out (1).ID;
3379             ELSE
3380                okc_api.set_message (g_app_name,
3381                                     g_required_value,
3382                                     g_col_name_token,
3383                                     'Sales Credit Failure'
3384                                    );
3385                RAISE g_exception_halt_validation;
3386             END IF;
3387 
3388             EXIT WHEN j = p_salescredit_tbl_in.LAST;
3389             j := p_salescredit_tbl_in.NEXT (j);
3390          END LOOP;
3391       END IF;
3392 
3393       --mmadhavi bug 4174921
3394       IF p_contact_tbl.COUNT > 0
3395       THEN
3396          i := p_contact_tbl.FIRST;
3397 
3398          LOOP
3399             l_ctcv_tbl_in.DELETE;
3400 
3401             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
3402             THEN
3403                fnd_log.STRING (fnd_log.level_statement,
3404                                   g_module_current
3405                                || '.Create_K_Hdr.contact creation',
3406                                   ' Party Role = '
3407                                || p_contact_tbl (i).party_role
3408                                || ',Contact Id = '
3409                                || p_contact_tbl (i).contact_id
3410                               );
3411             END IF;
3412 
3413             IF     p_contact_tbl (i).party_role = 'VENDOR'
3414                AND l_partyid_v IS NOT NULL
3415             THEN
3416                l_add2partyid := l_partyid_v;
3417                l_hdr_contactid := p_contact_tbl (i).contact_id;
3418             ELSE
3419                l_rah_party_id := NULL;
3420                l_hdr_contactid := NULL;
3421 
3422                OPEN l_ra_hcontacts_cur (p_contact_tbl (i).contact_id);
3423 
3424                FETCH l_ra_hcontacts_cur
3425                 INTO l_rah_party_id, l_hdr_contactid;
3426 
3427                CLOSE l_ra_hcontacts_cur;
3428 
3429                --if l_findparty_id = l_thirdparty_id Then
3430                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
3431                THEN
3432                   fnd_log.STRING (fnd_log.level_statement,
3433                                      g_module_current
3434                                   || '.Create_K_Hdr.contact creation',
3435                                      ' Third Party = '
3436                                   || l_thirdparty_id
3437                                   || ',Customer Id = '
3438                                   || p_k_header_rec.party_id
3439                                   || ',Org CTC Id = '
3440                                   || p_contact_tbl (i).contact_id
3441                                   || ',Rah PArty Id = '
3442                                   || l_rah_party_id
3443                                   || ',Rah CTC Id = '
3444                                   || l_hdr_contactid
3445                                  );
3446                END IF;
3447 
3448                IF l_rah_party_id = l_thirdparty_id AND l_partyid_t IS NOT NULL
3449                THEN
3450                   l_add2partyid := l_partyid_t;
3451                ELSE
3452                   l_add2partyid := l_partyid;
3453                END IF;
3454             END IF;
3455 
3456             IF l_add2partyid IS NULL
3457             THEN
3458                okc_api.set_message (g_app_name,
3459                                     g_required_value,
3460                                     g_col_name_token,
3461                                        p_contact_tbl (i).contact_role
3462                                     || ' Contact (HEADER) Missing Role Id '
3463                                     || p_contact_tbl (i).contact_object_code
3464                                    );
3465                RAISE g_exception_halt_validation;
3466             END IF;
3467 
3468             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
3469             THEN
3470                fnd_log.STRING (fnd_log.level_statement,
3471                                   g_module_current
3472                                || '.Create_K_Hdr.contact creation',
3473                                   ' FLAG   = '
3474                                || p_contact_tbl (i).flag
3475                                || ' CONTACT ID = '
3476                                || p_contact_tbl (i).contact_id
3477                                || ' CPL ID = '
3478                                || l_add2partyid
3479                                || ',CRO CD = '
3480                                || p_contact_tbl (i).contact_role
3481                                || ',CTC CD = '
3482                                || l_hdr_contactid
3483                                || ',JTO CD = '
3484                                || p_contact_tbl (i).contact_object_code
3485                               );
3486             END IF;
3487 
3488             IF p_contact_tbl (i).flag = 'H'
3489             THEN
3490                l_ctcv_tbl_in (1).object1_id1 := l_hdr_contactid;
3491             ELSE
3492                l_ctcv_tbl_in (1).object1_id1 := p_contact_tbl (i).contact_id;
3493             END IF;
3494 
3495             l_ctcv_tbl_in (1).cpl_id := l_add2partyid;
3496             l_ctcv_tbl_in (1).dnz_chr_id := l_chrid;
3497             l_ctcv_tbl_in (1).cro_code := p_contact_tbl (i).contact_role;
3498             l_ctcv_tbl_in (1).object1_id2 := '#';
3499             l_ctcv_tbl_in (1).jtot_object1_code :=
3500                                          p_contact_tbl (i).contact_object_code;
3501             okc_contract_party_pub.create_contact
3502                                           (p_api_version        => l_api_version,
3503                                            p_init_msg_list      => l_init_msg_list,
3504                                            x_return_status      => l_return_status,
3505                                            x_msg_count          => x_msg_count,
3506                                            x_msg_data           => x_msg_data,
3507                                            p_ctcv_tbl           => l_ctcv_tbl_in,
3508                                            x_ctcv_tbl           => l_ctcv_tbl_out
3509                                           );
3510 
3511             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3512             THEN
3513                fnd_log.STRING
3514                   (fnd_log.level_event,
3515                    g_module_current || '.Create_K_Hdr.external_call.after',
3516                       'okc_contract_party_pub.create_contact(Return status = '
3517                    || l_return_status
3518                    || ')'
3519                   );
3520             END IF;
3521 
3522             IF l_return_status = 'S'
3523             THEN
3524                l_contact_id := l_ctcv_tbl_out (1).ID;
3525             ELSE
3526                okc_api.set_message (g_app_name,
3527                                     g_required_value,
3528                                     g_col_name_token,
3529                                        p_contact_tbl (i).contact_role
3530                                     || ' Contact (HEADER) '
3531                                     || p_contact_tbl (i).contact_object_code
3532                                    );
3533                RAISE g_exception_halt_validation;
3534             END IF;
3535 
3536             EXIT WHEN i = p_contact_tbl.LAST;
3537             i := p_contact_tbl.NEXT (i);
3538          END LOOP;
3539       END IF;
3540 
3541       --Grouping Routine
3542       l_ctrgrp :=
3543          NVL (p_k_header_rec.chr_group,
3544               NVL (fnd_profile.VALUE ('OKS_WARR_CONTRACT_GROUP'), 2)
3545              );
3546       l_cgcv_tbl_in (1).cgp_parent_id := l_ctrgrp;
3547       l_cgcv_tbl_in (1).included_chr_id := l_chrid;
3548       l_cgcv_tbl_in (1).object_version_number := okc_api.g_miss_num;
3549       l_cgcv_tbl_in (1).created_by := okc_api.g_miss_num;
3550       l_cgcv_tbl_in (1).creation_date := okc_api.g_miss_date;
3551       l_cgcv_tbl_in (1).last_updated_by := okc_api.g_miss_num;
3552       l_cgcv_tbl_in (1).last_update_date := okc_api.g_miss_date;
3553       l_cgcv_tbl_in (1).last_update_login := okc_api.g_miss_num;
3554       l_cgcv_tbl_in (1).included_cgp_id := NULL;
3555       okc_contract_group_pub.create_contract_grpngs
3556                                           (p_api_version        => l_api_version,
3557                                            p_init_msg_list      => l_init_msg_list,
3558                                            x_return_status      => l_return_status,
3559                                            x_msg_count          => x_msg_count,
3560                                            x_msg_data           => x_msg_data,
3561                                            p_cgcv_tbl           => l_cgcv_tbl_in,
3562                                            x_cgcv_tbl           => l_cgcv_tbl_out
3563                                           );
3564 
3565       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3566       THEN
3567          fnd_log.STRING
3568             (fnd_log.level_event,
3569              g_module_current || '.Create_K_Hdr.external_call.after',
3570                 'okc_contract_group_pub.create_contract_grpngs(Return status = '
3571              || l_return_status
3572              || ')'
3573             );
3574       END IF;
3575 
3576       IF l_return_status = 'S'
3577       THEN
3578          l_grpid := l_cgcv_tbl_out (1).ID;
3579       ELSE
3580          okc_api.set_message (g_app_name,
3581                               g_required_value,
3582                               g_col_name_token,
3583                               'Contract Group (HEADER)'
3584                              );
3585          RAISE g_exception_halt_validation;
3586       END IF;
3587 
3588       IF p_k_header_rec.pdf_id IS NOT NULL
3589       THEN
3590          l_cpsv_tbl_in (1).pdf_id := p_k_header_rec.pdf_id;
3591          l_cpsv_tbl_in (1).chr_id := l_chrid;
3592          l_cpsv_tbl_in (1).user_id := fnd_global.user_id;
3593          l_cpsv_tbl_in (1).in_process_yn := okc_api.g_miss_char;
3594          l_cpsv_tbl_in (1).object_version_number := okc_api.g_miss_num;
3595          l_cpsv_tbl_in (1).created_by := okc_api.g_miss_num;
3596          l_cpsv_tbl_in (1).creation_date := okc_api.g_miss_date;
3597          l_cpsv_tbl_in (1).last_updated_by := okc_api.g_miss_num;
3598          l_cpsv_tbl_in (1).last_update_date := okc_api.g_miss_date;
3599          l_cpsv_tbl_in (1).last_update_login := okc_api.g_miss_num;
3600          okc_contract_pub.create_contract_process
3601                                          (p_api_version        => l_api_version,
3602                                           p_init_msg_list      => l_init_msg_list,
3603                                           x_return_status      => l_return_status,
3604                                           x_msg_count          => x_msg_count,
3605                                           x_msg_data           => x_msg_data,
3606                                           p_cpsv_tbl           => l_cpsv_tbl_in,
3607                                           x_cpsv_tbl           => l_cpsv_tbl_out
3608                                          );
3609 
3610          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3611          THEN
3612             fnd_log.STRING
3613                (fnd_log.level_event,
3614                 g_module_current || '.Create_K_Hdr.external_call.after',
3615                    'okc_contract_pub.create_contract_process(Return status = '
3616                 || l_return_status
3617                 || ')'
3618                );
3619          END IF;
3620 
3621          IF l_return_status = 'S'
3622          THEN
3623             l_pdfid := l_cpsv_tbl_out (1).ID;
3624          ELSE
3625             okc_api.set_message (g_app_name,
3626                                  g_required_value,
3627                                  g_col_name_token,
3628                                  'Contract WorkFlow (HEADER)'
3629                                 );
3630             RAISE g_exception_halt_validation;
3631          END IF;
3632       END IF;
3633 
3634       --Agreement ID Routine
3635       IF p_k_header_rec.agreement_id IS NOT NULL
3636       THEN
3637          l_gvev_tbl_in (1).chr_id := l_chrid;
3638          l_gvev_tbl_in (1).isa_agreement_id := p_k_header_rec.agreement_id;
3639          l_gvev_tbl_in (1).copied_only_yn := 'Y';
3640          l_gvev_tbl_in (1).dnz_chr_id := l_chrid;
3641          okc_contract_pub.create_governance
3642                                          (p_api_version        => l_api_version,
3643                                           p_init_msg_list      => l_init_msg_list,
3644                                           x_return_status      => l_return_status,
3645                                           x_msg_count          => x_msg_count,
3646                                           x_msg_data           => x_msg_data,
3647                                           p_gvev_tbl           => l_gvev_tbl_in,
3648                                           x_gvev_tbl           => l_gvev_tbl_out
3649                                          );
3650 
3651          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3652          THEN
3653             fnd_log.STRING
3654                     (fnd_log.level_event,
3655                      g_module_current || '.Create_K_Hdr.external_call.after',
3656                         'okc_contract_pub.create_governance(Return status = '
3657                      || l_return_status
3658                      || ')'
3659                     );
3660          END IF;
3661 
3662          IF l_return_status = 'S'
3663          THEN
3664             l_govern_id := l_gvev_tbl_out (1).ID;
3665          ELSE
3666             okc_api.set_message (g_app_name,
3667                                  g_required_value,
3668                                  g_col_name_token,
3669                                  'Agreement Id (HEADER)'
3670                                 );
3671             RAISE g_exception_halt_validation;
3672          END IF;
3673       END IF;
3674 
3675       create_obj_rel (p_k_id               => l_chrid,
3676                       p_line_id            => NULL,
3677                       p_orderhdrid         => p_k_header_rec.order_hdr_id,
3678                       p_rty_code           => p_k_header_rec.rty_code,
3679                       p_orderlineid        => NULL,
3680                       x_return_status      => l_return_status,
3681                       x_msg_count          => x_msg_count,
3682                       x_msg_data           => x_msg_data,
3683                       x_crjv_tbl_out       => l_crjv_tbl_out
3684                      );
3685 
3686       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3687       THEN
3688          fnd_log.STRING (fnd_log.level_event,
3689                             g_module_current
3690                          || '.Create_K_Hdr.internal_call.after',
3691                             'create_obj_rel(Return status = '
3692                          || l_return_status
3693                          || ')'
3694                         );
3695       END IF;
3696 
3697       IF NOT l_return_status = okc_api.g_ret_sts_success
3698       THEN
3699          okc_api.set_message (g_app_name,
3700                               g_required_value,
3701                               g_col_name_token,
3702                               'Order Header Id (HEADER)'
3703                              );
3704          RAISE g_exception_halt_validation;
3705       END IF;
3706 
3707       x_chr_id := l_chrid;
3708    EXCEPTION
3709       WHEN g_exception_halt_validation
3710       THEN
3711          x_return_status := l_return_status;
3712       WHEN OTHERS
3713       THEN
3714          x_return_status := okc_api.g_ret_sts_unexp_error;
3715          okc_api.set_message (g_app_name,
3716                               g_unexpected_error,
3717                               g_sqlcode_token,
3718                               SQLCODE,
3719                               g_sqlerrm_token,
3720                               SQLERRM
3721                              );
3722    END create_k_hdr;
3723 
3724    FUNCTION get_top_line_number (p_chr_id IN NUMBER)
3725       RETURN NUMBER
3726    IS
3727       max_line_number   NUMBER;
3728 
3729       CURSOR get_line_number
3730       IS
3731          SELECT NVL (MAX (TO_NUMBER (line_number)), 0) + 1
3732            FROM okc_k_lines_b
3733           WHERE dnz_chr_id = p_chr_id AND lse_id IN (1, 12, 14, 19);
3734    BEGIN
3735       OPEN get_line_number;
3736 
3737       FETCH get_line_number
3738        INTO max_line_number;
3739 
3740       CLOSE get_line_number;
3741 
3742       RETURN (max_line_number);
3743    END get_top_line_number;
3744 
3745    FUNCTION get_sub_line_number (p_chr_id IN NUMBER, p_cle_id IN NUMBER)
3746       RETURN NUMBER
3747    IS
3748       max_line_number   NUMBER;
3749 
3750       CURSOR get_line_number
3751       IS
3752          SELECT NVL (MAX (TO_NUMBER (line_number)), 0) + 1
3753            FROM okc_k_lines_b
3754           WHERE dnz_chr_id = p_chr_id
3755             AND cle_id = p_cle_id
3756             AND lse_id IN (35, 7, 8, 9, 10, 11, 13, 18, 25);
3757    BEGIN
3758       OPEN get_line_number;
3759 
3760       FETCH get_line_number
3761        INTO max_line_number;
3762 
3763       CLOSE get_line_number;
3764 
3765       RETURN (max_line_number);
3766    END get_sub_line_number;
3767 
3768    PROCEDURE create_k_service_lines (
3769       p_k_line_rec           IN              k_line_service_rec_type,
3770       p_contact_tbl          IN              contact_tbl,
3771       p_salescredit_tbl_in   IN              salescredit_tbl,
3772       p_caller               IN              VARCHAR2,
3773       x_order_error          OUT NOCOPY      VARCHAR2,
3774       x_service_line_id      OUT NOCOPY      NUMBER,
3775       x_return_status        OUT NOCOPY      VARCHAR2,
3776       x_msg_count            OUT NOCOPY      NUMBER,
3777       x_msg_data             OUT NOCOPY      VARCHAR2
3778    )
3779    IS
3780       l_api_version     CONSTANT NUMBER                               := 1.0;
3781       l_init_msg_list   CONSTANT VARCHAR2 (1)              := okc_api.g_false;
3782       l_return_status            VARCHAR2 (1)                         := 'S';
3783       l_index                    VARCHAR2 (2000);
3784       l_ctcv_tbl_in              okc_contract_party_pub.ctcv_tbl_type;
3785       l_ctcv_tbl_out             okc_contract_party_pub.ctcv_tbl_type;
3786 
3787       CURSOR l_ctr_csr (p_id NUMBER)
3788       IS
3789          SELECT counter_group_id
3790            FROM okx_ctr_associations_v
3791           WHERE source_object_id = p_id;
3792 
3793       CURSOR l_billto_csr (p_billto NUMBER)
3794       IS
3795          SELECT cust_account_id
3796            FROM okx_cust_site_uses_v
3797           WHERE id1 = p_billto AND id2 = '#';
3798 
3799       CURSOR l_ra_hcontacts_cur (p_contact_id NUMBER)
3800       IS
3801          SELECT hzr.object_id, hzr.party_id
3802            --NPALEPU
3803                 --18-JUN-2005,09-AUG-2005
3804                 --TCA Project
3805                 --Replaced hz_party_relationships table with hz_relationships table and ra_hcontacts view with OKS_RA_HCONTACTS_V.
3806                 --Replaced hzr.party_relationship_id column with hzr.relationship_id column and added new conditions
3807                 /* FROM ra_hcontacts rah, hz_party_relationships hzr
3808                 WHERE rah.contact_id = p_contact_id
3809                 AND rah.party_relationship_id = hzr.party_relationship_id; */
3810          FROM   oks_ra_hcontacts_v rah, hz_relationships hzr
3811           WHERE rah.contact_id = p_contact_id
3812             AND rah.party_relationship_id = hzr.relationship_id
3813             AND hzr.subject_table_name = 'HZ_PARTIES'
3814             AND hzr.object_table_name = 'HZ_PARTIES'
3815             AND hzr.directional_flag = 'F';
3816 
3817       --END NPALEPU
3818 
3819       --enhancement to be commented
3820       CURSOR l_ste_csr (l_line_id NUMBER)
3821       IS
3822          SELECT os.ste_code
3823            FROM okc_statuses_b os, okc_k_lines_b ol
3824           WHERE ol.ID = l_line_id AND ol.sts_code = os.code;
3825 
3826       CURSOR l_salesgrp_csr (p_id NUMBER, p_start_date DATE, p_end_date DATE)
3827       IS
3828          SELECT GROUP_ID
3829            FROM jtf_rs_srp_groups
3830           WHERE salesrep_id = p_id
3831             AND org_id = okc_context.get_okc_org_id
3832             AND p_start_date BETWEEN start_date AND end_date
3833             AND p_end_date BETWEEN start_date AND end_date;
3834 
3835       l_sales_group_id           NUMBER;
3836       l_ctr_grpid                VARCHAR2 (40);
3837       l_ste_code                 VARCHAR2 (30);
3838       --Contract Line Table
3839       l_clev_tbl_in              okc_contract_pub.clev_tbl_type;
3840       l_clev_tbl_out             okc_contract_pub.clev_tbl_type;
3841       l_klnv_tbl_in              oks_kln_pvt.klnv_tbl_type;
3842       l_klnv_tbl_out             oks_kln_pvt.klnv_tbl_type;
3843       --Contract Item
3844       l_cimv_tbl_in              okc_contract_item_pub.cimv_tbl_type;
3845       l_cimv_tbl_out             okc_contract_item_pub.cimv_tbl_type;
3846       --Time Value Related
3847       l_isev_ext_tbl_in          okc_time_pub.isev_ext_tbl_type;
3848       l_isev_ext_tbl_out         okc_time_pub.isev_ext_tbl_type;
3849       --SalesCredit
3850       l_scrv_tbl_in              oks_sales_credit_pub.scrv_tbl_type;
3851       l_scrv_tbl_out             oks_sales_credit_pub.scrv_tbl_type;
3852       --Coverage
3853       l_cov_rec                  oks_coverages_pub.ac_rec_type;
3854       --Counters
3855       l_ctr_grp_id_template      NUMBER;
3856       l_ctr_grp_id_instance      NUMBER;
3857       --Return IDs
3858       l_line_id                  NUMBER;
3859       l_rule_group_id            NUMBER;
3860       l_rule_id                  NUMBER;
3861       l_line_item_id             NUMBER;
3862       l_time_value_id            NUMBER;
3863       l_cov_id                   NUMBER;
3864       l_salescredit_id           NUMBER;
3865       --TimeUnits
3866       l_duration                 NUMBER;
3867       l_timeunits                VARCHAR2 (240);
3868       --General
3869       l_hdrsdt                   DATE;
3870       l_hdredt                   DATE;
3871       l_hdrstatus                CHAR;
3872       l_lsl_id                   NUMBER;
3873       l_jtot_object              VARCHAR2 (30)                        := NULL;
3874       i                          NUMBER;
3875       l_can_object               NUMBER;
3876       l_line_party_role_id       NUMBER;
3877       l_lin_party_id             NUMBER;
3878       l_lin_contactid            NUMBER;
3879       l_line_contact_id          NUMBER;
3880       l_role                     VARCHAR2 (40);
3881       l_obj                      VARCHAR2 (40);
3882       l_rle_code                 VARCHAR2 (240);
3883       l_msg_data                 VARCHAR2 (2000);
3884       l_ind                      NUMBER;
3885       l_sts_code                 VARCHAR2 (30);
3886       l_sts_flag                 VARCHAR2 (1);
3887       p_cle_tbl                  p_srvline_tbl;
3888       l_ctr                      NUMBER;
3889       l_inp_rec                  okc_inst_cnd_pub.instcnd_inp_rec;
3890       l_entity_id                NUMBER;
3891    BEGIN
3892       x_return_status := okc_api.g_ret_sts_success;
3893 
3894       IF p_k_line_rec.SOURCE = 'NEW'
3895       THEN
3896          get_k_cle_id (p_chrid             => p_k_line_rec.k_id,
3897                        p_invserviceid      => p_k_line_rec.srv_id,
3898                        p_cle_tbl           => p_cle_tbl
3899                       );
3900 
3901          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
3902          THEN
3903             fnd_log.STRING (fnd_log.level_statement,
3904                             g_module_current || '.Create_K_Service_Lines',
3905                             ' Top Lines Count = ' || p_cle_tbl.COUNT
3906                            );
3907          END IF;
3908 
3909          IF p_cle_tbl.COUNT > 0
3910          THEN
3911             l_ctr := p_cle_tbl.FIRST;
3912 
3913             LOOP
3914                IF check_merge_yn (p_cle_tbl (l_ctr).k_line_id,
3915                                   p_k_line_rec.order_line_id,
3916                                   p_k_line_rec.warranty_flag
3917                                  )
3918                THEN
3919                   l_line_id := p_cle_tbl (l_ctr).k_line_id;
3920                   EXIT;
3921                END IF;
3922 
3923                EXIT WHEN l_ctr = p_cle_tbl.LAST;
3924                l_ctr := p_cle_tbl.NEXT (l_ctr);
3925             END LOOP;
3926          ELSE
3927             l_line_id := NULL;
3928          END IF;
3929 
3930          -- enhancement to be commented
3931          OPEN l_ste_csr (l_line_id);
3932 
3933          FETCH l_ste_csr
3934           INTO l_ste_code;
3935 
3936          CLOSE l_ste_csr;
3937 
3938          IF l_ste_code = 'EXPIRED'
3939          THEN
3940             get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
3941 
3942             UPDATE okc_k_lines_b
3943                SET sts_code = l_sts_code
3944              WHERE ID = l_line_id;
3945          END IF;
3946       ELSE
3947          l_line_id := NULL;
3948       END IF;
3949 
3950       IF l_line_id IS NOT NULL
3951       THEN
3952          x_service_line_id := l_line_id;
3953          l_return_status := okc_api.g_ret_sts_success;
3954          RAISE g_exception_halt_validation;
3955       END IF;
3956 
3957       IF p_k_line_rec.warranty_flag = 'W'
3958       THEN
3959          l_lsl_id := 14;
3960          l_jtot_object := g_jtf_warr;
3961       ELSIF p_k_line_rec.warranty_flag = 'E'
3962       THEN
3963          l_lsl_id := 19;
3964          l_jtot_object := g_jtf_extwarr;
3965       ELSIF p_k_line_rec.warranty_flag IN ('S', 'SU')
3966       THEN
3967          l_lsl_id := 1;
3968          l_jtot_object := g_jtf_extwarr;
3969       END IF;
3970 
3971       check_hdr_effectivity (p_chr_id       => p_k_line_rec.k_id,
3972                              p_srv_sdt      => p_k_line_rec.srv_sdt,
3973                              p_srv_edt      => p_k_line_rec.srv_edt,
3974                              x_hdr_sdt      => l_hdrsdt,
3975                              x_hdr_edt      => l_hdredt,
3976                              x_status       => l_hdrstatus
3977                             );
3978 
3979       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3980       THEN
3981          fnd_log.STRING (fnd_log.level_event,
3982                             g_module_current
3983                          || '.Create_K_Service_Lines.internal_call.after',
3984                             'check_hdr_effectivity(Return status = '
3985                          || l_hdrstatus
3986                         );
3987       END IF;
3988 
3989       IF l_hdrstatus = 'E'
3990       THEN
3991          okc_api.set_message (g_app_name,
3992                               g_unexpected_error,
3993                               g_sqlcode_token,
3994                               SQLCODE,
3995                               g_sqlerrm_token,
3996                               'line dates are not within header effectivity'
3997                              );
3998 
3999          IF fnd_log.level_error >= fnd_log.g_current_runtime_level
4000          THEN
4001             fnd_log.STRING (fnd_log.level_error,
4002                             g_module_current
4003                             || '.Create_K_Service_Lines.ERROR',
4004                             'Line dates are not withen header effectivity'
4005                            );
4006          END IF;
4007 
4008          --mmadhavi
4009          IF (p_caller = 'OC')
4010          THEN
4011             fnd_message.set_name (g_app_name, 'OKS_INVD_CONTRACT_ID');
4012             fnd_message.set_token (token      => 'HDR_ID',
4013                                    VALUE      => p_k_line_rec.k_id
4014                                   );
4015             x_order_error := '#' || fnd_message.get_encoded || '#';
4016          END IF;
4017 
4018          --mmadhavi
4019          l_return_status := okc_api.g_ret_sts_error;
4020          RAISE g_exception_halt_validation;
4021       ELSIF l_hdrstatus = 'Y'
4022       THEN
4023          IF p_k_line_rec.line_sts_code = 'ENTERED'
4024          THEN
4025             l_sts_flag := 'N';
4026          ELSE
4027             l_sts_flag := 'Y';
4028          END IF;
4029 
4030          update_hdr_dates (p_chr_id         => p_k_line_rec.k_id,
4031                            p_new_sdt        => l_hdrsdt,
4032                            p_new_edt        => l_hdredt,
4033                            p_sts_flag       => l_sts_flag,
4034                            x_status         => l_return_status,
4035                            x_msg_count      => x_msg_count,
4036                            x_msg_data       => x_msg_data
4037                           );
4038 
4039          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4040          THEN
4041             fnd_log.STRING (fnd_log.level_event,
4042                                g_module_current
4043                             || '.Create_K_Service_Lines.internal_call.after',
4044                                'update_hdr_dates(Return status = '
4045                             || l_return_status
4046                            );
4047          END IF;
4048 
4049          IF NOT l_return_status = 'S'
4050          THEN
4051             l_return_status := okc_api.g_ret_sts_error;
4052             okc_api.set_message (g_app_name,
4053                                  g_required_value,
4054                                  g_col_name_token,
4055                                  'Header Effectivity Update (LINE)'
4056                                 );
4057             RAISE g_exception_halt_validation;
4058          END IF;
4059       END IF;
4060 
4061       l_clev_tbl_in (1).chr_id := p_k_line_rec.k_id;
4062       l_clev_tbl_in (1).sfwt_flag := 'N';
4063       l_clev_tbl_in (1).lse_id := l_lsl_id;
4064       --l_clev_tbl_in(1).line_number            := p_k_line_rec.k_line_number;
4065       l_clev_tbl_in (1).line_number := get_top_line_number (p_k_line_rec.k_id);
4066       l_clev_tbl_in (1).sts_code := p_k_line_rec.line_sts_code;
4067       l_clev_tbl_in (1).display_sequence := 1;
4068       l_clev_tbl_in (1).dnz_chr_id := p_k_line_rec.k_id;
4069       --l_clev_tbl_in(1).name                   := Substr(p_k_line_rec.srv_segment1,1,50);
4070       l_clev_tbl_in (1).NAME := NULL;
4071       l_clev_tbl_in (1).item_description := p_k_line_rec.srv_desc;
4072       l_clev_tbl_in (1).start_date := p_k_line_rec.srv_sdt;
4073       l_clev_tbl_in (1).end_date := p_k_line_rec.srv_edt;
4074       l_clev_tbl_in (1).exception_yn := 'N';
4075       l_clev_tbl_in (1).currency_code := p_k_line_rec.currency;
4076       l_clev_tbl_in (1).price_level_ind := priced_yn (l_lsl_id);
4077       l_clev_tbl_in (1).trn_code := p_k_line_rec.reason_code;
4078       l_clev_tbl_in (1).upg_orig_system_ref :=
4079                                               p_k_line_rec.upg_orig_system_ref;
4080       -- 04-jun-2002 Vigandhi
4081       l_clev_tbl_in (1).upg_orig_system_ref_id :=
4082                                            p_k_line_rec.upg_orig_system_ref_id;
4083 
4084       -- 04-jun-2002 Vigandhi
4085       l_clev_tbl_in (1).comments := p_k_line_rec.reason_comments;
4086       l_clev_tbl_in (1).attribute1 := p_k_line_rec.attribute1;
4087       l_clev_tbl_in (1).attribute2 := p_k_line_rec.attribute2;
4088       l_clev_tbl_in (1).attribute3 := p_k_line_rec.attribute3;
4089       l_clev_tbl_in (1).attribute4 := p_k_line_rec.attribute4;
4090       l_clev_tbl_in (1).attribute5 := p_k_line_rec.attribute5;
4091       l_clev_tbl_in (1).attribute6 := p_k_line_rec.attribute6;
4092       l_clev_tbl_in (1).attribute7 := p_k_line_rec.attribute7;
4093       l_clev_tbl_in (1).attribute8 := p_k_line_rec.attribute8;
4094       l_clev_tbl_in (1).attribute9 := p_k_line_rec.attribute9;
4095       l_clev_tbl_in (1).attribute10 := p_k_line_rec.attribute10;
4096       l_clev_tbl_in (1).attribute11 := p_k_line_rec.attribute11;
4097       l_clev_tbl_in (1).attribute12 := p_k_line_rec.attribute12;
4098       l_clev_tbl_in (1).attribute13 := p_k_line_rec.attribute13;
4099       l_clev_tbl_in (1).attribute14 := p_k_line_rec.attribute14;
4100       l_clev_tbl_in (1).attribute15 := p_k_line_rec.attribute15;
4101 ------------------------------------------
4102 -- Rules inserted by okc
4103 ------------------------------------------
4104       l_can_object := NULL;
4105       IF p_k_line_rec.warranty_flag <> 'W'
4106       THEN
4107 
4108          OPEN l_billto_csr (p_k_line_rec.bill_to_id);
4109          FETCH l_billto_csr INTO l_can_object;
4110          CLOSE l_billto_csr;
4111 
4112           --ramesh added on jan-26-01 for ib html interface
4113          IF l_can_object IS NULL
4114          THEN
4115              l_can_object := p_k_line_rec.cust_account;
4116          END IF;
4117       END IF;
4118 
4119 
4120       l_clev_tbl_in (1).cust_acct_id := l_can_object;                    --CAN
4121       l_clev_tbl_in (1).inv_rule_id := p_k_line_rec.invoicing_rule_id;   --IRE
4122       l_clev_tbl_in (1).line_renewal_type_code :=
4123                                    NVL (p_k_line_rec.line_renewal_type, 'FUL');
4124       --LRT
4125       l_clev_tbl_in (1).bill_to_site_use_id := p_k_line_rec.bill_to_id;  --BTO
4126       l_clev_tbl_in (1).ship_to_site_use_id := p_k_line_rec.ship_to_id;  --STO
4127       l_clev_tbl_in (1).price_list_id := p_k_line_rec.ln_price_list_id;
4128       -- price list
4129       okc_contract_pub.create_contract_line
4130                                        (p_api_version            => l_api_version,
4131                                         p_init_msg_list          => l_init_msg_list,
4132                                         p_restricted_update      => okc_api.g_true,
4133                                         x_return_status          => l_return_status,
4134                                         x_msg_count              => x_msg_count,
4135                                         x_msg_data               => x_msg_data,
4136                                         p_clev_tbl               => l_clev_tbl_in,
4137                                         x_clev_tbl               => l_clev_tbl_out
4138                                        );
4139 
4140       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4141       THEN
4142          fnd_log.STRING
4143                  (fnd_log.level_event,
4144                      g_module_current
4145                   || '.Create_K_Service_Lines.External_call.after',
4146                      'okc_contract_pub.create_contract_line(Return status = '
4147                   || l_return_status
4148                  );
4149       END IF;
4150 
4151       IF l_return_status = 'S'
4152       THEN
4153          l_line_id := l_clev_tbl_out (1).ID;
4154       ELSE
4155          --mmadhavi
4156          IF (p_caller = 'OC')
4157          THEN
4158             x_order_error := '#';
4159 
4160             FOR i IN 1 .. fnd_msg_pub.count_msg
4161             LOOP
4162                fnd_msg_pub.get (p_msg_index          => i,
4163                                 p_encoded            => 'T',
4164                                 p_data               => l_msg_data,
4165                                 p_msg_index_out      => l_ind
4166                                );
4167                x_order_error := x_order_error || l_msg_data || '#';
4168 
4169                IF (g_fnd_log_option = 'Y')
4170                THEN
4171                   fnd_message.set_encoded (l_msg_data);
4172                   l_msg_data := fnd_message.get;
4173                   fnd_file.put_line
4174                                (fnd_file.LOG,
4175                                    '(okc_contract_pub).create_contract_line '
4176                                 || l_msg_data
4177                                );
4178                END IF;
4179             END LOOP;
4180 
4181             RAISE g_exception_halt_validation;
4182          ELSE
4183             --mmadhavi
4184             okc_api.set_message (g_app_name,
4185                                  g_required_value,
4186                                  g_col_name_token,
4187                                  'Line (LINE)'
4188                                 );
4189             RAISE g_exception_halt_validation;
4190          END IF;
4191       END IF;
4192 
4193       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
4194       THEN
4195          fnd_log.STRING (fnd_log.level_statement,
4196                          g_module_current || '.Create_K_Service_Lines',
4197                          'Line Id= ' || l_line_id
4198                         );
4199       END IF;
4200      -------------------------------------
4201       -- Get and populate the CC Trxn extension id
4202       -- and populate the oks line structure
4203       -------------------------------------
4204 
4205       -- Get the transaction extension id for the contract line
4206       IF p_k_line_rec.order_line_id IS NOT NULL THEN
4207          get_cc_trxn_extn (
4208             p_order_header_id  => NULL,
4209             p_order_line_id    => p_k_line_rec.order_line_id,
4210             p_context_level    => G_CONTEXT_ORDER_LINE,
4211             p_contract_hdr_id  => NULL,
4212             p_contract_line_id => l_line_id,
4213             x_entity_id        => l_entity_id,
4214             x_return_status    => l_return_status );
4215 
4216          IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
4217             -- Populate the oks header record with the trxn_extension_id
4218             l_klnv_tbl_in(1).trxn_extension_id := l_entity_id;
4219             IF l_entity_id IS NOT NULL THEN
4220                l_klnv_tbl_in (1).payment_type := 'CCR';  -- Credit Card
4221             END IF;
4222          ELSE
4223             FOR i IN 1 .. fnd_msg_pub.count_msg
4224             LOOP
4225                fnd_msg_pub.get (p_msg_index          => i,
4226                                 p_encoded            => 'T',
4227                                 p_data               => l_msg_data,
4228                                 p_msg_index_out      => l_ind
4229                                );
4230 
4231                IF (g_fnd_log_option = 'Y') THEN
4232                   fnd_message.set_encoded (l_msg_data);
4233                   l_msg_data := fnd_message.get;
4234                   fnd_file.put_line
4235                              (fnd_file.LOG,
4236                                  'get_cc_trxn for line'
4237                               || l_msg_data
4238                              );
4239                END IF;
4240             END LOOP;
4241             RAISE g_exception_halt_validation;
4242          END IF;
4243       END IF;
4244 
4245 -------------------------------------
4246 -- rules inserted by oks --IRT
4247 -------------------------------------
4248       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
4249       THEN
4250          fnd_log.STRING (fnd_log.level_statement,
4251                          g_module_current || '.Create_K_Service_Lines',
4252                             'Accounting id = '
4253                          || p_k_line_rec.accounting_rule_id
4254                          || ',Commitment id = '
4255                          || p_k_line_rec.commitment_id
4256                         );
4257       END IF;
4258 
4259       l_klnv_tbl_in (1).cle_id := l_line_id;
4260       l_klnv_tbl_in (1).dnz_chr_id := p_k_line_rec.k_id;
4261       --mmadhavi removing trucation of invoice_text
4262       l_klnv_tbl_in (1).invoice_text :=
4263             p_k_line_rec.srv_desc
4264          || ':'
4265          || to_char(p_k_line_rec.srv_sdt,'DD-MON-YYYY')
4266          || ':'
4267          || to_char(p_k_line_rec.srv_edt,'DD-MON-YYYY');
4268       l_klnv_tbl_in (1).created_by := okc_api.g_miss_num;
4269       l_klnv_tbl_in (1).creation_date := okc_api.g_miss_date;
4270       l_klnv_tbl_in (1).acct_rule_id := p_k_line_rec.accounting_rule_id; --ARL
4271 
4272       IF p_k_line_rec.commitment_id IS NOT NULL
4273       THEN
4274          l_klnv_tbl_in (1).payment_type := 'COM';
4275          l_klnv_tbl_in (1).commitment_id := p_k_line_rec.commitment_id;
4276       --PAYMENT METHOD
4277       END IF;
4278 
4279       l_klnv_tbl_in (1).cust_po_number_req_yn := 'N';    -- po number required
4280       l_klnv_tbl_in (1).inv_print_flag := 'Y';
4281                                 -- print flag'Changed to Y to fix bug 4188061'
4282       --Bug Fix 4121175
4283       l_klnv_tbl_in (1).tax_code := p_k_line_rec.tax_code;
4284       --End Bug Fix 4121175
4285       l_klnv_tbl_in (1).coverage_id := p_k_line_rec.coverage_template_id;
4286       l_klnv_tbl_in (1).standard_cov_yn := p_k_line_rec.standard_cov_yn;
4287       l_klnv_tbl_in (1).price_uom := p_k_line_rec.price_uom;
4288 
4289       --Added in R12 by rsu
4290       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
4291       THEN
4292          fnd_log.STRING (fnd_log.level_statement,
4293                          g_module_current || '.Create_K_Service_Lines',
4294                          'Before calling oks_contract_line_pub.create_line'
4295                         );
4296          fnd_log.STRING (fnd_log.level_statement,
4297                          g_module_current || '.Create_K_Service_Lines',
4298                             'p_k_line_rec.tax_classification_code: '
4299                          || p_k_line_rec.tax_classification_code
4300                         );
4301          fnd_log.STRING (fnd_log.level_statement,
4302                          g_module_current || '.Create_K_Service_Lines',
4303                             'p_k_line_rec.exempt_certificate_number: '
4304                          || p_k_line_rec.exemption_certificate_number
4305                         );
4306          fnd_log.STRING (fnd_log.level_statement,
4307                          g_module_current || '.Create_K_Service_Lines',
4308                             'p_k_line_rec.exempt_reason_code: '
4309                          || p_k_line_rec.exemption_reason_code
4310                         );
4311          fnd_log.STRING (fnd_log.level_statement,
4312                          g_module_current || '.Create_K_Service_Lines',
4313                          'p_k_line_rec.tax_status: '
4314                          || p_k_line_rec.tax_status
4315                         );
4316       END IF;
4317 
4318       l_klnv_tbl_in (1).tax_classification_code :=
4319                                           p_k_line_rec.tax_classification_code;
4320       l_klnv_tbl_in (1).exempt_certificate_number :=
4321                                      p_k_line_rec.exemption_certificate_number;
4322       l_klnv_tbl_in (1).exempt_reason_code :=
4323                                             p_k_line_rec.exemption_reason_code;
4324       l_klnv_tbl_in (1).tax_status := p_k_line_rec.tax_status;
4325       --End: Added in R12 by rsu
4326 
4327       -- Added for 120 CC EXTN(LINE) project by vjramali
4328 --      l_klnv_tbl_in (1).trxn_extension_id := p_k_line_rec.trxn_extension_id;
4329       oks_contract_line_pub.create_line (p_api_version        => l_api_version,
4330                                          p_init_msg_list      => l_init_msg_list,
4331                                          x_return_status      => l_return_status,
4332                                          x_msg_count          => x_msg_count,
4333                                          x_msg_data           => x_msg_data,
4334                                          p_klnv_tbl           => l_klnv_tbl_in,
4335                                          x_klnv_tbl           => l_klnv_tbl_out,
4336                                          p_validate_yn        => 'N'
4337                                         );
4338 
4339       IF NOT l_return_status = 'S'
4340       THEN
4341          --mmadhavi
4342          IF (p_caller = 'OC')
4343          THEN
4344             x_order_error := '#';
4345 
4346             FOR i IN 1 .. fnd_msg_pub.count_msg
4347             LOOP
4348                fnd_msg_pub.get (p_msg_index          => i,
4349                                 p_encoded            => 'T',
4350                                 p_data               => l_msg_data,
4351                                 p_msg_index_out      => l_ind
4352                                );
4353                x_order_error := x_order_error || l_msg_data || '#';
4354 
4355                IF (g_fnd_log_option = 'Y')
4356                THEN
4357                   fnd_message.set_encoded (l_msg_data);
4358                   l_msg_data := fnd_message.get;
4359                   fnd_file.put_line
4360                                    (fnd_file.LOG,
4361                                        '(oks_contract_line_pub).create_line '
4362                                     || l_msg_data
4363                                    );
4364                END IF;
4365             END LOOP;
4366 
4367             RAISE g_exception_halt_validation;
4368          ELSE
4369             --mmadhavi
4370             okc_api.set_message (g_app_name,
4371                                  g_required_value,
4372                                  g_col_name_token,
4373                                  'OKS Contract LINE'
4374                                 );
4375             RAISE g_exception_halt_validation;
4376          END IF;
4377       END IF;
4378 
4379       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4380       THEN
4381          fnd_log.STRING
4382                     (fnd_log.level_event,
4383                         g_module_current
4384                      || '.Create_K_Service_Lines.external_call.after',
4385                         'oks_contract_line_pub.create_line (Return status = '
4386                      || l_return_status
4387                      || ')'
4388                     );
4389       END IF;
4390 
4391       okc_time_util_pub.get_duration (p_start_date         => p_k_line_rec.srv_sdt,
4392                                       p_end_date           => p_k_line_rec.srv_edt,
4393                                       x_duration           => l_duration,
4394                                       x_timeunit           => l_timeunits,
4395                                       x_return_status      => l_return_status
4396                                      );
4397 
4398       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4399       THEN
4400          fnd_log.STRING (fnd_log.level_event,
4401                             g_module_current
4402                          || '.Create_K_Service_Lines.external_call.after',
4403                             'okc_time_util_pub.get_duration(Return status = '
4404                          || l_return_status
4405                          || ')'
4406                         );
4407       END IF;
4408 
4409       IF NOT l_return_status = 'S'
4410       THEN
4411          RAISE g_exception_halt_validation;
4412       END IF;
4413 
4414       --Create Contract Item
4415       l_cimv_tbl_in (1).cle_id := l_line_id;
4416       l_cimv_tbl_in (1).dnz_chr_id := p_k_line_rec.k_id;
4417       l_cimv_tbl_in (1).object1_id1 := p_k_line_rec.srv_id;
4418       l_cimv_tbl_in (1).object1_id2 := okc_context.get_okc_organization_id;
4419       l_cimv_tbl_in (1).jtot_object1_code := l_jtot_object;
4420       l_cimv_tbl_in (1).exception_yn := 'N';
4421       l_cimv_tbl_in (1).number_of_items := l_duration;
4422       l_cimv_tbl_in (1).uom_code := l_timeunits;
4423       okc_contract_item_pub.create_contract_item
4424                                           (p_api_version        => l_api_version,
4425                                            p_init_msg_list      => l_init_msg_list,
4426                                            x_return_status      => l_return_status,
4427                                            x_msg_count          => x_msg_count,
4428                                            x_msg_data           => x_msg_data,
4429                                            p_cimv_tbl           => l_cimv_tbl_in,
4430                                            x_cimv_tbl           => l_cimv_tbl_out
4431                                           );
4432 
4433       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4434       THEN
4435          fnd_log.STRING
4436             (fnd_log.level_event,
4437              g_module_current || '.Create_K_Service_Lines.external_call.after',
4438                 'okc_contract_item_pub.create_contract_item(Return status = '
4439              || l_return_status
4440              || ')'
4441             );
4442       END IF;
4443 
4444       IF l_return_status = 'S'
4445       THEN
4446          l_line_item_id := l_cimv_tbl_out (1).ID;
4447       ELSE
4448          okc_api.set_message (g_app_name,
4449                               g_required_value,
4450                               g_col_name_token,
4451                                  'Service Inventory Item ID '
4452                               || p_k_line_rec.srv_id
4453                               || ' ORG '
4454                               +  okc_context.get_okc_organization_id
4455                              );
4456          RAISE g_exception_halt_validation;
4457       END IF;
4458 
4459       --Create SalesCredits
4460       IF p_salescredit_tbl_in.COUNT > 0
4461       THEN
4462          i := p_salescredit_tbl_in.FIRST;
4463 
4464          LOOP
4465             l_scrv_tbl_in (1).PERCENT := p_salescredit_tbl_in (i).PERCENT;
4466             l_scrv_tbl_in (1).chr_id := p_k_line_rec.k_id;
4467             l_scrv_tbl_in (1).cle_id := l_line_id;
4468             l_scrv_tbl_in (1).ctc_id := p_salescredit_tbl_in (i).ctc_id;
4469             l_scrv_tbl_in (1).sales_credit_type_id1 :=
4470                                 p_salescredit_tbl_in (i).sales_credit_type_id;
4471             l_scrv_tbl_in (1).sales_credit_type_id2 := '#';
4472             l_scrv_tbl_in (1).sales_group_id :=
4473                                       p_salescredit_tbl_in (i).sales_group_id;
4474             oks_sales_credit_pub.insert_sales_credit
4475                                          (p_api_version        => 1.0,
4476                                           p_init_msg_list      => okc_api.g_false,
4477                                           x_return_status      => x_return_status,
4478                                           x_msg_count          => x_msg_count,
4479                                           x_msg_data           => x_msg_data,
4480                                           p_scrv_tbl           => l_scrv_tbl_in,
4481                                           x_scrv_tbl           => l_scrv_tbl_out
4482                                          );
4483 
4484             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4485             THEN
4486                fnd_log.STRING
4487                   (fnd_log.level_event,
4488                       g_module_current
4489                    || '.Create_K_Service_Lines.external_call.after',
4490                       'oks_sales_credit_pub.insert_sales_credit(Return status = '
4491                    || l_return_status
4492                    || ')'
4493                   );
4494             END IF;
4495 
4496             IF l_return_status = 'S'
4497             THEN
4498                l_salescredit_id := l_scrv_tbl_out (1).ID;
4499             ELSE
4500                okc_api.set_message (g_app_name,
4501                                     g_required_value,
4502                                     g_col_name_token,
4503                                     'Sales Credit Failure'
4504                                    );
4505                RAISE g_exception_halt_validation;
4506             END IF;
4507 
4508             EXIT WHEN i = p_salescredit_tbl_in.LAST;
4509             i := p_salescredit_tbl_in.NEXT (i);
4510          END LOOP;
4511       END IF;
4512 
4513       --CONTACT CREATION ROUT NOCOPY INE STARTS
4514       IF p_contact_tbl.COUNT > 0
4515       THEN
4516          i := p_contact_tbl.FIRST;
4517 
4518          LOOP
4519             IF p_contact_tbl (i).flag = 'H'
4520             THEN
4521                l_lin_party_id := NULL;
4522                l_lin_contactid := NULL;
4523 
4524                OPEN l_ra_hcontacts_cur (p_contact_tbl (i).contact_id);
4525 
4526                FETCH l_ra_hcontacts_cur
4527                 INTO l_lin_party_id, l_lin_contactid;
4528 
4529                CLOSE l_ra_hcontacts_cur;
4530 
4531                IF i = p_contact_tbl.FIRST
4532                THEN
4533                   IF p_k_line_rec.warranty_flag = 'SU'
4534                   THEN
4535                      l_rle_code := 'SUBSCRIBER';
4536                   ELSE
4537                      l_rle_code := 'CUSTOMER';
4538                   END IF;
4539 
4540                   party_role (p_chrid              => p_k_line_rec.k_id,
4541                               p_cleid              => l_line_id,
4542                               p_rle_code           => l_rle_code,
4543                               p_partyid            => l_lin_party_id,
4544                               p_object_code        => g_jtf_party,
4545                               x_roleid             => l_line_party_role_id,
4546                               x_msg_count          => x_msg_count,
4547                               x_msg_data           => x_msg_data,
4548                               x_return_status      => l_return_status
4549                              );
4550 
4551                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
4552                      )
4553                   THEN
4554                      fnd_log.STRING
4555                                  (fnd_log.level_event,
4556                                      g_module_current
4557                                   || '.Create_K_Service_Lines.contact_creation',
4558                                      'party_role(Return status = '
4559                                   || l_return_status
4560                                   || ')'
4561                                   || 'CPL id = '
4562                                   || l_line_party_role_id
4563                                  );
4564                   END IF;
4565 
4566                   IF NOT l_return_status = okc_api.g_ret_sts_success
4567                   THEN
4568                      x_return_status := l_return_status;
4569                      RAISE g_exception_halt_validation;
4570                   END IF;
4571                END IF;
4572 
4573                IF p_contact_tbl (i).contact_role LIKE '%BILLING%'
4574                THEN
4575                   l_role := 'CUST_BILLING';
4576                   l_obj := 'OKX_CONTBILL';
4577                ELSIF p_contact_tbl (i).contact_role LIKE '%ADMIN%'
4578                THEN
4579                   l_role := 'CUST_ADMIN';
4580                   l_obj := 'OKX_CONTADMN';
4581                ELSIF p_contact_tbl (i).contact_role LIKE '%SHIP%'
4582                THEN
4583                   l_role := 'CUST_SHIPPING';
4584                   l_obj := 'OKX_CONTSHIP';
4585                END IF;
4586 
4587                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
4588                THEN
4589                   fnd_log.STRING (fnd_log.level_statement,
4590                                      g_module_current
4591                                   || '.Create_K_Service_Lines.before_contact',
4592                                      'Line Party Id = '
4593                                   || l_lin_party_id
4594                                   || ',ORG CTC Id = '
4595                                   || p_contact_tbl (i).contact_id
4596                                   || ',RAH CTC Id = '
4597                                   || l_lin_contactid
4598                                   || ',Cont rule = '
4599                                   || p_contact_tbl (i).contact_role
4600                                   || ',CON OBJ Rule = '
4601                                   || p_contact_tbl (i).contact_object_code
4602                                  );
4603                END IF;
4604 
4605                l_ctcv_tbl_in (1).cpl_id := l_line_party_role_id;
4606                l_ctcv_tbl_in (1).dnz_chr_id := p_k_line_rec.k_id;
4607                l_ctcv_tbl_in (1).cro_code := l_role;
4608                l_ctcv_tbl_in (1).object1_id1 := p_contact_tbl (i).contact_id;
4609                l_ctcv_tbl_in (1).object1_id2 := '#';
4610                l_ctcv_tbl_in (1).jtot_object1_code := l_obj;
4611                okc_contract_party_pub.create_contact
4612                                           (p_api_version        => l_api_version,
4613                                            p_init_msg_list      => l_init_msg_list,
4614                                            x_return_status      => l_return_status,
4615                                            x_msg_count          => x_msg_count,
4616                                            x_msg_data           => x_msg_data,
4617                                            p_ctcv_tbl           => l_ctcv_tbl_in,
4618                                            x_ctcv_tbl           => l_ctcv_tbl_out
4619                                           );
4620 
4621                IF l_return_status = 'S'
4622                THEN
4623                   l_line_contact_id := l_ctcv_tbl_out (1).ID;
4624                ELSE
4625                   okc_api.set_message (g_app_name,
4626                                        g_required_value,
4627                                        g_col_name_token,
4628                                           p_contact_tbl (i).contact_role
4629                                        || ' Contact (LINE) '
4630                                        || p_contact_tbl (i).contact_object_code
4631                                       );
4632                   RAISE g_exception_halt_validation;
4633                END IF;
4634             END IF;
4635 
4636             EXIT WHEN i = p_contact_tbl.LAST;
4637             i := p_contact_tbl.NEXT (i);
4638          END LOOP;
4639       END IF;
4640 
4641       IF p_k_line_rec.coverage_template_id IS NOT NULL and p_caller <> 'ST'
4642       THEN
4643          fnd_msg_pub.initialize;
4644          oks_coverages_pvt.create_k_coverage_ext
4645                          (p_api_version        => 1,
4646                           p_init_msg_list      => 'T',
4647                           p_src_line_id        => p_k_line_rec.coverage_template_id,
4648                           p_tgt_line_id        => l_line_id,
4649                           x_return_status      => l_return_status,
4650                           x_msg_count          => x_msg_count,
4651                           x_msg_data           => x_msg_data
4652                          );
4653 
4654          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4655          THEN
4656             fnd_log.STRING
4657                (fnd_log.level_event,
4658                    g_module_current
4659                 || '.Create_K_Service_Lines.after_coverage_ext',
4660                    'OKS_COVERAGES_PVT.Create_K_coverage_ext(Return status = '
4661                 || l_return_status
4662                 || ')'
4663                );
4664          END IF;
4665 
4666          IF NOT l_return_status = okc_api.g_ret_sts_success
4667          THEN
4668             IF (p_caller = 'OC')
4669             THEN
4670                fnd_message.set_name (g_app_name, 'OKS_INVD_COV_TEMP');
4671                fnd_message.set_token (token      => 'SERV_ID',
4672                                       VALUE      => p_k_line_rec.srv_id
4673                                      );
4674                x_order_error := '#' || fnd_message.get_encoded || '#';
4675             ELSE
4676                okc_api.set_message (g_app_name,
4677                                     g_required_value,
4678                                     g_col_name_token,
4679                                        'Invalid Coverage Associated with  '
4680                                     || p_k_line_rec.srv_id
4681                                    );
4682             END IF;
4683 
4684             RAISE g_exception_halt_validation;
4685          END IF;
4686       ELSIF p_k_line_rec.coverage_template_id IS NULL AND p_caller <> 'ST'
4687       THEN
4688          IF fnd_log.level_error >= fnd_log.g_current_runtime_level
4689          THEN
4690             fnd_log.STRING (fnd_log.level_error,
4691                             g_module_current
4692                             || '.Create_K_Service_Lines.ERROR',
4693                                'Coverage is not associated with '
4694                             || p_k_line_rec.srv_id
4695                            );
4696          END IF;
4697 
4698          l_return_status := okc_api.g_ret_sts_error;
4699          okc_api.set_message (g_app_name,
4700                               g_required_value,
4701                               g_col_name_token,
4702                                  'Coverage Not Associated with  '
4703                               || p_k_line_rec.srv_id
4704                              );
4705          RAISE g_exception_halt_validation;
4706       END IF;
4707 
4708       l_ctr_grpid := NULL;
4709 
4710       OPEN l_ctr_csr (p_k_line_rec.srv_id);
4711 
4712       FETCH l_ctr_csr
4713        INTO l_ctr_grpid;
4714 
4715       CLOSE l_ctr_csr;
4716 
4717       IF l_ctr_grpid IS NOT NULL
4718       THEN
4719          cs_counters_pub.autoinstantiate_counters
4720                          (p_api_version                    => 1.0,
4721                           p_init_msg_list                  => okc_api.g_false,
4722                           p_commit                         => 'F',
4723                           x_return_status                  => l_return_status,
4724                           x_msg_count                      => x_msg_count,
4725                           x_msg_data                       => x_msg_data,
4726                           p_source_object_id_template      => p_k_line_rec.srv_id,
4727                           p_source_object_id_instance      => l_line_id,
4728                           x_ctr_grp_id_template            => l_ctr_grp_id_template,
4729                           x_ctr_grp_id_instance            => l_ctr_grp_id_instance
4730                          );
4731 
4732          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4733          THEN
4734             fnd_log.STRING
4735                (fnd_log.level_event,
4736                    g_module_current
4737                 || '.Create_K_Service_Lines.after_instantiate_counters',
4738                    'cs_counters_pub.autoinstantiate_counters(Return Status = '
4739                 || l_return_status
4740                 || ')'
4741                );
4742          END IF;
4743 
4744          IF NOT l_return_status = okc_api.g_ret_sts_success
4745          THEN
4746             okc_api.set_message (g_app_name,
4747                                  g_required_value,
4748                                  g_col_name_token,
4749                                  'Counter Instantiate (LINE)'
4750                                 );
4751             RAISE g_exception_halt_validation;
4752          END IF;
4753 
4754          -- To instantiate the events
4755          l_inp_rec.ins_ctr_grp_id := l_ctr_grp_id_instance;
4756          l_inp_rec.tmp_ctr_grp_id := l_ctr_grp_id_template;
4757          l_inp_rec.chr_id := p_k_line_rec.k_id;
4758          l_inp_rec.cle_id := l_line_id;
4759          l_inp_rec.jtot_object_code := 'OKC_K_LINE';
4760          l_inp_rec.inv_item_id := p_k_line_rec.srv_id;
4761          okc_inst_cnd_pub.inst_condition (p_api_version          => 1.0,
4762                                           p_init_msg_list        => 'T',
4763                                           x_return_status        => x_return_status,
4764                                           x_msg_count            => x_msg_count,
4765                                           x_msg_data             => x_msg_data,
4766                                           p_instcnd_inp_rec      => l_inp_rec
4767                                          );
4768       END IF;
4769 
4770       x_service_line_id := l_line_id;
4771    EXCEPTION
4772       WHEN g_exception_halt_validation
4773       THEN
4774          x_return_status := l_return_status;
4775       WHEN OTHERS
4776       THEN
4777          x_return_status := okc_api.g_ret_sts_unexp_error;
4778          okc_api.set_message (g_app_name,
4779                               g_unexpected_error,
4780                               g_sqlcode_token,
4781                               SQLCODE,
4782                               g_sqlerrm_token,
4783                               SQLERRM
4784                              );
4785    END create_k_service_lines;
4786 
4787    PROCEDURE create_k_covered_levels (
4788       p_k_covd_rec      IN              k_line_covered_level_rec_type,
4789       p_price_attribs   IN              pricing_attributes_type,
4790       p_caller          IN              VARCHAR2,
4791       x_order_error     OUT NOCOPY      VARCHAR2,
4792       x_covlvl_id       OUT NOCOPY      NUMBER,
4793       x_update_line     OUT NOCOPY      VARCHAR2,
4794       x_return_status   OUT NOCOPY      VARCHAR2,
4795       x_msg_count       OUT NOCOPY      NUMBER,
4796       x_msg_data        OUT NOCOPY      VARCHAR2
4797    )
4798    IS
4799       l_api_version     CONSTANT NUMBER                                := 1.0;
4800       l_init_msg_list   CONSTANT VARCHAR2 (1)              := okc_api.g_false;
4801       l_return_status            VARCHAR2 (1)                          := 'S';
4802       l_index                    VARCHAR2 (2000);
4803       --Contract Line Table
4804       l_clev_tbl_in              okc_contract_pub.clev_tbl_type;
4805       l_clev_tbl_out             okc_contract_pub.clev_tbl_type;
4806       l_klnv_tbl_in              oks_kln_pvt.klnv_tbl_type;
4807       l_klnv_tbl_out             oks_kln_pvt.klnv_tbl_type;
4808       --Contract Item
4809       l_cimv_tbl                 okc_contract_item_pub.cimv_tbl_type;
4810       l_cimv_tbl_out             okc_contract_item_pub.cimv_tbl_type;
4811       --Pricing Attributes
4812       l_pavv_tbl_in              okc_price_adjustment_pvt.pavv_tbl_type;
4813       l_pavv_tbl_out             okc_price_adjustment_pvt.pavv_tbl_type;
4814       --Rule Related
4815       --l_rgpv_tbl_in                 okc_rule_pub.rgpv_tbl_type;
4816       --l_rgpv_tbl_out                okc_rule_pub.rgpv_tbl_type;
4817       --l_rulv_tbl_in                 okc_rule_pub.rulv_tbl_type;
4818       --l_rulv_tbl_out                okc_rule_pub.rulv_tbl_type;
4819       --Return IDs
4820       l_line_id                  NUMBER;
4821       l_rule_group_id            NUMBER;
4822       l_rule_id                  NUMBER;
4823       l_line_item_id             NUMBER;
4824       l_lsl_id                   NUMBER;
4825       l_hdrsdt                   DATE;
4826       l_hdredt                   DATE;
4827       l_line_sdt                 DATE;
4828       l_line_edt                 DATE;
4829       l_hdrstatus                VARCHAR2 (3);
4830       l_line_status              VARCHAR2 (3);
4831       l_priceattrib_id           NUMBER;
4832       l_invoice_text             VARCHAR2 (2000);
4833       --Obj Rel
4834       l_crjv_tbl_out             okc_k_rel_objs_pub.crjv_tbl_type;
4835       l_msg_data                 VARCHAR2 (2000);
4836       l_ind                      NUMBER;
4837       l_ste_code                 VARCHAR2 (240);
4838       l_sts_code                 VARCHAR2 (240);
4839       g_rail_rec                 oks_tax_util_pvt.ra_rec_type;
4840 
4841       CURSOR l_line_csr (p_line_id NUMBER)
4842       IS
4843          SELECT kl.start_date, kl.end_date, kl.inv_rule_id
4844            FROM okc_k_lines_b kl
4845           WHERE kl.ID = p_line_id;
4846 
4847       l_duration                 NUMBER;
4848       l_timeunits                VARCHAR2 (25);
4849       l_sll_tbl                  oks_bill_sch.streamlvl_tbl;
4850       l_bil_sch_out              oks_bill_sch.itembillsch_tbl;
4851       l_strmlvl_id               NUMBER                               := NULL;
4852       l_update_top_line          VARCHAR2 (1);
4853       l_start_date               DATE;
4854       l_end_date                 DATE;
4855       l_invoice_rule_id          VARCHAR2 (10);
4856       l_sts_flag                 VARCHAR2 (1);
4857    BEGIN
4858       x_return_status := okc_api.g_ret_sts_success;
4859       x_update_line := 'N';
4860       check_line_effectivity (p_cle_id        => p_k_covd_rec.attach_2_line_id,
4861                               p_srv_sdt       => p_k_covd_rec.product_start_date,
4862                               p_srv_edt       => p_k_covd_rec.product_end_date,
4863                               x_line_sdt      => l_line_sdt,
4864                               x_line_edt      => l_line_edt,
4865                               x_status        => l_line_status
4866                              );
4867 
4868       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
4869       THEN
4870          fnd_log.STRING (fnd_log.level_statement,
4871                          g_module_current || '.Create_K_Covered_Levels',
4872                          'Check line effectivity status = ' || l_line_status
4873                         );
4874       END IF;
4875 
4876       IF l_line_status = 'E'
4877       THEN
4878          IF fnd_log.level_error >= fnd_log.g_current_runtime_level
4879          THEN
4880             fnd_log.STRING
4881                        (fnd_log.level_error,
4882                         g_module_current || '.Create_K_Covered_Levels.ERROR',
4883                         'Covered level Dates are not within Line effectivity'
4884                        );
4885          END IF;
4886 
4887          okc_api.set_message (g_app_name,
4888                               g_unexpected_error,
4889                               g_sqlcode_token,
4890                               SQLCODE,
4891                               g_sqlerrm_token,
4892                               'Covlvl Dates not within Line effectivity'
4893                              );
4894          l_return_status := okc_api.g_ret_sts_error;
4895          RAISE g_exception_halt_validation;
4896       ELSIF l_line_status = 'Y'
4897       THEN
4898          check_hdr_effectivity (p_chr_id       => p_k_covd_rec.k_id,
4899                                 p_srv_sdt      => l_line_sdt,
4900                                 p_srv_edt      => l_line_edt,
4901                                 x_hdr_sdt      => l_hdrsdt,
4902                                 x_hdr_edt      => l_hdredt,
4903                                 x_status       => l_hdrstatus
4904                                );
4905 
4906          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
4907          THEN
4908             fnd_log.STRING (fnd_log.level_statement,
4909                             g_module_current || '.Create_K_Covered_Levels',
4910                             'Check Header effectivity status = '
4911                             || l_hdrstatus
4912                            );
4913          END IF;
4914 
4915          IF l_hdrstatus = 'E'
4916          THEN
4917             IF fnd_log.level_error >= fnd_log.g_current_runtime_level
4918             THEN
4919                fnd_log.STRING (fnd_log.level_error,
4920                                g_module_current || '.Create_K_Covered_Levels',
4921                                'Line Dates are not within Header effectivity'
4922                               );
4923             END IF;
4924 
4925             okc_api.set_message (g_app_name,
4926                                  g_unexpected_error,
4927                                  g_sqlcode_token,
4928                                  SQLCODE,
4929                                  g_sqlerrm_token,
4930                                  'line Dates not within Hdr effectivity'
4931                                 );
4932             l_return_status := okc_api.g_ret_sts_error;
4933             RAISE g_exception_halt_validation;
4934          ELSIF l_hdrstatus = 'Y'
4935          THEN
4936             get_sts_code (NULL,
4937                           p_k_covd_rec.product_sts_code,
4938                           l_ste_code,
4939                           l_sts_code
4940                          );
4941 
4942             IF l_ste_code = 'ENTERED'
4943             THEN
4944                l_sts_flag := 'N';
4945             ELSE
4946                l_sts_flag := 'Y';
4947             END IF;
4948 
4949             update_hdr_dates (p_chr_id         => p_k_covd_rec.k_id,
4950                               p_new_sdt        => l_hdrsdt,
4951                               p_new_edt        => l_hdredt,
4952                               p_sts_flag       => l_sts_flag,
4953                               x_status         => l_return_status,
4954                               x_msg_count      => x_msg_count,
4955                               x_msg_data       => x_msg_data
4956                              );
4957 
4958             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4959             THEN
4960                fnd_log.STRING
4961                              (fnd_log.level_event,
4962                                  g_module_current
4963                               || '.Create_K_Covered_Levels.afterupdatehdrdtaes',
4964                                  'update_hdr_dates(Return status = '
4965                               || l_return_status
4966                               || ')'
4967                              );
4968             END IF;
4969 
4970             IF NOT l_return_status = 'S'
4971             THEN
4972                l_return_status := okc_api.g_ret_sts_error;
4973                okc_api.set_message (g_app_name,
4974                                     g_required_value,
4975                                     g_col_name_token,
4976                                     'Header Effectivity Update (SUB LINE)'
4977                                    );
4978                RAISE g_exception_halt_validation;
4979             END IF;
4980          END IF;
4981 
4982          IF p_k_covd_rec.product_sts_code = 'ENTERED'
4983          THEN
4984             l_sts_flag := 'N';
4985          ELSE
4986             l_sts_flag := 'Y';
4987          END IF;
4988 
4989          update_line_dates (p_cle_id             => p_k_covd_rec.attach_2_line_id,
4990                             p_chr_id             => p_k_covd_rec.k_id,
4991                             p_new_sdt            => l_line_sdt,
4992                             p_new_edt            => l_line_edt,
4993                             p_sts_flag           => l_sts_flag,
4994                             p_warranty_flag      => p_k_covd_rec.warranty_flag,
4995                             x_status             => l_return_status,
4996                             x_msg_count          => x_msg_count,
4997                             x_msg_data           => x_msg_data
4998                            );
4999 
5000          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5001          THEN
5002             fnd_log.STRING
5003                          (fnd_log.level_event,
5004                              g_module_current
5005                           || '.Create_K_Covered_Levels.after_update.line_dtaes',
5006                              'update_hdr_dates(Return status = '
5007                           || l_return_status
5008                           || ')'
5009                          );
5010          END IF;
5011 
5012          IF NOT l_return_status = 'S'
5013          THEN
5014             l_return_status := okc_api.g_ret_sts_error;
5015             okc_api.set_message (g_app_name,
5016                                  g_required_value,
5017                                  g_col_name_token,
5018                                  'LINE Effectivity Update (SUB LINE)'
5019                                 );
5020             RAISE g_exception_halt_validation;
5021          ELSE
5022             x_update_line := 'Y';
5023          END IF;
5024 
5025          oks_pm_programs_pvt.adjust_pm_program_schedule
5026                          (p_api_version           => 1.0,
5027                           p_init_msg_list         => 'F',
5028                           p_contract_line_id      => p_k_covd_rec.attach_2_line_id,
5029                           p_new_start_date        => l_line_sdt,
5030                           p_new_end_date          => l_line_edt,
5031                           x_return_status         => l_return_status,
5032                           x_msg_count             => x_msg_count,
5033                           x_msg_data              => x_msg_data
5034                          );
5035 
5036          IF NOT l_return_status = 'S'
5037          THEN
5038             l_return_status := okc_api.g_ret_sts_error;
5039             okc_api.set_message (g_app_name,
5040                                  g_required_value,
5041                                  g_col_name_token,
5042                                  'Adjust PM Program Schedule(SUB LINE)'
5043                                 );
5044             RAISE g_exception_halt_validation;
5045          END IF;
5046 
5047          IF p_k_covd_rec.standard_coverage = 'N'
5048          THEN
5049             oks_coverages_pub.update_cov_eff
5050                          (p_api_version          => 1.0,
5051                           p_init_msg_list        => 'F',
5052                           x_return_status        => l_return_status,
5053                           x_msg_count            => x_msg_count,
5054                           x_msg_data             => x_msg_data,
5055                           p_service_line_id      => p_k_covd_rec.attach_2_line_id,
5056                           p_new_start_date       => l_line_sdt,
5057                           p_new_end_date         => l_line_edt
5058                          );
5059 
5060             IF NOT l_return_status = 'S'
5061             THEN
5062                l_return_status := okc_api.g_ret_sts_error;
5063                okc_api.set_message (g_app_name,
5064                                     g_required_value,
5065                                     g_col_name_token,
5066                                     'Coverage Effectivity Update (SUB LINE)'
5067                                    );
5068                RAISE g_exception_halt_validation;
5069             END IF;
5070          END IF;
5071       END IF;
5072 
5073       IF p_k_covd_rec.warranty_flag = 'W'
5074       THEN
5075          l_lsl_id := 18;
5076       ELSIF p_k_covd_rec.warranty_flag = 'E'
5077       THEN
5078          l_lsl_id := 25;
5079       ELSIF p_k_covd_rec.warranty_flag IN ('S', 'SU')
5080       THEN
5081          l_lsl_id := 9;
5082       END IF;
5083 
5084       l_clev_tbl_in (1).chr_id := NULL;
5085       l_clev_tbl_in (1).sfwt_flag := 'N';
5086       l_clev_tbl_in (1).lse_id := l_lsl_id;
5087       --l_clev_tbl_in(1).line_number            := p_k_covd_rec.line_number;
5088       l_clev_tbl_in (1).line_number :=
5089          get_sub_line_number (p_k_covd_rec.k_id,
5090                               p_k_covd_rec.attach_2_line_id);
5091       l_clev_tbl_in (1).sts_code := p_k_covd_rec.product_sts_code;
5092       l_clev_tbl_in (1).display_sequence := 2;
5093       l_clev_tbl_in (1).dnz_chr_id := p_k_covd_rec.k_id;
5094       --l_clev_tbl_in(1).name                   := Substr(p_k_covd_rec.Product_segment1,1,50);
5095       l_clev_tbl_in (1).NAME := NULL;
5096       l_clev_tbl_in (1).item_description := p_k_covd_rec.product_desc;
5097       l_clev_tbl_in (1).start_date := p_k_covd_rec.product_start_date;
5098       l_clev_tbl_in (1).end_date := p_k_covd_rec.product_end_date;
5099       l_clev_tbl_in (1).exception_yn := 'N';
5100       l_clev_tbl_in (1).price_negotiated := Nvl(p_k_covd_rec.negotiated_amount,0);
5101       l_clev_tbl_in (1).currency_code := p_k_covd_rec.currency_code;
5102       l_clev_tbl_in (1).price_unit := Nvl(p_k_covd_rec.list_price,0);
5103       l_clev_tbl_in (1).cle_id := p_k_covd_rec.attach_2_line_id;
5104       l_clev_tbl_in (1).price_level_ind := priced_yn (l_lsl_id);
5105       l_clev_tbl_in (1).trn_code := p_k_covd_rec.reason_code;
5106       l_clev_tbl_in (1).comments := p_k_covd_rec.reason_comments;
5107       --l_clev_tbl_in(1).translated_text        := p_k_covd_rec.translated_text;
5108       l_clev_tbl_in (1).upg_orig_system_ref :=
5109                                               p_k_covd_rec.upg_orig_system_ref;
5110       -- 04-jun-2002 Vigandhi
5111       l_clev_tbl_in (1).upg_orig_system_ref_id :=
5112                                            p_k_covd_rec.upg_orig_system_ref_id;
5113       -- 04-jun-2002 Vigandhi
5114       l_clev_tbl_in (1).attribute1 := p_k_covd_rec.attribute1;
5115       l_clev_tbl_in (1).attribute2 := p_k_covd_rec.attribute2;
5116       l_clev_tbl_in (1).attribute3 := p_k_covd_rec.attribute3;
5117       l_clev_tbl_in (1).attribute4 := p_k_covd_rec.attribute4;
5118       l_clev_tbl_in (1).attribute5 := p_k_covd_rec.attribute5;
5119       l_clev_tbl_in (1).attribute6 := p_k_covd_rec.attribute6;
5120       l_clev_tbl_in (1).attribute7 := p_k_covd_rec.attribute7;
5121       l_clev_tbl_in (1).attribute8 := p_k_covd_rec.attribute8;
5122       l_clev_tbl_in (1).attribute9 := p_k_covd_rec.attribute9;
5123       l_clev_tbl_in (1).attribute10 := p_k_covd_rec.attribute10;
5124       l_clev_tbl_in (1).attribute11 := p_k_covd_rec.attribute11;
5125       l_clev_tbl_in (1).attribute12 := p_k_covd_rec.attribute12;
5126       l_clev_tbl_in (1).attribute13 := p_k_covd_rec.attribute13;
5127       l_clev_tbl_in (1).attribute14 := p_k_covd_rec.attribute14;
5128       l_clev_tbl_in (1).attribute15 := p_k_covd_rec.attribute15;
5129       --  rules inserted by okc
5130       l_clev_tbl_in (1).line_renewal_type_code :=
5131                                    NVL (p_k_covd_rec.line_renewal_type, 'FUL');
5132       --LRT
5133       okc_contract_pub.create_contract_line
5134                                        (p_api_version            => l_api_version,
5135                                         p_init_msg_list          => l_init_msg_list,
5136                                         p_restricted_update      => okc_api.g_true,
5137                                         x_return_status          => l_return_status,
5138                                         x_msg_count              => x_msg_count,
5139                                         x_msg_data               => x_msg_data,
5140                                         p_clev_tbl               => l_clev_tbl_in,
5141                                         x_clev_tbl               => l_clev_tbl_out
5142                                        );
5143 
5144       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5145       THEN
5146          fnd_log.STRING
5147                  (fnd_log.level_event,
5148                      g_module_current
5149                   || '.Create_K_Covered_Levels.after_create.top_line',
5150                      'okc_contract_pub.create_contract_line(Return status = '
5151                   || l_return_status
5152                   || ')'
5153                  );
5154       END IF;
5155 
5156       IF l_return_status = 'S'
5157       THEN
5158          l_line_id := l_clev_tbl_out (1).ID;
5159       ELSE
5160          --mmadhavi
5161          IF (p_caller = 'OC')
5162          THEN
5163             x_order_error := '#';
5164 
5165             FOR i IN 1 .. fnd_msg_pub.count_msg
5166             LOOP
5167                fnd_msg_pub.get (p_msg_index          => i,
5168                                 p_encoded            => 'T',
5169                                 p_data               => l_msg_data,
5170                                 p_msg_index_out      => l_ind
5171                                );
5172                x_order_error := x_order_error || l_msg_data || '#';
5173 
5174                IF (g_fnd_log_option = 'Y')
5175                THEN
5176                   fnd_message.set_encoded (l_msg_data);
5177                   l_msg_data := fnd_message.get;
5178                   fnd_file.put_line
5179                                (fnd_file.LOG,
5180                                    '(OKC_CONTRACT_PUB).CREATE_CONTRACT_LINE '
5181                                 || l_msg_data
5182                                );
5183                END IF;
5184             END LOOP;
5185 
5186             RAISE g_exception_halt_validation;
5187          ELSE
5188             --mmadhavi
5189             okc_api.set_message (g_app_name,
5190                                  g_required_value,
5191                                  g_col_name_token,
5192                                  'K LINE (SUB LINE)'
5193                                 );
5194             RAISE g_exception_halt_validation;
5195          END IF;
5196       END IF;
5197 
5198       x_covlvl_id := l_line_id;
5199       -- cov rules inserted by oks
5200       l_klnv_tbl_in (1).tax_amount := nvl(p_k_covd_rec.tax_amount,0);
5201 
5202       -- Added tax calculation for the new contract created after transfer
5203       -- 30-jan-2004 Vigandhi
5204       IF p_caller = 'ST' AND p_k_covd_rec.warranty_flag <> 'W'
5205       THEN
5206          oks_tax_util_pvt.get_tax (p_api_version        => 1.0,
5207                                    p_init_msg_list      => okc_api.g_true,
5208                                    p_chr_id             => p_k_covd_rec.k_id,
5209                                    p_cle_id             => l_line_id,
5210                                    px_rail_rec          => g_rail_rec,
5211                                    x_msg_count          => x_msg_count,
5212                                    x_msg_data           => x_msg_data,
5213                                    x_return_status      => l_return_status
5214                                   );
5215 
5216          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5217          THEN
5218             fnd_log.STRING (fnd_log.level_event,
5219                                g_module_current
5220                             || '.Create_K_Covered_Levels.after_tax',
5221                                'oks_tax_util_pvt.get_tax(Return status = '
5222                             || l_return_status
5223                             || ')'
5224                            );
5225          END IF;
5226 
5227          -- Fixed Bug 5035571
5228          /*
5229 	 IF (l_return_status <> okc_api.g_ret_sts_success)
5230          THEN
5231             RAISE g_exception_halt_validation;
5232          END IF;
5233 	 */
5234 
5235          l_klnv_tbl_in (1).tax_inclusive_yn := g_rail_rec.amount_includes_tax_flag;
5236 
5237          IF g_rail_rec.amount_includes_tax_flag = 'Y'
5238          THEN
5239             l_klnv_tbl_in (1).tax_amount := 0;
5240          ELSE
5241             l_klnv_tbl_in (1).tax_amount := g_rail_rec.tax_value;
5242          END IF;
5243       END IF;
5244 
5245       l_invoice_text :=
5246          getformattedinvoicetext (p_k_covd_rec.prod_item_id,
5247                                   p_k_covd_rec.product_start_date,
5248                                   p_k_covd_rec.product_end_date,
5249                                   p_k_covd_rec.attach_2_line_desc,
5250                                   p_k_covd_rec.quantity
5251                                  );
5252       l_klnv_tbl_in (1).cle_id := l_line_id;  --p_k_covd_rec.attach_2_line_id;
5253       l_klnv_tbl_in (1).dnz_chr_id := p_k_covd_rec.k_id;
5254       l_klnv_tbl_in (1).invoice_text := l_invoice_text;                  --IRT
5255       l_klnv_tbl_in (1).created_by := okc_api.g_miss_num;
5256       l_klnv_tbl_in (1).creation_date := okc_api.g_miss_date;
5257       l_klnv_tbl_in (1).status_text := 'Subline created from OM/IB';
5258       l_klnv_tbl_in (1).price_uom := p_k_covd_rec.price_uom;
5259       l_klnv_tbl_in (1).toplvl_uom_code := p_k_covd_rec.toplvl_uom_code;
5260       l_klnv_tbl_in (1).inv_print_flag := 'Y';  --Bug# 5655521
5261 
5262       --mchoudha added for bug#5233956
5263       l_klnv_tbl_in (1).toplvl_price_qty := p_k_covd_rec.toplvl_price_qty;
5264       oks_contract_line_pub.create_line (p_api_version        => l_api_version,
5265                                          p_init_msg_list      => l_init_msg_list,
5266                                          x_return_status      => l_return_status,
5267                                          x_msg_count          => x_msg_count,
5268                                          x_msg_data           => x_msg_data,
5269                                          p_klnv_tbl           => l_klnv_tbl_in,
5270                                          x_klnv_tbl           => l_klnv_tbl_out,
5271                                          p_validate_yn        => 'N'
5272                                         );
5273 
5274       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5275       THEN
5276          fnd_log.STRING
5277                      (fnd_log.level_event,
5278                          g_module_current
5279                       || '.Create_K_Covered_Levels.after_create.covered_line',
5280                          'oks_contract_line_pub.create_line(Return status = '
5281                       || l_return_status
5282                       || ')'
5283                      );
5284       END IF;
5285 
5286       IF NOT l_return_status = 'S'
5287       THEN
5288          --mmadhavi
5289          IF (p_caller = 'OC')
5290          THEN
5291             x_order_error := '#';
5292 
5293             FOR i IN 1 .. fnd_msg_pub.count_msg
5294             LOOP
5295                fnd_msg_pub.get (p_msg_index          => i,
5296                                 p_encoded            => 'T',
5297                                 p_data               => l_msg_data,
5298                                 p_msg_index_out      => l_ind
5299                                );
5300                x_order_error := x_order_error || l_msg_data || '#';
5301 
5302                IF (g_fnd_log_option = 'Y')
5303                THEN
5304                   fnd_message.set_encoded (l_msg_data);
5305                   l_msg_data := fnd_message.get;
5306                   fnd_file.put_line
5307                                    (fnd_file.LOG,
5308                                        '(OKS_CONTRACT_LINE_PUB).CREATE_LINE '
5309                                     || l_msg_data
5310                                    );
5311                END IF;
5312             END LOOP;
5313 
5314             RAISE g_exception_halt_validation;
5315          ELSE
5316             --mmadhavi
5317             okc_api.set_message (g_app_name,
5318                                  g_required_value,
5319                                  g_col_name_token,
5320                                  'OKS Contract COV LINE'
5321                                 );
5322             RAISE g_exception_halt_validation;
5323          END IF;
5324       END IF;
5325 
5326       --Create Contract Item
5327       l_cimv_tbl (1).ID := okc_p_util.raw_to_number (SYS_GUID ());
5328       l_cimv_tbl (1).cle_id := l_line_id;
5329       l_cimv_tbl (1).chr_id := NULL;
5330       l_cimv_tbl (1).cle_id_for := NULL;
5331       l_cimv_tbl (1).dnz_chr_id := p_k_covd_rec.k_id;
5332       l_cimv_tbl (1).object1_id1 := p_k_covd_rec.customer_product_id;
5333       l_cimv_tbl (1).object1_id2 := '#';
5334       l_cimv_tbl (1).jtot_object1_code := 'OKX_CUSTPROD';
5335       l_cimv_tbl (1).uom_code := p_k_covd_rec.uom_code;
5336       l_cimv_tbl (1).exception_yn := 'N';
5337       l_cimv_tbl (1).number_of_items := p_k_covd_rec.quantity;
5338       l_cimv_tbl (1).priced_item_yn := '';
5339       l_cimv_tbl (1).upg_orig_system_ref := '';
5340       l_cimv_tbl (1).upg_orig_system_ref_id := NULL;
5341       l_cimv_tbl (1).object_version_number := 1;
5342       l_cimv_tbl (1).created_by := fnd_global.user_id;
5343       l_cimv_tbl (1).creation_date := SYSDATE;
5344       l_cimv_tbl (1).last_updated_by := fnd_global.user_id;
5345       l_cimv_tbl (1).last_update_date := SYSDATE;
5346       l_cimv_tbl (1).last_update_login := NULL;
5347       l_cimv_tbl (1).request_id := NULL;
5348       l_cimv_tbl (1).program_id := NULL;
5349       l_cimv_tbl (1).program_application_id := NULL;
5350       l_cimv_tbl (1).program_update_date := NULL;
5351       okc_cim_pvt.insert_row_upg (x_return_status      => l_return_status,
5352                                   p_cimv_tbl           => l_cimv_tbl
5353                                  );
5354 
5355       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5356       THEN
5357          fnd_log.STRING
5358                       (fnd_log.level_event,
5359                           g_module_current
5360                        || '.Create_K_Covered_Levels.after_create.contract_item',
5361                           'okc_cim_pvt.insert_row_upg(Return status = '
5362                        || l_return_status
5363                        || ')'
5364                       );
5365       END IF;
5366 
5367       IF l_return_status = 'S'
5368       THEN
5369          l_line_item_id := l_cimv_tbl (1).ID;
5370       ELSE
5371          okc_api.set_message (g_app_name,
5372                               g_required_value,
5373                               g_col_name_token,
5374                               'KItem (SUB LINE)'
5375                              );
5376          RAISE g_exception_halt_validation;
5377       END IF;
5378 
5379       --Create Obj Rel
5380       IF p_k_covd_rec.warranty_flag IN ('E', 'S', 'SU')
5381       THEN
5382          create_obj_rel (p_k_id               => p_k_covd_rec.k_id,
5383                          p_line_id            => l_line_id,
5384                          p_orderhdrid         => NULL,
5385                          p_rty_code           => p_k_covd_rec.rty_code,
5386                          p_orderlineid        => p_k_covd_rec.order_line_id,
5387                          x_return_status      => l_return_status,
5388                          x_msg_count          => x_msg_count,
5389                          x_msg_data           => x_msg_data,
5390                          x_crjv_tbl_out       => l_crjv_tbl_out
5391                         );
5392 
5393          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5394          THEN
5395             fnd_log.STRING
5396                           (fnd_log.level_event,
5397                               g_module_current
5398                            || '.Create_K_Covered_Levels.create.object_relation',
5399                               'create_obj_rel(Return status = '
5400                            || l_return_status
5401                            || ')'
5402                           );
5403          END IF;
5404 
5405          IF NOT l_return_status = okc_api.g_ret_sts_success
5406          THEN
5407             okc_api.set_message (g_app_name,
5408                                  g_required_value,
5409                                  g_col_name_token,
5410                                  'Order Line Id (SUB LINE)'
5411                                 );
5412             RAISE g_exception_halt_validation;
5413          END IF;
5414       END IF;
5415 
5416       --Create Pricing Attributes
5417       IF p_price_attribs.pricing_context IS NOT NULL
5418       THEN
5419          l_pavv_tbl_in (1).cle_id := l_line_id;
5420          l_pavv_tbl_in (1).flex_title := 'QP_ATTR_DEFNS_PRICING';
5421          l_pavv_tbl_in (1).pricing_context := p_price_attribs.pricing_context;
5422          l_pavv_tbl_in (1).pricing_attribute1 :=
5423                                            p_price_attribs.pricing_attribute1;
5424          l_pavv_tbl_in (1).pricing_attribute2 :=
5425                                            p_price_attribs.pricing_attribute2;
5426          l_pavv_tbl_in (1).pricing_attribute3 :=
5427                                            p_price_attribs.pricing_attribute3;
5428          l_pavv_tbl_in (1).pricing_attribute4 :=
5429                                            p_price_attribs.pricing_attribute4;
5430          l_pavv_tbl_in (1).pricing_attribute5 :=
5431                                            p_price_attribs.pricing_attribute5;
5432          l_pavv_tbl_in (1).pricing_attribute6 :=
5433                                            p_price_attribs.pricing_attribute6;
5434          l_pavv_tbl_in (1).pricing_attribute7 :=
5435                                            p_price_attribs.pricing_attribute7;
5436          l_pavv_tbl_in (1).pricing_attribute8 :=
5437                                            p_price_attribs.pricing_attribute8;
5438          l_pavv_tbl_in (1).pricing_attribute9 :=
5439                                            p_price_attribs.pricing_attribute9;
5440          l_pavv_tbl_in (1).pricing_attribute10 :=
5441                                           p_price_attribs.pricing_attribute10;
5442          l_pavv_tbl_in (1).pricing_attribute11 :=
5443                                           p_price_attribs.pricing_attribute11;
5444          l_pavv_tbl_in (1).pricing_attribute12 :=
5445                                           p_price_attribs.pricing_attribute12;
5446          l_pavv_tbl_in (1).pricing_attribute13 :=
5447                                           p_price_attribs.pricing_attribute13;
5448          l_pavv_tbl_in (1).pricing_attribute14 :=
5449                                           p_price_attribs.pricing_attribute14;
5450          l_pavv_tbl_in (1).pricing_attribute15 :=
5451                                           p_price_attribs.pricing_attribute15;
5452          l_pavv_tbl_in (1).pricing_attribute16 :=
5453                                           p_price_attribs.pricing_attribute16;
5454          l_pavv_tbl_in (1).pricing_attribute17 :=
5455                                           p_price_attribs.pricing_attribute17;
5456          l_pavv_tbl_in (1).pricing_attribute18 :=
5457                                           p_price_attribs.pricing_attribute18;
5458          l_pavv_tbl_in (1).pricing_attribute19 :=
5459                                           p_price_attribs.pricing_attribute19;
5460          l_pavv_tbl_in (1).pricing_attribute20 :=
5461                                           p_price_attribs.pricing_attribute20;
5462          l_pavv_tbl_in (1).pricing_attribute21 :=
5463                                           p_price_attribs.pricing_attribute21;
5464          l_pavv_tbl_in (1).pricing_attribute22 :=
5465                                           p_price_attribs.pricing_attribute22;
5466          l_pavv_tbl_in (1).pricing_attribute23 :=
5467                                           p_price_attribs.pricing_attribute23;
5468          l_pavv_tbl_in (1).pricing_attribute24 :=
5469                                           p_price_attribs.pricing_attribute24;
5470          l_pavv_tbl_in (1).pricing_attribute25 :=
5471                                           p_price_attribs.pricing_attribute25;
5472          l_pavv_tbl_in (1).pricing_attribute26 :=
5473                                           p_price_attribs.pricing_attribute26;
5474          l_pavv_tbl_in (1).pricing_attribute27 :=
5475                                           p_price_attribs.pricing_attribute27;
5476          l_pavv_tbl_in (1).pricing_attribute28 :=
5477                                           p_price_attribs.pricing_attribute28;
5478          l_pavv_tbl_in (1).pricing_attribute29 :=
5479                                           p_price_attribs.pricing_attribute29;
5480          l_pavv_tbl_in (1).pricing_attribute30 :=
5481                                           p_price_attribs.pricing_attribute30;
5482          l_pavv_tbl_in (1).pricing_attribute31 :=
5483                                           p_price_attribs.pricing_attribute31;
5484          l_pavv_tbl_in (1).pricing_attribute32 :=
5485                                           p_price_attribs.pricing_attribute32;
5486          l_pavv_tbl_in (1).pricing_attribute33 :=
5487                                           p_price_attribs.pricing_attribute33;
5488          l_pavv_tbl_in (1).pricing_attribute34 :=
5489                                           p_price_attribs.pricing_attribute34;
5490          l_pavv_tbl_in (1).pricing_attribute35 :=
5491                                           p_price_attribs.pricing_attribute35;
5492          l_pavv_tbl_in (1).pricing_attribute36 :=
5493                                           p_price_attribs.pricing_attribute36;
5494          l_pavv_tbl_in (1).pricing_attribute37 :=
5495                                           p_price_attribs.pricing_attribute37;
5496          l_pavv_tbl_in (1).pricing_attribute38 :=
5497                                           p_price_attribs.pricing_attribute38;
5498          l_pavv_tbl_in (1).pricing_attribute39 :=
5499                                           p_price_attribs.pricing_attribute39;
5500          l_pavv_tbl_in (1).pricing_attribute40 :=
5501                                           p_price_attribs.pricing_attribute40;
5502          l_pavv_tbl_in (1).pricing_attribute41 :=
5503                                           p_price_attribs.pricing_attribute41;
5504          l_pavv_tbl_in (1).pricing_attribute42 :=
5505                                           p_price_attribs.pricing_attribute42;
5506          l_pavv_tbl_in (1).pricing_attribute43 :=
5507                                           p_price_attribs.pricing_attribute43;
5508          l_pavv_tbl_in (1).pricing_attribute44 :=
5509                                           p_price_attribs.pricing_attribute44;
5510          l_pavv_tbl_in (1).pricing_attribute45 :=
5511                                           p_price_attribs.pricing_attribute45;
5512          l_pavv_tbl_in (1).pricing_attribute46 :=
5513                                           p_price_attribs.pricing_attribute46;
5514          l_pavv_tbl_in (1).pricing_attribute47 :=
5515                                           p_price_attribs.pricing_attribute47;
5516          l_pavv_tbl_in (1).pricing_attribute48 :=
5517                                           p_price_attribs.pricing_attribute48;
5518          l_pavv_tbl_in (1).pricing_attribute49 :=
5519                                           p_price_attribs.pricing_attribute49;
5520          l_pavv_tbl_in (1).pricing_attribute50 :=
5521                                           p_price_attribs.pricing_attribute50;
5522          l_pavv_tbl_in (1).pricing_attribute51 :=
5523                                           p_price_attribs.pricing_attribute51;
5524          l_pavv_tbl_in (1).pricing_attribute52 :=
5525                                           p_price_attribs.pricing_attribute52;
5526          l_pavv_tbl_in (1).pricing_attribute53 :=
5527                                           p_price_attribs.pricing_attribute53;
5528          l_pavv_tbl_in (1).pricing_attribute54 :=
5529                                           p_price_attribs.pricing_attribute54;
5530          l_pavv_tbl_in (1).pricing_attribute55 :=
5531                                           p_price_attribs.pricing_attribute55;
5532          l_pavv_tbl_in (1).pricing_attribute56 :=
5533                                           p_price_attribs.pricing_attribute56;
5534          l_pavv_tbl_in (1).pricing_attribute57 :=
5535                                           p_price_attribs.pricing_attribute57;
5536          l_pavv_tbl_in (1).pricing_attribute58 :=
5537                                           p_price_attribs.pricing_attribute58;
5538          l_pavv_tbl_in (1).pricing_attribute59 :=
5539                                           p_price_attribs.pricing_attribute59;
5540          l_pavv_tbl_in (1).pricing_attribute60 :=
5541                                           p_price_attribs.pricing_attribute60;
5542          l_pavv_tbl_in (1).pricing_attribute61 :=
5543                                           p_price_attribs.pricing_attribute61;
5544          l_pavv_tbl_in (1).pricing_attribute62 :=
5545                                           p_price_attribs.pricing_attribute62;
5546          l_pavv_tbl_in (1).pricing_attribute63 :=
5547                                           p_price_attribs.pricing_attribute63;
5548          l_pavv_tbl_in (1).pricing_attribute64 :=
5549                                           p_price_attribs.pricing_attribute64;
5550          l_pavv_tbl_in (1).pricing_attribute65 :=
5551                                           p_price_attribs.pricing_attribute65;
5552          l_pavv_tbl_in (1).pricing_attribute66 :=
5553                                           p_price_attribs.pricing_attribute66;
5554          l_pavv_tbl_in (1).pricing_attribute67 :=
5555                                           p_price_attribs.pricing_attribute67;
5556          l_pavv_tbl_in (1).pricing_attribute68 :=
5557                                           p_price_attribs.pricing_attribute68;
5558          l_pavv_tbl_in (1).pricing_attribute69 :=
5559                                           p_price_attribs.pricing_attribute69;
5560          l_pavv_tbl_in (1).pricing_attribute70 :=
5561                                           p_price_attribs.pricing_attribute70;
5562          l_pavv_tbl_in (1).pricing_attribute71 :=
5563                                           p_price_attribs.pricing_attribute71;
5564          l_pavv_tbl_in (1).pricing_attribute72 :=
5565                                           p_price_attribs.pricing_attribute72;
5566          l_pavv_tbl_in (1).pricing_attribute73 :=
5567                                           p_price_attribs.pricing_attribute73;
5568          l_pavv_tbl_in (1).pricing_attribute74 :=
5569                                           p_price_attribs.pricing_attribute74;
5570          l_pavv_tbl_in (1).pricing_attribute75 :=
5571                                           p_price_attribs.pricing_attribute75;
5572          l_pavv_tbl_in (1).pricing_attribute76 :=
5573                                           p_price_attribs.pricing_attribute76;
5574          l_pavv_tbl_in (1).pricing_attribute77 :=
5575                                           p_price_attribs.pricing_attribute77;
5576          l_pavv_tbl_in (1).pricing_attribute78 :=
5577                                           p_price_attribs.pricing_attribute78;
5578          l_pavv_tbl_in (1).pricing_attribute79 :=
5579                                           p_price_attribs.pricing_attribute79;
5580          l_pavv_tbl_in (1).pricing_attribute80 :=
5581                                           p_price_attribs.pricing_attribute80;
5582          l_pavv_tbl_in (1).pricing_attribute81 :=
5583                                           p_price_attribs.pricing_attribute81;
5584          l_pavv_tbl_in (1).pricing_attribute82 :=
5585                                           p_price_attribs.pricing_attribute82;
5586          l_pavv_tbl_in (1).pricing_attribute83 :=
5587                                           p_price_attribs.pricing_attribute83;
5588          l_pavv_tbl_in (1).pricing_attribute84 :=
5589                                           p_price_attribs.pricing_attribute84;
5590          l_pavv_tbl_in (1).pricing_attribute85 :=
5591                                           p_price_attribs.pricing_attribute85;
5592          l_pavv_tbl_in (1).pricing_attribute86 :=
5593                                           p_price_attribs.pricing_attribute86;
5594          l_pavv_tbl_in (1).pricing_attribute87 :=
5595                                           p_price_attribs.pricing_attribute87;
5596          l_pavv_tbl_in (1).pricing_attribute88 :=
5597                                           p_price_attribs.pricing_attribute88;
5598          l_pavv_tbl_in (1).pricing_attribute89 :=
5599                                           p_price_attribs.pricing_attribute89;
5600          l_pavv_tbl_in (1).pricing_attribute90 :=
5601                                           p_price_attribs.pricing_attribute90;
5602          l_pavv_tbl_in (1).pricing_attribute91 :=
5603                                           p_price_attribs.pricing_attribute91;
5604          l_pavv_tbl_in (1).pricing_attribute92 :=
5605                                           p_price_attribs.pricing_attribute92;
5606          l_pavv_tbl_in (1).pricing_attribute93 :=
5607                                           p_price_attribs.pricing_attribute93;
5608          l_pavv_tbl_in (1).pricing_attribute94 :=
5609                                           p_price_attribs.pricing_attribute94;
5610          l_pavv_tbl_in (1).pricing_attribute95 :=
5611                                           p_price_attribs.pricing_attribute95;
5612          l_pavv_tbl_in (1).pricing_attribute96 :=
5613                                           p_price_attribs.pricing_attribute96;
5614          l_pavv_tbl_in (1).pricing_attribute97 :=
5615                                           p_price_attribs.pricing_attribute97;
5616          l_pavv_tbl_in (1).pricing_attribute98 :=
5617                                           p_price_attribs.pricing_attribute98;
5618          l_pavv_tbl_in (1).pricing_attribute99 :=
5619                                           p_price_attribs.pricing_attribute99;
5620          l_pavv_tbl_in (1).pricing_attribute100 :=
5621                                          p_price_attribs.pricing_attribute100;
5622          okc_price_adjustment_pvt.create_price_att_value
5623                                          (p_api_version        => l_api_version,
5624                                           p_init_msg_list      => l_init_msg_list,
5625                                           x_return_status      => l_return_status,
5626                                           x_msg_count          => x_msg_count,
5627                                           x_msg_data           => x_msg_data,
5628                                           p_pavv_tbl           => l_pavv_tbl_in,
5629                                           x_pavv_tbl           => l_pavv_tbl_out
5630                                          );
5631 
5632          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5633          THEN
5634             fnd_log.STRING
5635                (fnd_log.level_event,
5636                    g_module_current
5637                 || '.Create_K_Covered_Levels.after_create.price_att',
5638                    'okc_price_adjustment_pvt.create_price_att_value(Return status = '
5639                 || l_return_status
5640                 || ')'
5641                );
5642          END IF;
5643 
5644          IF l_return_status = 'S'
5645          THEN
5646             l_priceattrib_id := l_pavv_tbl_out (1).ID;
5647          ELSE
5648             okc_api.set_message (g_app_name,
5649                                  g_required_value,
5650                                  g_col_name_token,
5651                                  'PRICE ATTRIBUTES (SUB LINE)'
5652                                 );
5653             RAISE g_exception_halt_validation;
5654          END IF;
5655       END IF;
5656    EXCEPTION
5657       WHEN g_exception_halt_validation
5658       THEN
5659          x_return_status := l_return_status;
5660          NULL;
5661       WHEN OTHERS
5662       THEN
5663          x_return_status := okc_api.g_ret_sts_unexp_error;
5664          okc_api.set_message (g_app_name,
5665                               g_unexpected_error,
5666                               g_sqlcode_token,
5667                               SQLCODE,
5668                               g_sqlerrm_token,
5669                               SQLERRM
5670                              );
5671    END create_k_covered_levels;
5672 
5673    PROCEDURE create_contract_ibnew (
5674       p_extwar_rec                IN              extwar_rec_type,
5675       p_contact_tbl_in            IN              oks_extwarprgm_pvt.contact_tbl,
5676       p_salescredit_tbl_hdr_in    IN              oks_extwarprgm_pvt.salescredit_tbl,
5677       --mmadhavi bug 4174921
5678       p_salescredit_tbl_line_in   IN              oks_extwarprgm_pvt.salescredit_tbl,
5679       p_price_attribs_in          IN              oks_extwarprgm_pvt.pricing_attributes_type,
5680       x_inst_dtls_tbl             IN OUT NOCOPY   oks_ihd_pvt.ihdv_tbl_type,
5681       x_chrid                     OUT NOCOPY      NUMBER,
5682       x_return_status             OUT NOCOPY      VARCHAR2,
5683       x_msg_count                 OUT NOCOPY      NUMBER,
5684       x_msg_data                  OUT NOCOPY      VARCHAR2
5685    )
5686    IS
5687       CURSOR l_party_csr
5688       IS
5689          SELECT NAME
5690            FROM okx_parties_v
5691           WHERE id1 = p_extwar_rec.hdr_party_id;
5692 
5693       CURSOR l_lndates_csr (p_id NUMBER)
5694       IS
5695          SELECT start_date, end_date
5696            FROM okc_k_lines_b
5697           WHERE ID = p_id;
5698 
5699       CURSOR l_hdrdates_csr (p_id NUMBER)
5700       IS
5701          SELECT start_date, end_date, sts_code
5702            FROM okc_k_headers_b
5703           WHERE ID = p_id;
5704 
5705       l_hdr_rec                  k_header_rec_type;
5706       l_line_rec                 k_line_service_rec_type;
5707       l_covd_rec                 k_line_covered_level_rec_type;
5708       l_return_status            VARCHAR2 (5)    := okc_api.g_ret_sts_success;
5709       l_chrid                    NUMBER                             := NULL;
5710       l_lineid                   NUMBER                             := NULL;
5711       l_covlvl_id                NUMBER                             := NULL;
5712       l_party_name               okx_parties_v.NAME%TYPE;
5713       l_lndates_rec              l_lndates_csr%ROWTYPE;
5714       l_hdrdates_rec             l_hdrdates_csr%ROWTYPE;
5715       --l_ctr                       NUMBER := 0;
5716 
5717       --Contact
5718       l_contact_tbl_in           oks_extwarprgm_pvt.contact_tbl;
5719       --SalesCredit
5720       l_salescredit_tbl          oks_extwarprgm_pvt.salescredit_tbl;
5721       l_api_version     CONSTANT NUMBER                             := 1.0;
5722       l_init_msg_list   CONSTANT VARCHAR2 (1)              := okc_api.g_false;
5723       l_index                    VARCHAR2 (2000);
5724       l_rule_group_id            NUMBER;
5725       l_rule_id                  NUMBER;
5726       l_sts_code                 VARCHAR2 (30);
5727       l_ste_code                 VARCHAR2 (30);
5728       l_duration                 NUMBER;
5729       l_timeunits                VARCHAR2 (25);
5730       l_sll_tbl                  oks_bill_sch.streamlvl_tbl;
5731       l_bil_sch_out              oks_bill_sch.itembillsch_tbl;
5732       l_strmlvl_id               NUMBER                             := NULL;
5733       l_update_line              VARCHAR2 (1);
5734       l_temp                     VARCHAR2 (2000);
5735    BEGIN
5736       x_return_status := okc_api.g_ret_sts_success;
5737 
5738       OPEN l_party_csr;
5739 
5740       FETCH l_party_csr
5741        INTO l_party_name;
5742 
5743       CLOSE l_party_csr;
5744 
5745       IF p_extwar_rec.hdr_scs_code IN ('SERVICE', 'SUBSCRIPTION')
5746       THEN
5747          l_hdr_rec.short_description :=
5748                                 'CUSTOMER : ' || l_party_name || '  Contract';
5749       ELSE
5750          l_hdr_rec.short_description :=
5751                'CUSTOMER : '
5752             || l_party_name
5753             || ' Warranty/Extended Warranty Contract';
5754       END IF;
5755 
5756       l_hdr_rec.contract_number := okc_api.g_miss_char;
5757       l_hdr_rec.rty_code := p_extwar_rec.rty_code;
5758       l_hdr_rec.start_date := p_extwar_rec.hdr_sdt;
5759       l_hdr_rec.end_date := p_extwar_rec.hdr_edt;
5760       --l_hdr_rec.sts_code            := 'ACTIVE';
5761       l_hdr_rec.class_code := 'SVC';
5762       l_hdr_rec.authoring_org_id := p_extwar_rec.hdr_org_id;
5763       l_hdr_rec.party_id := p_extwar_rec.hdr_party_id;
5764       l_hdr_rec.third_party_role := p_extwar_rec.hdr_third_party_role;
5765       l_hdr_rec.bill_to_id := p_extwar_rec.hdr_bill_2_id;
5766       l_hdr_rec.ship_to_id := p_extwar_rec.hdr_ship_2_id;
5767       l_hdr_rec.chr_group := p_extwar_rec.hdr_chr_group;
5768       --l_hdr_rec.short_description   := 'CUSTOMER : ' || l_party_name || ' Warranty/Extended Warranty Contract';
5769       l_hdr_rec.price_list_id := p_extwar_rec.hdr_price_list_id;
5770       l_hdr_rec.cust_po_number := p_extwar_rec.hdr_cust_po_number;
5771       l_hdr_rec.agreement_id := p_extwar_rec.hdr_agreement_id;
5772       l_hdr_rec.currency := p_extwar_rec.hdr_currency;
5773       l_hdr_rec.accounting_rule_id := p_extwar_rec.hdr_acct_rule_id;
5774       l_hdr_rec.invoice_rule_id := p_extwar_rec.hdr_inv_rule_id;
5775       l_hdr_rec.order_hdr_id := p_extwar_rec.hdr_order_hdr_id;
5776       l_hdr_rec.payment_term_id := p_extwar_rec.hdr_payment_term_id;
5777       l_hdr_rec.renewal_type := p_extwar_rec.hdr_renewal_type;
5778       l_hdr_rec.renewal_markup := p_extwar_rec.hdr_renewal_markup;
5779       l_hdr_rec.renewal_pricing_type := p_extwar_rec.hdr_renewal_pricing_type;
5780       l_hdr_rec.renewal_price_list_id :=
5781                                         p_extwar_rec.hdr_renewal_price_list_id;
5782       l_hdr_rec.renewal_po := p_extwar_rec.hdr_renewal_po;
5783       l_hdr_rec.cvn_type := p_extwar_rec.hdr_cvn_type;
5784       l_hdr_rec.cvn_rate := p_extwar_rec.hdr_cvn_rate;
5785       l_hdr_rec.cvn_date := p_extwar_rec.hdr_cvn_date;
5786       l_hdr_rec.cvn_euro_rate := p_extwar_rec.hdr_cvn_euro_rate;
5787       l_hdr_rec.tax_status_flag := p_extwar_rec.hdr_tax_status_flag;
5788       l_hdr_rec.tax_exemption_id := p_extwar_rec.hdr_tax_exemption_id;
5789       l_hdr_rec.contact_id := p_extwar_rec.hdr_contact_id;
5790       l_hdr_rec.scs_code := p_extwar_rec.hdr_scs_code;
5791       l_hdr_rec.merge_type := p_extwar_rec.merge_type;
5792       l_hdr_rec.merge_object_id := p_extwar_rec.merge_object_id;
5793       l_hdr_rec.qto_contact_id := p_extwar_rec.qto_contact_id;
5794       l_hdr_rec.qto_email_id := p_extwar_rec.qto_email_id;
5795       l_hdr_rec.qto_phone_id := p_extwar_rec.qto_phone_id;
5796       l_hdr_rec.qto_fax_id := p_extwar_rec.qto_fax_id;
5797       l_hdr_rec.qto_site_id := p_extwar_rec.qto_site_id;
5798       l_hdr_rec.order_line_id := p_extwar_rec.srv_order_line_id;
5799       l_hdr_rec.billing_profile_id := p_extwar_rec.billing_profile_id;
5800       l_hdr_rec.qcl_id := p_extwar_rec.hdr_qcl_id;
5801       l_hdr_rec.grace_period := p_extwar_rec.grace_period;
5802       l_hdr_rec.grace_duration := p_extwar_rec.grace_duration;
5803       l_hdr_rec.salesrep_id := p_extwar_rec.salesrep_id;
5804       l_hdr_rec.pdf_id := p_extwar_rec.hdr_pdf_id;
5805       l_hdr_rec.ccr_number := p_extwar_rec.ccr_number;
5806       l_hdr_rec.ccr_exp_date := p_extwar_rec.ccr_exp_date;
5807       l_hdr_rec.renewal_status := p_extwar_rec.renewal_status;
5808 
5809       IF p_extwar_rec.hdr_sdt > SYSDATE
5810       THEN
5811          get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
5812       ELSE
5813          get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
5814       END IF;
5815 
5816       l_hdr_rec.sts_code := l_sts_code;
5817       oks_extwarprgm_pvt.create_k_hdr
5818                             (p_k_header_rec            => l_hdr_rec,
5819                              p_contact_tbl             => p_contact_tbl_in,
5820                              p_salescredit_tbl_in      => p_salescredit_tbl_hdr_in,
5821                              --mmadhavi  bug 4174921
5822                              x_chr_id                  => l_chrid,
5823                              p_caller                  => 'IB',
5824                              x_order_error             => l_temp,
5825                              x_return_status           => l_return_status,
5826                              x_msg_count               => x_msg_count,
5827                              x_msg_data                => x_msg_data
5828                             );
5829 
5830       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5831       THEN
5832          fnd_log.STRING
5833                        (fnd_log.level_event,
5834                            g_module_current
5835                         || '.Create_contract_Ibnew.after_create.header',
5836                            'oks_extwarprgm_pvt.create_k_hdr(Return status = '
5837                         || l_return_status
5838                         || ')'
5839                        );
5840       END IF;
5841 
5842       IF NOT l_return_status = 'S'
5843       THEN
5844          RAISE g_exception_halt_validation;
5845       END IF;
5846 
5847       x_chrid := l_chrid;
5848 
5849       IF     p_extwar_rec.hdr_order_hdr_id IS NOT NULL
5850          AND p_extwar_rec.merge_type = 'NEW'
5851       THEN
5852          okc_oc_int_pub.create_k_relationships
5853                            (p_api_version              => l_api_version,
5854                             p_init_msg_list            => l_init_msg_list,
5855                             p_commit                   => okc_api.g_false,
5856                             p_sales_contract_id        => okc_api.g_miss_num,
5857                             p_service_contract_id      => x_chrid,
5858                             p_quote_id                 => okc_api.g_miss_num,
5859                             p_quote_line_tab           => okc_oc_int_pub.g_miss_ql_tab,
5860                             p_order_id                 => p_extwar_rec.hdr_order_hdr_id,
5861                             p_order_line_tab           => okc_oc_int_pub.g_miss_ol_tab,
5862                             p_trace_mode               => NULL,
5863                             x_return_status            => l_return_status,
5864                             x_msg_count                => x_msg_count,
5865                             x_msg_data                 => x_msg_data
5866                            );
5867 
5868          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5869          THEN
5870             fnd_log.STRING
5871                  (fnd_log.level_event,
5872                      g_module_current
5873                   || '.Create_contract_Ibnew.after_create.header',
5874                      'okc_oc_int_pub.create_k_relationships(Return status = '
5875                   || l_return_status
5876                   || ')'
5877                  );
5878          END IF;
5879 
5880          IF NOT l_return_status = 'S'
5881          THEN
5882             RAISE g_exception_halt_validation;
5883          END IF;
5884       END IF;
5885 
5886       l_line_rec.k_id := l_chrid;
5887       l_line_rec.k_line_number := okc_api.g_miss_char;
5888       l_line_rec.org_id := p_extwar_rec.hdr_org_id;
5889       l_line_rec.accounting_rule_id := p_extwar_rec.line_accounting_rule_id;
5890       l_line_rec.invoicing_rule_id := p_extwar_rec.line_invoicing_rule_id;
5891       l_line_rec.srv_id := p_extwar_rec.srv_id;
5892       l_line_rec.srv_segment1 := p_extwar_rec.srv_name;
5893       l_line_rec.srv_desc := p_extwar_rec.srv_desc;
5894       l_line_rec.srv_sdt := p_extwar_rec.srv_sdt;
5895       l_line_rec.srv_edt := p_extwar_rec.srv_edt;
5896       l_line_rec.bill_to_id := p_extwar_rec.srv_bill_2_id;
5897       l_line_rec.ship_to_id := p_extwar_rec.srv_ship_2_id;
5898       l_line_rec.order_line_id := p_extwar_rec.srv_order_line_id;
5899       l_line_rec.warranty_flag := p_extwar_rec.warranty_flag;
5900       l_line_rec.currency := p_extwar_rec.srv_currency;
5901       l_line_rec.coverage_template_id := p_extwar_rec.srv_cov_template_id;
5902       l_line_rec.standard_cov_yn := 'Y';
5903       l_line_rec.cust_account := p_extwar_rec.cust_account;
5904       l_line_rec.SOURCE := 'NEW';
5905       l_line_rec.upg_orig_system_ref := 'ORDER'; -- added 04-jun-2002 Vigandhi
5906       l_line_rec.upg_orig_system_ref_id := NULL; -- added 04-jun-2002 Vigandhi
5907       l_line_rec.commitment_id := p_extwar_rec.commitment_id;
5908       -- added 12-aug-2003 Vigandhi
5909       l_line_rec.line_renewal_type := p_extwar_rec.line_renewal_type;
5910       --l_line_rec.tax_amount             := p_extwar_rec.tax_amount;      -- added 22-oct-2003 Vigandhi
5911       l_line_rec.ln_price_list_id := p_extwar_rec.ln_price_list_id;
5912 
5913       -- added 07-nov-2003 Vigandhi
5914       IF p_extwar_rec.srv_sdt > SYSDATE
5915       THEN
5916          get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
5917       ELSE
5918          get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
5919       END IF;
5920 
5921       l_line_rec.line_sts_code := l_sts_code;
5922       oks_extwarprgm_pvt.create_k_service_lines
5923                            (p_k_line_rec              => l_line_rec,
5924                             p_contact_tbl             => p_contact_tbl_in,
5925                             p_salescredit_tbl_in      => p_salescredit_tbl_line_in,
5926                             p_caller                  => 'IB',
5927                             x_order_error             => l_temp,
5928                             x_service_line_id         => l_lineid,
5929                             x_return_status           => l_return_status,
5930                             x_msg_count               => x_msg_count,
5931                             x_msg_data                => x_msg_data
5932                            );
5933 
5934       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
5935       THEN
5936          fnd_log.STRING
5937              (fnd_log.level_event,
5938                  g_module_current
5939               || '.Create_contract_Ibnew.after_create.service_line',
5940                  'oks_extwarprgm_pvt.create_k_service_lines(Return status = '
5941               || l_return_status
5942               || ')'
5943              );
5944       END IF;
5945 
5946       IF NOT l_return_status = 'S'
5947       THEN
5948          RAISE g_exception_halt_validation;
5949       END IF;
5950 
5951       l_covd_rec.k_id := l_chrid;
5952       l_covd_rec.rty_code := p_extwar_rec.rty_code;
5953       l_covd_rec.attach_2_line_id := l_lineid;
5954       l_covd_rec.line_number := okc_api.g_miss_char;
5955       l_covd_rec.customer_product_id := p_extwar_rec.lvl_cp_id;
5956       -- l_covd_rec.product_segment1        := p_extwar_rec.lvl_inventory_name;
5957       -- l_covd_rec.product_desc            := p_extwar_rec.lvl_inventory_desc;
5958       l_covd_rec.product_start_date := p_extwar_rec.srv_sdt;
5959       l_covd_rec.product_end_date := p_extwar_rec.srv_edt;
5960       l_covd_rec.quantity := p_extwar_rec.lvl_quantity;
5961       l_covd_rec.list_price := p_extwar_rec.srv_unit_price;
5962       l_covd_rec.uom_code := p_extwar_rec.lvl_uom_code;
5963       l_covd_rec.negotiated_amount := p_extwar_rec.srv_amount;
5964       l_covd_rec.warranty_flag := p_extwar_rec.warranty_flag;
5965       --l_covd_rec.product_sts_code      := p_extwar_rec.lvl_sts_code;
5966       l_covd_rec.line_renewal_type := p_extwar_rec.lvl_line_renewal_type;
5967       l_covd_rec.currency_code := p_extwar_rec.srv_currency;
5968       l_covd_rec.order_line_id := p_extwar_rec.srv_order_line_id;
5969       --l_covd_rec.upg_orig_system_ref   := Null;
5970       l_covd_rec.attach_2_line_desc := p_extwar_rec.srv_desc;
5971       -- bug#2396580 Vigandhi
5972       l_covd_rec.upg_orig_system_ref := 'ORDER_LINE';
5973       -- added 04-jun-2002 Vigandhi
5974       l_covd_rec.upg_orig_system_ref_id := p_extwar_rec.srv_order_line_id;
5975       -- added 04-jun-2002 Vigandhi
5976       l_covd_rec.prod_item_id := p_extwar_rec.lvl_inventory_id;
5977       l_covd_rec.tax_amount := p_extwar_rec.tax_amount;
5978       -- added tax calculation from OM. -- Vigandhi
5979       l_covd_rec.standard_coverage := 'Y';
5980 
5981       IF p_extwar_rec.srv_sdt > SYSDATE
5982       THEN
5983          get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
5984       ELSE
5985          get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
5986       END IF;
5987 
5988       l_covd_rec.product_sts_code := l_sts_code;
5989       oks_extwarprgm_pvt.create_k_covered_levels
5990                                        (p_k_covd_rec         => l_covd_rec,
5991                                         p_price_attribs      => p_price_attribs_in,
5992                                         p_caller             => 'IB',
5993                                         x_order_error        => l_temp,
5994                                         x_covlvl_id          => l_covlvl_id,
5995                                         x_update_line        => l_update_line,
5996                                         x_return_status      => l_return_status,
5997                                         x_msg_count          => x_msg_count,
5998                                         x_msg_data           => x_msg_data
5999                                        );
6000 
6001       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6002       THEN
6003          fnd_log.STRING
6004             (fnd_log.level_event,
6005                 g_module_current
6006              || '.Create_contract_Ibnew.after_create.covered_line',
6007                 'oks_extwarprgm_pvt.create_k_covered_levels(Return status = '
6008              || l_return_status
6009              || ')'
6010             );
6011       END IF;
6012 
6013       IF NOT l_return_status = 'S'
6014       THEN
6015          RAISE g_exception_halt_validation;
6016       END IF;
6017 
6018       OPEN l_lndates_csr (l_lineid);
6019 
6020       FETCH l_lndates_csr
6021        INTO l_lndates_rec;
6022 
6023       CLOSE l_lndates_csr;
6024 
6025       OPEN l_hdrdates_csr (l_chrid);
6026 
6027       FETCH l_hdrdates_csr
6028        INTO l_hdrdates_rec;
6029 
6030       CLOSE l_hdrdates_csr;
6031 
6032       g_ptr := x_inst_dtls_tbl.COUNT;
6033       x_inst_dtls_tbl (g_ptr).instance_amt_old := NULL;
6034       x_inst_dtls_tbl (g_ptr).instance_qty_old := NULL;
6035       x_inst_dtls_tbl (g_ptr).old_contract_id := NULL;
6036       x_inst_dtls_tbl (g_ptr).old_contact_start_date := NULL;
6037       x_inst_dtls_tbl (g_ptr).old_contract_end_date := NULL;
6038       x_inst_dtls_tbl (g_ptr).old_service_line_id := NULL;
6039       x_inst_dtls_tbl (g_ptr).old_service_start_date := NULL;
6040       x_inst_dtls_tbl (g_ptr).old_service_end_date := NULL;
6041       x_inst_dtls_tbl (g_ptr).old_subline_id := NULL;
6042       x_inst_dtls_tbl (g_ptr).old_subline_start_date := NULL;
6043       x_inst_dtls_tbl (g_ptr).old_subline_end_date := NULL;
6044       x_inst_dtls_tbl (g_ptr).old_customer := NULL;
6045       x_inst_dtls_tbl (g_ptr).old_k_status := NULL;
6046       get_sts_code (NULL, l_hdrdates_rec.sts_code, l_ste_code, l_sts_code);
6047       x_inst_dtls_tbl (g_ptr).instance_amt_new := p_extwar_rec.srv_amount;
6048       x_inst_dtls_tbl (g_ptr).new_contract_id := l_chrid;
6049       x_inst_dtls_tbl (g_ptr).new_contact_start_date :=
6050                                                      l_hdrdates_rec.start_date;
6051       x_inst_dtls_tbl (g_ptr).new_contract_end_date := l_hdrdates_rec.end_date;
6052       x_inst_dtls_tbl (g_ptr).new_service_line_id := l_lineid;
6053       x_inst_dtls_tbl (g_ptr).new_service_start_date :=
6054                                                       l_lndates_rec.start_date;
6055       x_inst_dtls_tbl (g_ptr).new_service_end_date := l_lndates_rec.end_date;
6056       x_inst_dtls_tbl (g_ptr).new_subline_id := l_covlvl_id;
6057       x_inst_dtls_tbl (g_ptr).new_subline_start_date := p_extwar_rec.srv_sdt;
6058       x_inst_dtls_tbl (g_ptr).new_subline_end_date := p_extwar_rec.srv_edt;
6059       x_inst_dtls_tbl (g_ptr).new_customer := p_extwar_rec.cust_account;
6060       x_inst_dtls_tbl (g_ptr).new_k_status := l_sts_code;
6061       x_inst_dtls_tbl (g_ptr).subline_date_terminated := NULL;
6062 
6063       IF p_extwar_rec.warranty_flag <> 'W'
6064       THEN
6065          l_strmlvl_id := check_strmlvl_exists (l_lineid);
6066 
6067          IF l_strmlvl_id IS NULL
6068          THEN
6069             okc_time_util_pub.get_duration
6070                                        (p_start_date         => p_extwar_rec.srv_sdt,
6071                                         p_end_date           => p_extwar_rec.srv_edt,
6072                                         x_duration           => l_duration,
6073                                         x_timeunit           => l_timeunits,
6074                                         x_return_status      => l_return_status
6075                                        );
6076 
6077             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
6078             THEN
6079                fnd_log.STRING (fnd_log.level_statement,
6080                                   g_module_current
6081                                || '.Create_contract_Ibnew.after.get_duration',
6082                                   'Get_Duration Status ='
6083                                || l_return_status
6084                                || ',Duration = '
6085                                || l_duration
6086                                || ',Time Unit = '
6087                                || l_timeunits
6088                               );
6089             END IF;
6090 
6091             IF NOT l_return_status = 'S'
6092             THEN
6093                RAISE g_exception_halt_validation;
6094             END IF;
6095 
6096             l_sll_tbl (1).cle_id := l_lineid;
6097             --l_sll_tbl(1).billing_type                  := 'T';
6098             l_sll_tbl (1).uom_code := l_timeunits;
6099             l_sll_tbl (1).sequence_no := '1';
6100             l_sll_tbl (1).level_periods := '1';
6101             l_sll_tbl (1).start_date := p_extwar_rec.srv_sdt;
6102             l_sll_tbl (1).uom_per_period := l_duration;
6103             l_sll_tbl (1).advance_periods := NULL;
6104             l_sll_tbl (1).level_amount := NULL;
6105             l_sll_tbl (1).invoice_offset_days := NULL;
6106             l_sll_tbl (1).interface_offset_days := NULL;
6107             oks_bill_sch.create_bill_sch_rules
6108                     (p_billing_type         => 'T',
6109                      p_sll_tbl              => l_sll_tbl,
6110                      p_invoice_rule_id      => p_extwar_rec.line_invoicing_rule_id,
6111                      x_bil_sch_out_tbl      => l_bil_sch_out,
6112                      x_return_status        => l_return_status
6113                     );
6114 
6115             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6116             THEN
6117                fnd_log.STRING
6118                     (fnd_log.level_event,
6119                         g_module_current
6120                      || '.Create_contract_Ibnew.after.bill_sch',
6121                         'oks_bill_sch.create_bill_sch_rules(Return status = '
6122                      || l_return_status
6123                      || ')'
6124                     );
6125             END IF;
6126 
6127             IF l_return_status <> okc_api.g_ret_sts_success
6128             THEN
6129                okc_api.set_message (g_app_name,
6130                                     g_required_value,
6131                                     g_col_name_token,
6132                                     'Sched Billing Rule (LINE)'
6133                                    );
6134                RAISE g_exception_halt_validation;
6135             END IF;
6136 
6137             oks_bill_util_pub.create_bcl_for_om
6138                                            (p_line_id            => l_lineid,
6139                                             x_return_status      => l_return_status
6140                                            );
6141 
6142             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6143             THEN
6144                fnd_log.STRING
6145                   (fnd_log.level_event,
6146                    g_module_current || '.Create_contract_Ibnew.after.bcl_om',
6147                       ' oks_bill_util_pub.create_bcl_for_om(Return status = '
6148                    || l_return_status
6149                    || ')'
6150                   );
6151             END IF;
6152 
6153             IF NOT l_return_status = 'S'
6154             THEN
6155                RAISE g_exception_halt_validation;
6156             END IF;
6157          ELSE
6158             IF check_lvlelements_exists (l_lineid)
6159             THEN
6160                IF l_update_line = 'Y'
6161                THEN
6162                   oks_bill_sch.update_om_sll_date
6163                                          (p_top_line_id        => l_lineid,
6164                                           x_return_status      => l_return_status,
6165                                           x_msg_count          => x_msg_count,
6166                                           x_msg_data           => x_msg_data
6167                                          );
6168 
6169                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
6170                      )
6171                   THEN
6172                      fnd_log.STRING
6173                         (fnd_log.level_event,
6174                             g_module_current
6175                          || '.Create_contract_Ibnew.after.om_sll',
6176                             'oks_bill_sch.update_om_sll_date(Return status = '
6177                          || l_return_status
6178                          || ')'
6179                         );
6180                   END IF;
6181 
6182                   IF NOT l_return_status = 'S'
6183                   THEN
6184                      RAISE g_exception_halt_validation;
6185                   END IF;
6186                ELSE
6187                   oks_bill_sch.create_bill_sch_cp
6188                                          (p_top_line_id        => l_lineid,
6189                                           p_cp_line_id         => l_covlvl_id,
6190                                           p_cp_new             => 'Y',
6191                                           x_return_status      => l_return_status,
6192                                           x_msg_count          => x_msg_count,
6193                                           x_msg_data           => x_msg_data
6194                                          );
6195 
6196                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
6197                      )
6198                   THEN
6199                      fnd_log.STRING
6200                         (fnd_log.level_event,
6201                             g_module_current
6202                          || '.Create_contract_Ibnew.after.sch_cp',
6203                             'oks_bill_sch.create_bill_sch_cp(Return status = '
6204                          || l_return_status
6205                          || ')'
6206                         );
6207                   END IF;
6208 
6209                   IF NOT l_return_status = 'S'
6210                   THEN
6211                      RAISE g_exception_halt_validation;
6212                   END IF;
6213                END IF;
6214 
6215                oks_bill_util_pub.create_bcl_for_om
6216                                            (p_line_id            => l_lineid,
6217                                             x_return_status      => l_return_status
6218                                            );
6219 
6220                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6221                THEN
6222                   fnd_log.STRING
6223                      (fnd_log.level_event,
6224                       g_module_current
6225                       || '.Create_contract_Ibnew.after.bcl_om',
6226                          'oks_bill_util_pub.create_bcl_for_om(Return status = '
6227                       || l_return_status
6228                       || ')'
6229                      );
6230                END IF;
6231 
6232                IF NOT l_return_status = 'S'
6233                THEN
6234                   RAISE g_exception_halt_validation;
6235                END IF;
6236             ELSE
6237                okc_api.set_message (g_app_name,
6238                                     g_required_value,
6239                                     g_col_name_token,
6240                                     'level elements NOT EXIST'
6241                                    );
6242                RAISE g_exception_halt_validation;
6243             END IF;
6244          END IF;                                                -- strmlvl end
6245       END IF;                                             -- warranty flag end
6246 
6247       UPDATE okc_k_lines_b
6248          SET price_negotiated =
6249                            (SELECT NVL (SUM (NVL (price_negotiated, 0)), 0)
6250                               FROM okc_k_lines_b
6251                              WHERE cle_id = l_lineid AND dnz_chr_id = l_chrid)
6252        WHERE ID = l_lineid;
6253 
6254       UPDATE okc_k_headers_b
6255          SET estimated_amount =
6256                            (SELECT NVL (SUM (NVL (price_negotiated, 0)), 0)
6257                               FROM okc_k_lines_b
6258                              WHERE dnz_chr_id = l_chrid AND lse_id IN (1, 19))
6259        WHERE ID = l_chrid;
6260 
6261       launch_workflow (   'INSTALL BASE ACTIVITY : NEW '
6262                        || fnd_global.local_chr (10)
6263                        || 'Contract Number       :     '
6264                        || get_contract_number (l_chrid)
6265                        || fnd_global.local_chr (10)
6266                        || 'Service Added         :     '
6267                        || p_extwar_rec.srv_name
6268                        || fnd_global.local_chr (10)
6269                        || 'Customer Product      :     '
6270                        || p_extwar_rec.lvl_cp_id
6271                       );
6272    EXCEPTION
6273       WHEN g_exception_halt_validation
6274       THEN
6275          x_return_status := l_return_status;
6276          NULL;
6277       WHEN OTHERS
6278       THEN
6279          x_return_status := okc_api.g_ret_sts_unexp_error;
6280          okc_api.set_message (g_app_name,
6281                               g_unexpected_error,
6282                               g_sqlcode_token,
6283                               SQLCODE,
6284                               g_sqlerrm_token,
6285                               SQLERRM
6286                              );
6287    END;
6288 
6289    PROCEDURE create_transaction_source (
6290       p_create_opr_inst                    VARCHAR2,
6291       p_source_code                        VARCHAR2,
6292       p_target_chr_id                      VARCHAR2,
6293       p_source_line_id                     NUMBER,
6294       p_source_chr_id                      NUMBER,
6295       p_target_line_id                     NUMBER,
6296       x_oper_instance_id   IN OUT NOCOPY   NUMBER,
6297       x_return_status      OUT NOCOPY      VARCHAR2,
6298       x_msg_count          OUT NOCOPY      NUMBER,
6299       x_msg_data           OUT NOCOPY      VARCHAR2
6300    )
6301    IS
6302       CURSOR cop_csr (p_opn_code VARCHAR2)
6303       IS
6304          SELECT ID
6305            FROM okc_class_operations
6306           WHERE cls_code = (SELECT cls_code
6307                               FROM okc_subclasses_b
6308                              WHERE code = 'SERVICE')
6309                 AND opn_code = p_opn_code;
6310 
6311       l_cop_id                   NUMBER;
6312       l_api_version     CONSTANT NUMBER                          := 1.0;
6313       l_init_msg_list   CONSTANT VARCHAR2 (1)                    := 'F';
6314       l_return_status            VARCHAR2 (1)                    := 'S';
6315       l_oiev_tbl_in              okc_oper_inst_pvt.oiev_tbl_type;
6316       l_oiev_tbl_out             okc_oper_inst_pvt.oiev_tbl_type;
6317       l_olev_tbl_in              okc_oper_inst_pvt.olev_tbl_type;
6318       l_olev_tbl_out             okc_oper_inst_pvt.olev_tbl_type;
6319    BEGIN
6320       x_return_status := l_return_status;
6321 
6322       IF p_create_opr_inst = 'Y'
6323       THEN
6324          -- get class operation id
6325          OPEN cop_csr (p_source_code);
6326 
6327          FETCH cop_csr
6328           INTO l_cop_id;
6329 
6330          CLOSE cop_csr;
6331 
6332          --errorout_n('cop'||l_cop_id);
6333          l_oiev_tbl_in (1).status_code := 'PROCESSED';
6334          l_oiev_tbl_in (1).cop_id := l_cop_id;
6335          l_oiev_tbl_in (1).target_chr_id := p_target_chr_id;
6336          okc_oper_inst_pub.create_operation_instance
6337                                          (p_api_version        => l_api_version,
6338                                           p_init_msg_list      => l_init_msg_list,
6339                                           x_return_status      => l_return_status,
6340                                           x_msg_count          => x_msg_count,
6341                                           x_msg_data           => x_msg_data,
6342                                           p_oiev_tbl           => l_oiev_tbl_in,
6343                                           x_oiev_tbl           => l_oiev_tbl_out
6344                                          );
6345 
6346          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6347          THEN
6348             fnd_log.STRING
6349                (fnd_log.level_event,
6350                 g_module_current || '.CReate_transaction_source',
6351                    'OKC_OPER_INST_PUB.Create_Operation_Instance (Return status = '
6352                 || l_return_status
6353                 || ')'
6354                );
6355          END IF;
6356 
6357          IF NOT l_return_status = 'S'
6358          THEN
6359             RAISE g_exception_halt_validation;
6360          END IF;
6361 
6362          x_oper_instance_id := l_oiev_tbl_out (1).ID;
6363       END IF;
6364 
6365       l_olev_tbl_in (1).oie_id := x_oper_instance_id;
6366       l_olev_tbl_in (1).process_flag := 'P';
6367       l_olev_tbl_in (1).subject_chr_id := p_target_chr_id;
6368       l_olev_tbl_in (1).object_chr_id := p_source_chr_id;
6369       l_olev_tbl_in (1).subject_cle_id := p_target_line_id;
6370       l_olev_tbl_in (1).object_cle_id := p_source_line_id;
6371       l_olev_tbl_in (1).active_yn := 'Y';
6372       okc_oper_inst_pub.create_operation_line
6373                                           (p_api_version        => l_api_version,
6374                                            p_init_msg_list      => l_init_msg_list,
6375                                            x_return_status      => l_return_status,
6376                                            x_msg_count          => x_msg_count,
6377                                            x_msg_data           => x_msg_data,
6378                                            p_olev_tbl           => l_olev_tbl_in,
6379                                            x_olev_tbl           => l_olev_tbl_out
6380                                           );
6381 
6382       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6383       THEN
6384          fnd_log.STRING
6385               (fnd_log.level_event,
6386                g_module_current || '.CReate_transaction_source',
6387                   'OKC_OPER_INST_PUB.Create_Operation_Line (Return status = '
6388                || l_return_status
6389                || ')'
6390               );
6391       END IF;
6392 
6393       IF NOT l_return_status = 'S'
6394       THEN
6395          RAISE g_exception_halt_validation;
6396       END IF;
6397 
6398       x_return_status := l_return_status;
6399    EXCEPTION
6400       WHEN g_exception_halt_validation
6401       THEN
6402          x_return_status := l_return_status;
6403          NULL;
6404       WHEN OTHERS
6405       THEN
6406          x_return_status := okc_api.g_ret_sts_unexp_error;
6407          okc_api.set_message (g_app_name,
6408                               g_unexpected_error,
6409                               g_sqlcode_token,
6410                               SQLCODE,
6411                               g_sqlerrm_token,
6412                               SQLERRM
6413                              );
6414    END;
6415 
6416    PROCEDURE create_source_links (
6417       p_line_id                            NUMBER,
6418       p_source_code                        VARCHAR2,
6419       p_create_opr_inst                    VARCHAR2,
6420       p_target_chr_id                      VARCHAR2,
6421       p_target_line_id                     NUMBER,
6422       p_txn_date                           DATE,
6423       x_return_status      OUT NOCOPY      VARCHAR2,
6424       x_msg_count          OUT NOCOPY      NUMBER,
6425       x_msg_data           OUT NOCOPY      VARCHAR2,
6426       x_oper_instance_id   IN OUT NOCOPY   NUMBER
6427    )
6428    IS
6429       CURSOR check_renewal_link
6430       IS
6431          SELECT object_cle_id, object_chr_id
6432            FROM okc_operation_instances op,
6433                 okc_operation_lines ol,
6434                 okc_class_operations classopr,
6435                 okc_subclasses_b subclass
6436           WHERE ol.oie_id = op.ID
6437             AND subclass.code = 'SERVICE'
6438             AND classopr.cls_code = subclass.cls_code
6439             AND classopr.opn_code IN ('RENEWAL', 'REN_CON')
6440             AND op.cop_id = classopr.ID
6441             AND ol.subject_cle_id = p_line_id;
6442 
6443       CURSOR check_source_link (p_line_id NUMBER)
6444       IS
6445          SELECT subject_cle_id, subject_chr_id
6446            FROM okc_operation_instances op,
6447                 okc_operation_lines ol,
6448                 okc_class_operations cl,
6449                 okc_subclasses_b sl
6450           WHERE ol.oie_id = op.ID
6451             AND op.cop_id = cl.ID
6452             AND cl.cls_code = sl.cls_code
6453             AND sl.code = 'SERVICE'
6454             AND cl.opn_code = p_source_code
6455             AND ol.object_cle_id = p_line_id;
6456 
6457       CURSOR check_split_source_link (p_line_id NUMBER)
6458       IS
6459          SELECT subject_cle_id, subject_chr_id
6460            FROM okc_operation_instances op,
6461                 okc_operation_lines ol,
6462                 okc_class_operations cl,
6463                 okc_subclasses_b sl,
6464                 okc_k_items a
6465           WHERE ol.oie_id = op.ID
6466             AND op.cop_id = cl.ID
6467             AND cl.cls_code = sl.cls_code
6468             AND sl.code = 'SERVICE'
6469             AND cl.opn_code = p_source_code
6470             AND ol.object_cle_id = p_line_id
6471             AND a.cle_id = ol.subject_cle_id
6472             AND a.object1_id1 = (Select  b.object1_id1
6473                                  from    okc_k_items b
6474                                  where   b.jtot_object1_code = 'OKX_CUSTPROD'
6475                                  and b.cle_id = p_target_line_id)
6476             AND a.jtot_object1_code = 'OKX_CUSTPROD';
6477 
6478       l_api_version     CONSTANT NUMBER       := 1.0;
6479       l_init_msg_list   CONSTANT VARCHAR2 (1) := 'F';
6480       l_return_status            VARCHAR2 (1) := 'S';
6481       l_renewal_id               NUMBER;
6482       l_source_id                NUMBER;
6483       l_renewal_chr_id           NUMBER;
6484       l_source_hdr_id            NUMBER;
6485       l_source_line_id           NUMBER;
6486       l_source_chr_id            NUMBER;
6487       l_line_date_renewed        DATE;
6488       l_hdr_date_renewed         DATE;
6489 
6490       FUNCTION hdr_renewal_link_exists (
6491          p_target_chr_id   NUMBER,
6492          p_source_chr_id   NUMBER
6493       )
6494          RETURN BOOLEAN
6495       IS
6496          CURSOR check_source_link
6497          IS
6498             SELECT 'Y'
6499               FROM okc_operation_instances op,
6500                    okc_operation_lines ol,
6501                    okc_class_operations classopr,
6502                    okc_subclasses_b subclass
6503              WHERE ol.oie_id = op.ID
6504                AND subclass.code = 'SERVICE'
6505                AND classopr.cls_code = subclass.cls_code
6506                AND classopr.opn_code IN ('RENEWAL', 'REN_CON')
6507                AND op.cop_id = classopr.ID
6508                AND ol.subject_chr_id = p_target_chr_id
6509                AND ol.object_chr_id = p_source_chr_id
6510                AND ol.subject_cle_id IS NULL
6511                AND ol.object_cle_id IS NULL;
6512 
6513          l_found   VARCHAR2 (1) := '?';
6514       BEGIN
6515          OPEN check_source_link;
6516 
6517          FETCH check_source_link
6518           INTO l_found;
6519 
6520          CLOSE check_source_link;
6521 
6522          IF l_found = 'Y'
6523          THEN
6524             RETURN (TRUE);
6525          ELSE
6526             RETURN (FALSE);
6527          END IF;
6528       END;
6529    BEGIN
6530       x_return_status := l_return_status;
6531 
6532       OPEN check_renewal_link;
6533 
6534       FETCH check_renewal_link
6535        INTO l_renewal_id, l_renewal_chr_id;
6536 
6537       CLOSE check_renewal_link;
6538 
6539       IF l_renewal_id IS NOT NULL
6540       THEN
6541          IF p_source_code = 'IBSPLIT'
6542          THEN
6543             OPEN check_split_source_link (l_renewal_id);
6544 
6545             FETCH check_split_source_link
6546              INTO l_source_id, l_source_chr_id;
6547 
6548             CLOSE check_split_source_link;
6549          ELSE
6550             OPEN check_source_link (l_renewal_id);
6551 
6552             FETCH check_source_link
6553              INTO l_source_id, l_source_chr_id;
6554 
6555             CLOSE check_source_link;
6556          END IF;
6557 
6558          IF l_source_id IS NOT NULL
6559          THEN
6560             l_source_line_id := l_source_id;
6561             l_source_hdr_id := l_source_chr_id;
6562          ELSE
6563             l_source_line_id := l_renewal_id;
6564             l_source_hdr_id := l_renewal_chr_id;
6565          END IF;
6566 
6567          create_transaction_source (p_create_opr_inst       => p_create_opr_inst,
6568                                     p_source_code           => 'RENEWAL',
6569                                     p_target_chr_id         => p_target_chr_id,
6570                                     p_source_line_id        => l_source_line_id,
6571                                     p_source_chr_id         => l_source_hdr_id,
6572                                     p_target_line_id        => p_target_line_id,
6573                                     x_oper_instance_id      => x_oper_instance_id,
6574                                     x_return_status         => x_return_status,
6575                                     x_msg_count             => x_msg_count,
6576                                     x_msg_data              => x_msg_data
6577                                    );
6578 
6579          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6580          THEN
6581             fnd_log.STRING
6582                (fnd_log.level_event,
6583                 g_module_current || '.CReate_transaction_source',
6584                    'OKC_OPER_INST_PUB.Create_transaction_source(Return status = '
6585                 || l_return_status
6586                 || ')'
6587                );
6588          END IF;
6589 
6590          IF x_return_status = 'S'
6591          THEN
6592             UPDATE okc_k_lines_b
6593                SET date_renewed = p_txn_date
6594              WHERE ID = l_source_line_id;
6595 
6596             l_line_date_renewed :=
6597                      oks_ib_util_pvt.check_renewed_sublines (l_source_line_id);
6598 
6599             UPDATE okc_k_lines_b
6600                SET date_renewed = l_line_date_renewed
6601              WHERE ID = (SELECT cle_id
6602                            FROM okc_k_lines_b
6603                           WHERE ID = l_source_line_id)
6604                    AND date_renewed IS NULL;
6605 
6606             l_hdr_date_renewed :=
6607                         oks_ib_util_pvt.check_renewed_lines (l_source_line_id);
6608 
6609             UPDATE okc_k_headers_all_b
6610                SET date_renewed = l_hdr_date_renewed
6611              WHERE ID = (SELECT dnz_chr_id
6612                            FROM okc_k_lines_b
6613                           WHERE ID = l_source_line_id)
6614                    AND date_renewed IS NULL;
6615          ELSE
6616             RAISE g_exception_halt_validation;
6617          END IF;
6618 
6619          -- Create an operation line for headers.
6620          IF p_source_code = 'TRANSFER'
6621          THEN
6622             IF NOT hdr_renewal_link_exists (p_target_chr_id, l_source_hdr_id)
6623             THEN
6624                create_transaction_source
6625                                    (p_create_opr_inst       => 'N',
6626                                     p_source_code           => 'RENEWAL',
6627                                     p_target_chr_id         => p_target_chr_id,
6628                                     p_source_line_id        => NULL,
6629                                     p_source_chr_id         => l_source_hdr_id,
6630                                     p_target_line_id        => NULL,
6631                                     x_oper_instance_id      => x_oper_instance_id,
6632                                     x_return_status         => x_return_status,
6633                                     x_msg_count             => x_msg_count,
6634                                     x_msg_data              => x_msg_data
6635                                    );
6636 
6637                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6638                THEN
6639                   fnd_log.STRING
6640                      (fnd_log.level_event,
6641                       g_module_current || '.CReate_transaction_source',
6642                          'OKC_OPER_INST_PUB.Create_transaction_source(Return status = '
6643                       || l_return_status
6644                       || ')'
6645                      );
6646                END IF;
6647             END IF;
6648          END IF;
6649       END IF;
6650 
6651       x_return_status := l_return_status;
6652    EXCEPTION
6653       WHEN g_exception_halt_validation
6654       THEN
6655          x_return_status := l_return_status;
6656          NULL;
6657       WHEN OTHERS
6658       THEN
6659          x_return_status := okc_api.g_ret_sts_unexp_error;
6660          okc_api.set_message (g_app_name,
6661                               g_unexpected_error,
6662                               g_sqlcode_token,
6663                               SQLCODE,
6664                               g_sqlerrm_token,
6665                               SQLERRM
6666                              );
6667    END;
6668 
6669    PROCEDURE create_contract_ibsplit (
6670       p_kdtl_tbl        IN              contract_tbl,
6671       x_return_status   OUT NOCOPY      VARCHAR2,
6672       x_msg_count       OUT NOCOPY      NUMBER,
6673       x_msg_data        OUT NOCOPY      VARCHAR2
6674    )
6675    IS
6676       CURSOR l_bill_csr (p_cle_id NUMBER)
6677       IS
6678          SELECT NVL (SUM (amount), 0)
6679            FROM oks_bill_sub_lines_v
6680           WHERE cle_id = p_cle_id;
6681 
6682       CURSOR l_rule_csr (p_cle_id NUMBER)
6683       IS
6684          SELECT elmnts.ID
6685            FROM oks_stream_levels_b strm, oks_level_elements elmnts
6686           WHERE strm.cle_id = p_cle_id AND elmnts.rul_id = strm.ID;
6687 
6688       CURSOR l_credit_csr (p_cle_id NUMBER)
6689       IS
6690          SELECT NVL (SUM (amount), 0)
6691            FROM oks_bill_sub_lines bsl
6692           WHERE bsl.cle_id = p_cle_id
6693             AND EXISTS (SELECT 1
6694                           FROM oks_bill_cont_lines bcl
6695                          WHERE bcl.ID = bsl.bcl_id AND bill_action = 'TR');
6696 
6697       --bug start 3736860
6698       CURSOR get_oks_line_dtls (p_id NUMBER)
6699       IS
6700          SELECT ID, object_version_number
6701            FROM oks_k_lines_b
6702           WHERE cle_id = p_id;
6703 
6704       CURSOR l_bill_tax_csr (p_cle_id NUMBER)
6705       IS
6706          SELECT NVL (SUM (trx_line_tax_amount), 0)
6707            FROM oks_bill_txn_lines
6708           WHERE bsl_id IN (SELECT ID
6709                              FROM oks_bill_sub_lines
6710                             WHERE cle_id = p_cle_id);
6711 
6712       --bug end 3736860
6713       CURSOR l_serv_csr (p_serv_id NUMBER)
6714       IS
6715          SELECT b.concatenated_segments description
6716            FROM mtl_system_items_b_kfv b
6717           WHERE b.inventory_item_id = p_serv_id AND ROWNUM < 2;
6718 
6719       CURSOR l_ordline_csr (p_line_id NUMBER)
6720       IS
6721          SELECT object1_id1
6722            FROM okc_k_rel_objs
6723           WHERE cle_id = p_line_id;
6724 
6725       CURSOR l_refnum_csr (p_cp_id NUMBER)
6726       IS
6727          SELECT instance_number
6728            FROM csi_item_instances
6729           WHERE instance_id = p_cp_id;
6730 
6731       l_ref_num                   VARCHAR2 (30);
6732       x_inst_dtls_tbl             oks_ihd_pvt.ihdv_tbl_type;
6733       l_inst_dtls_tbl             oks_ihd_pvt.ihdv_tbl_type;
6734       l_instparent_id             NUMBER;
6735       l_old_cp_id                 NUMBER;
6736       l_insthist_rec              oks_ins_pvt.insv_rec_type;
6737       x_insthist_rec              oks_ins_pvt.insv_rec_type;
6738       l_parameters                VARCHAR2 (2000);
6739       l_renewal_id                NUMBER;
6740       l_line_rec                  k_line_service_rec_type;
6741       l_covd_rec                  k_line_covered_level_rec_type;
6742       l_available_yn              VARCHAR2 (1);
6743       l_return_status             VARCHAR2 (5)    := okc_api.g_ret_sts_success;
6744       l_chrid                     NUMBER                               := NULL;
6745       l_lineid                    NUMBER                               := NULL;
6746       l_ctr                       NUMBER                                  := 0;
6747       l_ctr1                      NUMBER                                  := 0;
6748       l_api_version      CONSTANT NUMBER                                := 1.0;
6749       l_init_msg_list    CONSTANT VARCHAR2 (1)                          := 'F';
6750       l_terminate_rec             okc_terminate_pvt.terminate_in_cle_rec;
6751       l_srvc_stdt                 DATE;
6752       --Contract Line Table
6753       l_clev_tbl_in               okc_contract_pub.clev_tbl_type;
6754       l_clev_tbl_out              okc_contract_pub.clev_tbl_type;
6755       --SalesCredit
6756       l_salescredit_tbl_line      oks_extwarprgm_pvt.salescredit_tbl;
6757       l_salescredit_tbl_hdr       oks_extwarprgm_pvt.salescredit_tbl;
6758       l_qty1price                 NUMBER                                  := 0;
6759       l_oldamt                    NUMBER (30, 2)                          := 0;
6760       l_no_of_days                NUMBER                                  := 0;
6761       l_new_value                 NUMBER                                  := 0;
6762       l_dayprice                  NUMBER                                  := 0;
6763       l_newactprice               NUMBER (30, 2)                          := 0;
6764       l_diff                      NUMBER                                  := 0;
6765       l_covlvl_id                 NUMBER;
6766       l_rule_group_id             NUMBER;
6767       l_rule_id                   NUMBER;
6768       l_price_attribs_in          oks_extwarprgm_pvt.pricing_attributes_type;
6769       l_bill_schd_yn              VARCHAR2 (1);
6770       l_list_price                NUMBER                                  := 0;
6771       l_spldt                     DATE;
6772       l_billed_amount             NUMBER                                  := 0;
6773       actual_amt                  NUMBER                                  := 0;
6774       l_total_days                NUMBER;
6775       l_credit_amt                NUMBER;
6776       l_duration                  NUMBER;
6777       l_timeunits                 VARCHAR2 (25);
6778       l_sll_tbl                   oks_bill_sch.streamlvl_tbl;
6779       l_bil_sch_out               oks_bill_sch.itembillsch_tbl;
6780       l_strmlvl_id                NUMBER                               := NULL;
6781       l_update_line               VARCHAR2 (1);
6782       l_temp                      VARCHAR2 (2000);
6783       l_ste_code                  VARCHAR2 (30);
6784       l_sts_code                  VARCHAR2 (30);
6785       l_old_qty                   NUMBER                                  := 0;
6786       actual_tax                  NUMBER                                  := 0;
6787       l_qtyltax                   NUMBER                                  := 0;
6788       l_oldtax                    NUMBER (30, 2)                          := 0;
6789       l_newacttax                 NUMBER (30, 2)                          := 0;
6790       l_daytax                    NUMBER                                  := 0;
6791       l_obj_version_num           NUMBER;
6792       l_id                        NUMBER;
6793       l_klnv_tbl_in               oks_kln_pvt.klnv_tbl_type;
6794       l_klnv_tbl_out              oks_kln_pvt.klnv_tbl_type;
6795       l_taxed_amount              NUMBER                                  := 0;
6796       l_new_cp_tbl                oks_bill_sch.subline_id_tbl;
6797       l_warranty_flag             VARCHAR2 (2);
6798       l_renewal_opr_instance_id   NUMBER;
6799       l_opr_instance_id           NUMBER;
6800       l_target_chr_id             NUMBER;
6801       l_source_line_id            NUMBER;
6802       l_create_oper_instance      VARCHAR2 (1);
6803       l_new_sdate                 DATE;
6804       l_order_line_id             Number;
6805    BEGIN
6806       x_return_status := okc_api.g_ret_sts_success;
6807       l_target_chr_id := 0;
6808       l_old_cp_id := 0;
6809 
6810       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6811       THEN
6812          fnd_log.STRING (fnd_log.level_event,
6813                          g_module_current || '.CREATE_CONTRACT_IBSPLIT.',
6814                          ', count = ' || p_kdtl_tbl.COUNT || ')'
6815                         );
6816       END IF;
6817 
6818       IF p_kdtl_tbl.COUNT > 0
6819       THEN
6820          l_ctr := p_kdtl_tbl.FIRST;
6821 
6822          LOOP
6823             okc_context.set_okc_org_context
6824                                            (p_kdtl_tbl (l_ctr).hdr_org_id,
6825                                             p_kdtl_tbl (l_ctr).organization_id
6826                                            );
6827             l_inst_dtls_tbl.DELETE;
6828             l_ctr1 := 1;
6829             l_spldt := p_kdtl_tbl (l_ctr).transaction_date;
6830 
6831             IF (TRUNC (l_spldt) <= TRUNC (p_kdtl_tbl (l_ctr).prod_sdt))
6832             THEN
6833                l_spldt := p_kdtl_tbl (l_ctr).prod_sdt;
6834             END IF;
6835 
6836             l_covd_rec.list_price := p_kdtl_tbl (l_ctr).service_unit_price;
6837 
6838             IF p_kdtl_tbl (l_ctr).lse_id = 25
6839             THEN
6840                l_warranty_flag := 'E';
6841             ELSIF     p_kdtl_tbl (l_ctr).lse_id = 9
6842                   AND p_kdtl_tbl (l_ctr).scs_code = 'SERVICE'
6843             THEN
6844                l_warranty_flag := 'S';
6845             ELSIF p_kdtl_tbl (l_ctr).lse_id = 18
6846             THEN
6847                l_warranty_flag := 'W';
6848             ELSIF     p_kdtl_tbl (l_ctr).lse_id = 9
6849                   AND p_kdtl_tbl (l_ctr).scs_code = 'SUBSCRIPTION'
6850             THEN
6851                l_warranty_flag := 'SU';
6852             END IF;
6853 
6854             IF l_warranty_flag = 'W'
6855             THEN
6856                l_covd_rec.list_price := 0;
6857                l_covd_rec.negotiated_amount := 0;
6858                l_newactprice := 0;
6859                l_oldamt := 0;
6860                l_old_qty :=
6861                     p_kdtl_tbl (l_ctr).old_cp_quantity
6862                   - p_kdtl_tbl (l_ctr).new_quantity;
6863                --bug start 3736860
6864                l_oldtax := 0;
6865                l_covd_rec.tax_amount := 0;
6866                l_newacttax := 0;
6867 
6868                --bug end 3736860
6869                IF l_old_qty < 1
6870                THEN                                                 -- changed
6871                   l_old_qty := p_kdtl_tbl (l_ctr).old_cp_quantity; -- changed
6872                END IF;                                              -- changed
6873 
6874                l_new_sdate := TRUNC (p_kdtl_tbl (l_ctr).prod_sdt);
6875             ELSIF p_kdtl_tbl (l_ctr).service_amount IS NOT NULL
6876             THEN
6877                IF p_kdtl_tbl (l_ctr).lse_id <> 18
6878                THEN                   -- added subscription contract category
6879                   l_no_of_days :=
6880                      ABS (  TRUNC (  p_kdtl_tbl (l_ctr).prod_edt
6881                                    - TRUNC (p_kdtl_tbl (l_ctr).prod_sdt)
6882                                   )
6883                           + 1
6884                          );
6885                   actual_amt := p_kdtl_tbl (l_ctr).service_amount;
6886                   --bug start 3736860
6887                   actual_tax := p_kdtl_tbl (l_ctr).service_tax_amount;
6888                   --bug end 3736860
6889                   l_new_sdate := TRUNC (p_kdtl_tbl (l_ctr).prod_sdt);
6890                END IF;
6891 
6892                l_qty1price := actual_amt / p_kdtl_tbl (l_ctr).old_cp_quantity;
6893                l_old_qty :=
6894                     p_kdtl_tbl (l_ctr).old_cp_quantity
6895                   - p_kdtl_tbl (l_ctr).new_quantity;                -- changed
6896                --bug start 3736860
6897                l_qtyltax := actual_tax / p_kdtl_tbl (l_ctr).old_cp_quantity;
6898 
6899                --bug end 3736860
6900                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
6901                THEN
6902                   fnd_log.STRING (fnd_log.level_statement,
6903                                      g_module_current
6904                                   || '.CREATE_CONTRACT_IBSPLIT',
6905                                      ' cp quantity = '
6906                                   || p_kdtl_tbl (l_ctr).old_cp_quantity
6907                                  );
6908                END IF;
6909 
6910                ---- changed
6911                IF l_old_qty < 1
6912                THEN
6913                   l_old_qty := p_kdtl_tbl (l_ctr).old_cp_quantity;
6914                   l_oldamt := p_kdtl_tbl (l_ctr).service_amount;
6915                   l_newactprice := 0;
6916                   --bug start 3736860
6917                   l_oldtax := p_kdtl_tbl (l_ctr).service_tax_amount;
6918                   l_newacttax := 0;
6919                --bug end 3736860
6920                ELSE
6921                   l_oldamt := l_old_qty * l_qty1price;
6922                   l_newactprice :=
6923                                  p_kdtl_tbl (l_ctr).service_amount - l_oldamt;
6924                                                                -- bug 4274725
6925                   --bug start 3736860
6926                   l_oldtax := l_old_qty * l_qtyltax;
6927                   l_newacttax :=
6928                              p_kdtl_tbl (l_ctr).service_tax_amount - l_oldtax;
6929                                                                -- bug 4274725
6930                --bug end 3736860
6931                END IF;
6932 
6933                -- end of change
6934                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
6935                THEN
6936                   fnd_log.STRING (fnd_log.level_statement,
6937                                      g_module_current
6938                                   || '.CREATE_CONTRACT_IBSPLIT',
6939                                      ' l_old_qty = '
6940                                   || l_old_qty
6941                                   || ',l_oldamt = '
6942                                   || l_oldamt
6943                                   || ',l_newactprice = '
6944                                   || l_newactprice
6945                                  );
6946                END IF;
6947 
6948                l_oldamt :=
6949                   oks_extwar_util_pvt.round_currency_amt
6950                                            (l_oldamt,
6951                                             p_kdtl_tbl (l_ctr).service_currency
6952                                            );
6953                l_covd_rec.negotiated_amount :=
6954                   oks_extwar_util_pvt.round_currency_amt
6955                                            (l_newactprice,
6956                                             p_kdtl_tbl (l_ctr).service_currency
6957                                            );
6958                --bug start 3736860
6959                l_covd_rec.tax_amount :=
6960                   oks_extwar_util_pvt.round_currency_amt
6961                                            (l_newacttax,
6962                                             p_kdtl_tbl (l_ctr).service_currency
6963                                            );
6964                --bug end 3736860
6965                l_list_price := p_kdtl_tbl (l_ctr).service_unit_price;
6966                l_covd_rec.list_price := p_kdtl_tbl (l_ctr).service_unit_price;
6967             END IF;                                     ---warranty flag = 'W'
6968 
6969             UPDATE okc_k_items
6970                SET number_of_items = l_old_qty
6971              WHERE cle_id = p_kdtl_tbl (l_ctr).object_line_id;
6972 
6973             UPDATE okc_k_lines_b
6974                SET price_negotiated = NVL (l_oldamt, 0),
6975                    price_unit = NVL (p_kdtl_tbl (l_ctr).service_unit_price, 0)
6976              WHERE ID = p_kdtl_tbl (l_ctr).object_line_id;
6977 
6978             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6979             THEN
6980                fnd_log.STRING
6981                             (fnd_log.level_event,
6982                                 g_module_current
6983                              || '.CREATE_CONTRACT_IBSPLIT.after_update.cov_lvl',
6984                                 ' update_cov_level(Return status = '
6985                              || l_return_status
6986                              || ')'
6987                             );
6988             END IF;
6989 
6990             IF NOT l_return_status = okc_api.g_ret_sts_success
6991             THEN
6992                RAISE g_exception_halt_validation;
6993             END IF;
6994 
6995             --bug start 3736860
6996             OPEN get_oks_line_dtls (p_kdtl_tbl (l_ctr).object_line_id);
6997 
6998             FETCH get_oks_line_dtls
6999              INTO l_id, l_obj_version_num;
7000 
7001             CLOSE get_oks_line_dtls;
7002 
7003             l_klnv_tbl_in (1).ID := l_id;
7004             l_klnv_tbl_in (1).tax_amount :=
7005                oks_extwar_util_pvt.round_currency_amt
7006                                            (l_oldtax,
7007                                             p_kdtl_tbl (l_ctr).service_currency
7008                                            );
7009             l_klnv_tbl_in (1).object_version_number := l_obj_version_num;
7010             oks_contract_line_pub.update_line
7011                                           (p_api_version        => l_api_version,
7012                                            p_init_msg_list      => l_init_msg_list,
7013                                            x_return_status      => l_return_status,
7014                                            x_msg_count          => x_msg_count,
7015                                            x_msg_data           => x_msg_data,
7016                                            p_klnv_tbl           => l_klnv_tbl_in,
7017                                            x_klnv_tbl           => l_klnv_tbl_out,
7018                                            p_validate_yn        => 'N'
7019                                           );
7020 
7021             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7022             THEN
7023                fnd_log.STRING
7024                      (fnd_log.level_event,
7025                          g_module_current
7026                       || '.CREATE_CONTRACT_IBSPLIT.after_cov_lvl_tax',
7027                          'oks_contract_line_pub.update_line(Return status = '
7028                       || l_return_status
7029                       || ')'
7030                      );
7031             END IF;
7032 
7033             IF NOT l_return_status = 'S'
7034             THEN
7035                okc_api.set_message (g_app_name,
7036                                     g_required_value,
7037                                     g_col_name_token,
7038                                     'OKS Contract COV LINE'
7039                                    );
7040                RAISE g_exception_halt_validation;
7041             END IF;
7042 
7043             --bug end 3736860
7044             get_sts_code (NULL,
7045                           p_kdtl_tbl (l_ctr).hdr_sts,
7046                           l_ste_code,
7047                           l_sts_code
7048                          );
7049             --x_inst_dtls_tbl(l_ctr1).INST_PARENT_ID            :=  p_split_rec.old_cp_id;
7050             l_inst_dtls_tbl (l_ctr1).transaction_date :=
7051                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
7052             l_inst_dtls_tbl (l_ctr1).transaction_type := 'SPL';
7053             l_inst_dtls_tbl (l_ctr1).instance_amt_old :=
7054                                              p_kdtl_tbl (l_ctr).service_amount;
7055             l_inst_dtls_tbl (l_ctr1).instance_qty_old :=
7056                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
7057             l_inst_dtls_tbl (l_ctr1).old_contract_id :=
7058                                                      p_kdtl_tbl (l_ctr).hdr_id;
7059             l_inst_dtls_tbl (l_ctr1).old_contact_start_date :=
7060                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
7061             l_inst_dtls_tbl (l_ctr1).old_contract_end_date :=
7062                                                     p_kdtl_tbl (l_ctr).hdr_edt;
7063             l_inst_dtls_tbl (l_ctr1).old_service_line_id :=
7064                                             p_kdtl_tbl (l_ctr).service_line_id;
7065             l_inst_dtls_tbl (l_ctr1).old_service_start_date :=
7066                                                 p_kdtl_tbl (l_ctr).service_sdt;
7067             l_inst_dtls_tbl (l_ctr1).old_service_end_date :=
7068                                                 p_kdtl_tbl (l_ctr).service_edt;
7069             l_inst_dtls_tbl (l_ctr1).old_subline_id :=
7070                                              p_kdtl_tbl (l_ctr).object_line_id;
7071             l_inst_dtls_tbl (l_ctr1).old_subline_start_date :=
7072                                                    p_kdtl_tbl (l_ctr).prod_sdt;
7073             l_inst_dtls_tbl (l_ctr1).old_subline_end_date :=
7074                                                    p_kdtl_tbl (l_ctr).prod_edt;
7075             l_inst_dtls_tbl (l_ctr1).old_customer :=
7076                                                p_kdtl_tbl (l_ctr).cust_account;
7077             l_inst_dtls_tbl (l_ctr1).old_k_status := l_sts_code;
7078             l_inst_dtls_tbl (l_ctr1).instance_id_new :=
7079                                                   p_kdtl_tbl (l_ctr).old_cp_id;
7080             l_inst_dtls_tbl (l_ctr1).instance_amt_new := NVL (l_oldamt, 0);
7081             l_inst_dtls_tbl (l_ctr1).instance_qty_new := l_old_qty;
7082             l_inst_dtls_tbl (l_ctr1).new_contract_id :=
7083                                                      p_kdtl_tbl (l_ctr).hdr_id;
7084             l_inst_dtls_tbl (l_ctr1).new_contact_start_date :=
7085                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
7086             l_inst_dtls_tbl (l_ctr1).new_contract_end_date :=
7087                                                     p_kdtl_tbl (l_ctr).hdr_edt;
7088             l_inst_dtls_tbl (l_ctr1).new_service_line_id :=
7089                                             p_kdtl_tbl (l_ctr).service_line_id;
7090             l_inst_dtls_tbl (l_ctr1).new_service_start_date :=
7091                                                 p_kdtl_tbl (l_ctr).service_sdt;
7092             l_inst_dtls_tbl (l_ctr1).new_service_end_date :=
7093                                                 p_kdtl_tbl (l_ctr).service_edt;
7094             l_inst_dtls_tbl (l_ctr1).new_subline_id :=
7095                                              p_kdtl_tbl (l_ctr).object_line_id;
7096             l_inst_dtls_tbl (l_ctr1).new_subline_start_date :=
7097                                                    p_kdtl_tbl (l_ctr).prod_sdt;
7098             l_inst_dtls_tbl (l_ctr1).new_subline_end_date :=
7099                                                    p_kdtl_tbl (l_ctr).prod_edt;
7100             l_inst_dtls_tbl (l_ctr1).new_customer :=
7101                                                p_kdtl_tbl (l_ctr).cust_account;
7102             l_inst_dtls_tbl (l_ctr1).new_k_status := l_sts_code;
7103 
7104             --x_inst_dtls_tbl(l_ctr1).SUBLINE_DATE_TERMINATED   :=
7105 
7106             -- Fixed Bug 2500056  06-Aug-2002
7107             IF p_kdtl_tbl (l_ctr).lse_id = 18
7108             THEN
7109                l_covd_rec.rty_code := 'CONTRACTWARRANTYORDER';
7110             ELSE
7111                l_covd_rec.rty_code := 'CONTRACTSERVICESORDER';
7112             END IF;
7113 
7114             l_covd_rec.k_id := p_kdtl_tbl (l_ctr).hdr_id;
7115             l_covd_rec.attach_2_line_id := p_kdtl_tbl (l_ctr).service_line_id;
7116             l_covd_rec.line_number := okc_api.g_miss_char;
7117             l_covd_rec.customer_product_id := p_kdtl_tbl (l_ctr).new_cp_id;
7118             l_covd_rec.product_segment1 := p_kdtl_tbl (l_ctr).prod_name;
7119             l_covd_rec.product_desc := p_kdtl_tbl (l_ctr).prod_description;
7120             l_covd_rec.product_start_date := l_new_sdate;
7121             --TRUNC( p_kdtl_tbl( l_ctr ).prod_sdt ); -- fixed bug2296369
7122             l_covd_rec.product_end_date := TRUNC (p_kdtl_tbl (l_ctr).prod_edt);
7123             l_covd_rec.quantity := p_kdtl_tbl (l_ctr).new_quantity;
7124             l_covd_rec.warranty_flag := l_warranty_flag;
7125             l_covd_rec.uom_code := p_kdtl_tbl (l_ctr).uom_code;
7126             l_order_line_id := Null;
7127             OPEN l_ordline_csr (p_kdtl_tbl (l_ctr).object_line_id);
7128 
7129             FETCH l_ordline_csr
7130              INTO l_order_line_id;
7131 
7132             CLOSE l_ordline_csr;
7133 
7134             l_covd_rec.order_line_id := l_order_line_id;
7135             l_covd_rec.currency_code := p_kdtl_tbl (l_ctr).service_currency;
7136             l_covd_rec.product_sts_code := p_kdtl_tbl (l_ctr).prod_sts_code;
7137             l_covd_rec.upg_orig_system_ref :=
7138                                         p_kdtl_tbl (l_ctr).upg_orig_system_ref;
7139             l_covd_rec.upg_orig_system_ref_id :=
7140                                      p_kdtl_tbl (l_ctr).upg_orig_system_ref_id;
7141 
7142             OPEN l_serv_csr (p_kdtl_tbl (l_ctr).service_inventory_id);
7143 
7144             FETCH l_serv_csr
7145              INTO l_covd_rec.attach_2_line_desc;
7146 
7147             CLOSE l_serv_csr;
7148 
7149             l_covd_rec.line_renewal_type :=
7150                                      p_kdtl_tbl (l_ctr).prod_line_renewal_type;
7151             l_covd_rec.prod_item_id := p_kdtl_tbl (l_ctr).new_inventory_item;
7152             l_covd_rec.price_uom := p_kdtl_tbl (l_ctr).price_uom_code;
7153             l_covd_rec.toplvl_uom_code := p_kdtl_tbl (l_ctr).toplvl_uom_code;
7154             --mchoudha added for bug#5233956
7155             l_covd_rec.toplvl_price_qty := p_kdtl_tbl (l_ctr).toplvl_price_qty;
7156             oks_extwar_util_pvt.get_k_pricing_attributes
7157                             (p_k_line_id          => p_kdtl_tbl (l_ctr).service_line_id,
7158                              x_pricing_att        => l_price_attribs_in,
7159                              x_return_status      => l_return_status
7160                             );
7161 
7162             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7163             THEN
7164                fnd_log.STRING
7165                   (fnd_log.level_event,
7166                       g_module_current
7167                    || '.CREATE_CONTRACT_IBSPLIT.after.price_att',
7168                       'oks_extwar_util_pvt.get_k_pricing_attributes(Return status = '
7169                    || l_return_status
7170                    || ')'
7171                   );
7172             END IF;
7173 
7174             IF NOT l_return_status = okc_api.g_ret_sts_success
7175             THEN
7176                RAISE g_exception_halt_validation;
7177             END IF;
7178 
7179             oks_extwarprgm_pvt.create_k_covered_levels
7180                                        (p_k_covd_rec         => l_covd_rec,
7181                                         p_price_attribs      => l_price_attribs_in,
7182                                         p_caller             => 'IB',
7183                                         x_order_error        => l_temp,
7184                                         x_covlvl_id          => l_covlvl_id,
7185                                         x_update_line        => l_update_line,
7186                                         x_return_status      => l_return_status,
7187                                         x_msg_count          => x_msg_count,
7188                                         x_msg_data           => x_msg_data
7189                                        );
7190 
7191             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7192             THEN
7193                fnd_log.STRING
7194                   (fnd_log.level_event,
7195                       g_module_current
7196                    || '.CREATE_CONTRACT_IBSPLIT.after_create.cov_lvl',
7197                       'oks_extwarprgm_pvt.create_k_covered_levels(Return status = '
7198                    || l_return_status
7199                    || ')'
7200                   );
7201             END IF;
7202 
7203             IF NOT l_return_status = 'S'
7204             THEN
7205                RAISE g_exception_halt_validation;
7206             END IF;
7207 
7208             --x_inst_dtls_tbl(l_ctr1+1).INST_PARENT_ID            :=  p_split_rec.old_cp_id;
7209             l_inst_dtls_tbl (l_ctr1 + 1).transaction_date :=
7210                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
7211             l_inst_dtls_tbl (l_ctr1 + 1).transaction_type := NULL;
7212             l_inst_dtls_tbl (l_ctr1 + 1).instance_amt_old :=
7213                                              p_kdtl_tbl (l_ctr).service_amount;
7214             l_inst_dtls_tbl (l_ctr1 + 1).instance_qty_old :=
7215                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
7216             l_inst_dtls_tbl (l_ctr1 + 1).old_contract_id :=
7217                                                      p_kdtl_tbl (l_ctr).hdr_id;
7218             l_inst_dtls_tbl (l_ctr1 + 1).old_contact_start_date :=
7219                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
7220             l_inst_dtls_tbl (l_ctr1 + 1).old_contract_end_date :=
7221                                                     p_kdtl_tbl (l_ctr).hdr_edt;
7222             l_inst_dtls_tbl (l_ctr1 + 1).old_service_line_id :=
7223                                             p_kdtl_tbl (l_ctr).service_line_id;
7224             l_inst_dtls_tbl (l_ctr1 + 1).old_service_start_date :=
7225                                                 p_kdtl_tbl (l_ctr).service_sdt;
7226             l_inst_dtls_tbl (l_ctr1 + 1).old_service_end_date :=
7227                                                 p_kdtl_tbl (l_ctr).service_edt;
7228             l_inst_dtls_tbl (l_ctr1 + 1).old_subline_id :=
7229                                              p_kdtl_tbl (l_ctr).object_line_id;
7230             l_inst_dtls_tbl (l_ctr1 + 1).old_subline_start_date :=
7231                                                    p_kdtl_tbl (l_ctr).prod_sdt;
7232             l_inst_dtls_tbl (l_ctr1 + 1).old_subline_end_date :=
7233                                                    p_kdtl_tbl (l_ctr).prod_edt;
7234             l_inst_dtls_tbl (l_ctr1 + 1).old_customer :=
7235                                                p_kdtl_tbl (l_ctr).cust_account;
7236             l_inst_dtls_tbl (l_ctr1 + 1).old_k_status := l_sts_code;
7237             l_inst_dtls_tbl (l_ctr1 + 1).instance_id_new :=
7238                                                   p_kdtl_tbl (l_ctr).new_cp_id;
7239             l_inst_dtls_tbl (l_ctr1 + 1).instance_amt_new :=
7240                oks_extwar_util_pvt.round_currency_amt
7241                                            (l_newactprice,
7242                                             p_kdtl_tbl (l_ctr).service_currency
7243                                            );
7244             l_inst_dtls_tbl (l_ctr1 + 1).instance_qty_new :=
7245                                                p_kdtl_tbl (l_ctr).new_quantity;
7246             l_inst_dtls_tbl (l_ctr1 + 1).new_contract_id :=
7247                                                      p_kdtl_tbl (l_ctr).hdr_id;
7248             l_inst_dtls_tbl (l_ctr1 + 1).new_contact_start_date :=
7249                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
7250             l_inst_dtls_tbl (l_ctr1 + 1).new_contract_end_date :=
7251                                                     p_kdtl_tbl (l_ctr).hdr_edt;
7252             l_inst_dtls_tbl (l_ctr1 + 1).new_service_line_id :=
7253                                             p_kdtl_tbl (l_ctr).service_line_id;
7254             l_inst_dtls_tbl (l_ctr1 + 1).new_service_start_date :=
7255                                                 p_kdtl_tbl (l_ctr).service_sdt;
7256             l_inst_dtls_tbl (l_ctr1 + 1).new_service_end_date :=
7257                                                 p_kdtl_tbl (l_ctr).service_edt;
7258             l_inst_dtls_tbl (l_ctr1 + 1).new_subline_id := l_covlvl_id;
7259             l_inst_dtls_tbl (l_ctr1 + 1).new_subline_start_date := l_new_sdate;
7260             l_inst_dtls_tbl (l_ctr1 + 1).new_subline_end_date :=
7261                                            TRUNC (p_kdtl_tbl (l_ctr).prod_edt);
7262             l_inst_dtls_tbl (l_ctr1 + 1).new_customer :=
7263                                                p_kdtl_tbl (l_ctr).cust_account;
7264             l_inst_dtls_tbl (l_ctr1 + 1).new_k_status := l_sts_code;
7265             l_inst_dtls_tbl (l_ctr1 + 1).subline_date_terminated := NULL;
7266             l_new_cp_tbl (1).ID := l_covlvl_id;
7267             oks_bill_sch.adjust_split_bill_sch
7268                              (p_old_cp_id          => p_kdtl_tbl (l_ctr).object_line_id,
7269                               p_new_cp_tbl         => l_new_cp_tbl,
7270                               x_return_status      => l_return_status,
7271                               x_msg_count          => x_msg_count,
7272                               x_msg_data           => x_msg_data
7273                              );
7274 
7275             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7276             THEN
7277                fnd_log.STRING
7278                            (fnd_log.level_event,
7279                                g_module_current
7280                             || '.CREATE_CONTRACT_IBSPLIT.ADJUST_SPLIT_BILL_SCH',
7281                             'Return status = ' || l_return_status
7282                            );
7283             END IF;
7284 
7285             IF NOT l_return_status = 'S'
7286             THEN
7287                RAISE g_exception_halt_validation;
7288             END IF;
7289 
7290             -- Fixed Bug 5039806
7291 	    /*
7292             UPDATE okc_k_lines_b
7293                SET price_negotiated =
7294                       (SELECT NVL (SUM (NVL (price_negotiated, 0)), 0)
7295                          FROM okc_k_lines_b
7296                         WHERE cle_id = p_kdtl_tbl (l_ctr).service_line_id
7297                           AND dnz_chr_id = p_kdtl_tbl (l_ctr).hdr_id)
7298              WHERE ID = p_kdtl_tbl (l_ctr).service_line_id;
7299 
7300             UPDATE okc_k_headers_b
7301                SET estimated_amount =
7302                       (SELECT NVL (SUM (NVL (price_negotiated, 0)), 0)
7303                          FROM okc_k_lines_b
7304                         WHERE dnz_chr_id = p_kdtl_tbl (l_ctr).hdr_id
7305                           AND lse_id IN (1, 19))
7306              WHERE ID = p_kdtl_tbl (l_ctr).hdr_id;
7307 	     */
7308 
7309             l_create_oper_instance := 'N';
7310 
7311             IF    l_opr_instance_id IS NULL
7312                OR l_target_chr_id <> p_kdtl_tbl (l_ctr).hdr_id
7313             THEN
7314                l_target_chr_id := p_kdtl_tbl (l_ctr).hdr_id;
7315                l_create_oper_instance := 'Y';
7316             END IF;
7317 
7318             create_transaction_source
7319                         (p_create_opr_inst       => l_create_oper_instance,
7320                          p_source_code           => 'IBSPLIT',
7321                          p_target_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
7322                          p_source_line_id        => p_kdtl_tbl (l_ctr).object_line_id,
7323                          p_source_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
7324                          p_target_line_id        => l_covlvl_id,
7325                          x_oper_instance_id      => l_opr_instance_id,
7326                          x_return_status         => l_return_status,
7327                          x_msg_count             => x_msg_count,
7328                          x_msg_data              => x_msg_data
7329                         );
7330 
7331             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7332             THEN
7333                fnd_log.STRING
7334                        (fnd_log.level_event,
7335                            g_module_current
7336                         || '.CREATE_CONTRACT_IBSPLIT.Create_transaction_source',
7337                         'Return status = ' || l_return_status
7338                        );
7339             END IF;
7340 
7341             IF NOT l_return_status = 'S'
7342             THEN
7343                RAISE g_exception_halt_validation;
7344             END IF;
7345 
7346             create_source_links
7347                             (p_create_opr_inst       => l_create_oper_instance,
7348                              p_source_code           => 'IBSPLIT',
7349                              p_target_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
7350                              p_line_id               => p_kdtl_tbl (l_ctr).object_line_id,
7351                              p_target_line_id        => l_covlvl_id,
7352                              p_txn_date              => p_kdtl_tbl (l_ctr).transaction_date,
7353                              x_oper_instance_id      => l_renewal_opr_instance_id,
7354                              x_return_status         => l_return_status,
7355                              x_msg_count             => x_msg_count,
7356                              x_msg_data              => x_msg_data
7357                             );
7358 
7359             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7360             THEN
7361                fnd_log.STRING
7362                              (fnd_log.level_event,
7363                                  g_module_current
7364                               || '.CREATE_CONTRACT_IBSPLIT.Create_source_links',
7365                               'Return status = ' || l_return_status
7366                              );
7367             END IF;
7368 
7369             IF NOT l_return_status = 'S'
7370             THEN
7371                RAISE g_exception_halt_validation;
7372             END IF;
7373 
7374             IF l_inst_dtls_tbl.COUNT <> 0
7375             THEN
7376                IF     l_instparent_id IS NULL
7377                   AND l_old_cp_id <> p_kdtl_tbl (l_ctr).old_cp_id
7378                THEN
7379                   OPEN l_refnum_csr (p_kdtl_tbl (l_ctr).old_cp_id);
7380 
7381                   FETCH l_refnum_csr
7382                    INTO l_ref_num;
7383 
7384                   CLOSE l_refnum_csr;
7385 
7386                   l_parameters :=
7387                         ' Old CP :'
7388                      || p_kdtl_tbl (l_ctr).old_cp_id
7389                      || ','
7390                      || 'Item Id:'
7391                      || p_kdtl_tbl (l_ctr).prod_inventory_item
7392                      || ','
7393                      || 'Old Quantity:'
7394                      || p_kdtl_tbl (l_ctr).old_cp_quantity
7395                      || ','
7396                      || 'Transaction type :'
7397                      || 'SPL'
7398                      || ','
7399                      || ' Transaction date :'
7400                      || TRUNC(p_kdtl_tbl (l_ctr).transaction_date)
7401                      || ','
7402                      || 'New quantity:'
7403                      || p_kdtl_tbl (l_ctr).new_quantity;
7404                   --oks_instance_history
7405                   l_old_cp_id := p_kdtl_tbl (l_ctr).old_cp_id;
7406                   l_insthist_rec.instance_id := p_kdtl_tbl (l_ctr).old_cp_id;
7407                   l_insthist_rec.transaction_type := 'SPL';
7408                   l_insthist_rec.transaction_date :=
7409                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
7410                   l_insthist_rec.reference_number := l_ref_num;
7411                   l_insthist_rec.PARAMETERS := l_parameters;
7412                   oks_ins_pvt.insert_row (p_api_version        => 1.0,
7413                                           p_init_msg_list      => 'T',
7414                                           x_return_status      => l_return_status,
7415                                           x_msg_count          => x_msg_count,
7416                                           x_msg_data           => x_msg_data,
7417                                           p_insv_rec           => l_insthist_rec,
7418                                           x_insv_rec           => x_insthist_rec
7419                                          );
7420 
7421                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
7422                      )
7423                   THEN
7424                      fnd_log.STRING
7425                                 (fnd_log.level_event,
7426                                  g_module_current || '.CREATE_K_IBSPLIT',
7427                                     'oks_ins_pvt.insert_row(Return status = '
7428                                  || l_return_status
7429                                  || ')'
7430                                 );
7431                   END IF;
7432 
7433                   x_return_status := l_return_status;
7434 
7435                   IF NOT l_return_status = okc_api.g_ret_sts_success
7436                   THEN
7437                      x_return_status := l_return_status;
7438                      RAISE g_exception_halt_validation;
7439                   END IF;
7440 
7441                   l_instparent_id := x_insthist_rec.ID;
7442                END IF;
7443 
7444                FOR i IN l_inst_dtls_tbl.FIRST .. l_inst_dtls_tbl.LAST
7445                LOOP
7446                   l_inst_dtls_tbl (i).ins_id := l_instparent_id;
7447                END LOOP;
7448 
7449                --oks_inst_history_details
7450                oks_ihd_pvt.insert_row (p_api_version        => 1.0,
7451                                        p_init_msg_list      => 'T',
7452                                        x_return_status      => l_return_status,
7453                                        x_msg_count          => x_msg_count,
7454                                        x_msg_data           => x_msg_data,
7455                                        p_ihdv_tbl           => l_inst_dtls_tbl,
7456                                        x_ihdv_tbl           => x_inst_dtls_tbl
7457                                       );
7458 
7459                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7460                THEN
7461                   fnd_log.STRING
7462                                 (fnd_log.level_event,
7463                                  g_module_current || '.CREATE_K_IBSPLIT',
7464                                     'oks_ihd_pvt.insert_row(Return status = '
7465                                  || l_return_status
7466                                  || ')'
7467                                 );
7468                END IF;
7469 
7470                x_return_status := l_return_status;
7471 
7472                IF NOT l_return_status = okc_api.g_ret_sts_success
7473                THEN
7474                   x_return_status := l_return_status;
7475                   RAISE g_exception_halt_validation;
7476                END IF;
7477             END IF;
7478 
7479             launch_workflow (   'INSTALL BASE ACTIVITY : SPLIT '
7480                              || fnd_global.local_chr (10)
7481                              || 'Contract Number       :       '
7482                              || get_contract_number (p_kdtl_tbl (l_ctr).hdr_id)
7483                              || fnd_global.local_chr (10)
7484                              || 'Splitted Cust Product :       '
7485                              || p_kdtl_tbl (l_ctr).old_cp_id
7486                              || fnd_global.local_chr (10)
7487                              || 'New Customer  Product :       '
7488                              || p_kdtl_tbl (l_ctr).new_cp_id
7489                             );
7490             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
7491             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
7492             l_ctr1 := l_ctr1 + 2;
7493          END LOOP;
7494       END IF;
7495    EXCEPTION
7496       WHEN g_exception_halt_validation
7497       THEN
7498          x_return_status := l_return_status;
7499          NULL;
7500       WHEN OTHERS
7501       THEN
7502          x_return_status := okc_api.g_ret_sts_unexp_error;
7503          okc_api.set_message (g_app_name,
7504                               g_unexpected_error,
7505                               g_sqlcode_token,
7506                               SQLCODE,
7507                               g_sqlerrm_token,
7508                               SQLERRM
7509                              );
7510    END;
7511 
7512    PROCEDURE update_contract_ibreplace (
7513       p_kdtl_tbl        IN              contract_tbl,
7514       x_return_status   OUT NOCOPY      VARCHAR2,
7515       x_msg_count       OUT NOCOPY      NUMBER,
7516       x_msg_data        OUT NOCOPY      VARCHAR2
7517    )
7518    IS
7519       --billed upto date
7520       CURSOR l_billend_csr (p_cle_id NUMBER)
7521       IS
7522          SELECT MAX (date_billed_to) date_billed_to
7523            FROM oks_bill_sub_lines
7524           WHERE cle_id = p_cle_id;
7525 
7526       CURSOR l_cov_csr (p_cle_id NUMBER)
7527       IS
7528          SELECT ksl1.inheritance_type
7529            FROM oks_k_lines_b ksl, oks_k_lines_b ksl1
7530           WHERE ksl.cle_id = p_cle_id AND ksl1.cle_id = ksl.coverage_id;
7531 
7532       --level element id
7533       CURSOR l_rule_csr (p_cle_id NUMBER)
7534       IS
7535          SELECT elmnts.ID
7536            FROM oks_stream_levels_b strm, oks_level_elements elmnts
7537           WHERE strm.cle_id = p_cle_id AND elmnts.rul_id = strm.ID;
7538 
7539       --total billed amount
7540       CURSOR l_billed_amount_csr (p_cle_id NUMBER)
7541       IS
7542          SELECT NVL (SUM (amount), 0)
7543            FROM oks_bill_sub_lines_v
7544           WHERE cle_id = p_cle_id;
7545 
7546       --credit amount
7547       CURSOR l_credit_csr (p_cle_id NUMBER)
7548       IS
7549          SELECT NVL (SUM (amount), 0)
7550            FROM oks_bill_sub_lines bsl
7551           WHERE bsl.cle_id = p_cle_id
7552             AND EXISTS (SELECT 1
7553                           FROM oks_bill_cont_lines bcl
7554                          WHERE bcl.ID = bsl.bcl_id AND bill_action = 'TR');
7555 
7556       -- bug start 3736860
7557       CURSOR get_oks_line_dtls (p_id NUMBER)
7558       IS
7559          SELECT ID, object_version_number
7560            FROM oks_k_lines_b
7561           WHERE cle_id = p_id;
7562 
7563       CURSOR l_bill_tax_csr (p_cle_id NUMBER)
7564       IS
7565          SELECT NVL (SUM (trx_line_tax_amount), 0)
7566            FROM oks_bill_txn_lines
7567           WHERE bsl_id IN (SELECT ID
7568                              FROM oks_bill_sub_lines
7569                             WHERE cle_id = p_cle_id);
7570 
7571       --bug end 3736860
7572       CURSOR l_serv_csr (p_serv_id NUMBER)
7573       IS
7574          SELECT b.concatenated_segments description
7575            FROM mtl_system_items_b_kfv b
7576           WHERE b.inventory_item_id = p_serv_id AND ROWNUM < 2;
7577 
7578       CURSOR l_ordline_csr (p_line_id NUMBER)
7579       IS
7580          SELECT object1_id1
7581            FROM okc_k_rel_objs
7582           WHERE cle_id = p_line_id;
7583 
7584       CURSOR check_renewal_link (p_line_id NUMBER)
7585       IS
7586          SELECT object_cle_id
7587            FROM okc_operation_instances op, okc_operation_lines ol
7588           WHERE ol.oie_id = op.ID
7589             AND op.cop_id IN (41, 40)
7590             AND ol.subject_cle_id = p_line_id;
7591 
7592       CURSOR check_replace_link (p_line_id NUMBER)
7593       IS
7594          SELECT object_cle_id
7595            FROM okc_operation_instances op, okc_operation_lines ol
7596           WHERE ol.oie_id = op.ID
7597             AND op.cop_id = 11017
7598             AND ol.subject_cle_id = p_line_id;
7599 
7600       CURSOR l_refnum_csr (p_cp_id NUMBER)
7601       IS
7602          SELECT instance_number
7603            FROM csi_item_instances
7604           WHERE instance_id = p_cp_id;
7605 
7606       l_ref_num                   VARCHAR2 (30);
7607       x_inst_dtls_tbl             oks_ihd_pvt.ihdv_tbl_type;
7608       l_inst_dtls_tbl             oks_ihd_pvt.ihdv_tbl_type;
7609       l_instparent_id             NUMBER;
7610       l_old_cp_id                 NUMBER;
7611       l_insthist_rec              oks_ins_pvt.insv_rec_type;
7612       x_insthist_rec              oks_ins_pvt.insv_rec_type;
7613       l_parameters                VARCHAR2 (2000);
7614       l_renewal_id                NUMBER;
7615       -- l_contact_tbl_in              oks_extwarprgm_pvt.contact_tbl;
7616       -- l_salescredit_tbl_line        oks_extwarprgm_pvt.salescredit_tbl;
7617       -- l_salescredit_tbl_hdr         oks_extwarprgm_pvt.salescredit_tbl;
7618       l_line_rec                  k_line_service_rec_type;
7619       l_covd_rec                  k_line_covered_level_rec_type;
7620       l_available_yn              CHAR;
7621       l_return_status             VARCHAR2 (5)    := okc_api.g_ret_sts_success;
7622       l_chrid                     NUMBER                               := NULL;
7623       l_lineid                    NUMBER                               := NULL;
7624       l_days                      NUMBER                                  := 0;
7625       l_day1price                 NUMBER                                  := 0;
7626       l_oldamt                    NUMBER (30, 2)                          := 0;
7627       l_newamt                    NUMBER (30, 2)                          := 0;
7628       l_ctr                       NUMBER                                  := 0;
7629       l_ctr1                      NUMBER                                  := 0;
7630       l_newsdt                    DATE;
7631       l_newedt                    DATE;
7632       l_repldt                    DATE;
7633       l_repl_rule                 VARCHAR2 (2);
7634       l_duration                  NUMBER;
7635       l_timeunits                 VARCHAR2 (240);
7636       l_covlvl_id                 NUMBER;
7637       --Contract Line Table
7638       l_clev_tbl_in               okc_contract_pub.clev_tbl_type;
7639       l_clev_tbl_out              okc_contract_pub.clev_tbl_type;
7640       l_price_attribs_in          oks_extwarprgm_pvt.pricing_attributes_type;
7641       l_cov_rec                   l_cov_csr%ROWTYPE;
7642       l_api_version      CONSTANT NUMBER                                := 1.0;
7643       l_init_msg_list    CONSTANT VARCHAR2 (1)              := okc_api.g_false;
7644       l_list_price                NUMBER;
7645       l_no_of_days                NUMBER;
7646       l_billed_amount             NUMBER;
7647       l_billed_upto_dt            DATE;
7648       l_ptr                       NUMBER                                  := 0;
7649       actual_amount               NUMBER                                  := 0;
7650       l_ste_code                  VARCHAR2 (30);
7651       l_sts_code                  VARCHAR2 (30);
7652       l_update_line               VARCHAR2 (1);
7653       l_temp                      VARCHAR2 (2000);
7654       l_obj_version_num           NUMBER;
7655       l_id                        NUMBER;
7656       l_klnv_tbl_in               oks_kln_pvt.klnv_tbl_type;
7657       l_klnv_tbl_out              oks_kln_pvt.klnv_tbl_type;
7658       actual_tax                  NUMBER                                  := 0;
7659       l_day1tax                   NUMBER                                  := 0;
7660       l_oldtax                    NUMBER (30, 2)                          := 0;
7661       l_newtax                    NUMBER (30, 2)                          := 0;
7662       l_taxed_amount              NUMBER                                  := 0;
7663       l_warranty_flag             VARCHAR2 (2);
7664       l_opr_instance_id           NUMBER;
7665       l_renewal_opr_instance_id   NUMBER;
7666       l_target_chr_id             NUMBER;
7667       l_replace_id                NUMBER;
7668       l_source_line_id            NUMBER;
7669       l_create_oper_instance      VARCHAR2 (1);
7670       l_termdt                    DATE;
7671       l_order_line_id             Number;
7672    BEGIN
7673       x_return_status := okc_api.g_ret_sts_success;
7674       l_old_cp_id := 0;
7675       l_target_chr_id := 0;
7676 
7677       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7678       THEN
7679          fnd_log.STRING (fnd_log.level_event,
7680                          g_module_current || '.CREATE_CONTRACT_IBREPLACE.',
7681                          'count = ' || p_kdtl_tbl.COUNT || ')'
7682                         );
7683       END IF;
7684 
7685       IF p_kdtl_tbl.COUNT > 0
7686       THEN
7687          l_ctr := p_kdtl_tbl.FIRST;
7688 
7689          LOOP
7690             okc_context.set_okc_org_context
7691                                            (p_kdtl_tbl (l_ctr).hdr_org_id,
7692                                             p_kdtl_tbl (l_ctr).organization_id
7693                                            );
7694             l_inst_dtls_tbl.DELETE;
7695             l_ctr1 := 1;
7696             get_sts_code (NULL,
7697                           p_kdtl_tbl (l_ctr).prod_sts_code,
7698                           l_ste_code,
7699                           l_sts_code
7700                          );
7701 
7702             --IF l_ste_code <> 'ENTERED' THEN
7703             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
7704             THEN
7705                fnd_log.STRING
7706                   (fnd_log.level_statement,
7707                    g_module_current || '.CREATE_CONTRACT_IBREPLACE',
7708                       'Service Start Date = '
7709                    || p_kdtl_tbl (l_ctr).service_sdt
7710                    || '
7711                                            ,Service End Date = '
7712                    || p_kdtl_tbl (l_ctr).service_edt
7713                    || ', lse_id= '
7714                    || p_kdtl_tbl (l_ctr).lse_id
7715                   );
7716             END IF;
7717 
7718             l_days :=
7719                  (  TRUNC (p_kdtl_tbl (l_ctr).prod_edt)
7720                   - TRUNC (p_kdtl_tbl (l_ctr).prod_sdt)
7721                  )
7722                + 1;
7723             l_repldt := trunc(p_kdtl_tbl (l_ctr).transaction_date);
7724 
7725             IF TRUNC (l_repldt) <= TRUNC (p_kdtl_tbl (l_ctr).prod_sdt)
7726             THEN
7727                l_repldt := TRUNC (p_kdtl_tbl (l_ctr).prod_sdt);
7728             END IF;
7729 
7730             l_covd_rec.list_price := p_kdtl_tbl (l_ctr).service_unit_price;
7731 
7732             IF p_kdtl_tbl (l_ctr).lse_id = 18
7733             THEN
7734                l_covd_rec.list_price := 0;
7735                l_covd_rec.negotiated_amount := 0;
7736                l_list_price := 0;
7737                l_oldamt := 0;
7738                l_repl_rule := NULL;
7739                l_newamt := 0;
7740                --bug start 3736860
7741                l_newtax := 0;
7742                l_oldtax := 0;
7743                l_covd_rec.tax_amount := 0;
7744 
7745                --bug end 3736860
7746                OPEN l_cov_csr (p_kdtl_tbl (l_ctr).service_line_id);
7747 
7748                FETCH l_cov_csr
7749                 INTO l_cov_rec;
7750 
7751                l_repl_rule := l_cov_rec.inheritance_type;
7752 
7753                CLOSE l_cov_csr;
7754 
7755                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
7756                THEN
7757                   fnd_log.STRING (fnd_log.level_statement,
7758                                      g_module_current
7759                                   || '.CREATE_CONTRACT_IBREPLACE',
7760                                   'Replace Rule = ' || l_repl_rule
7761                                  );
7762                END IF;
7763 
7764                /* If product is terminated it can't be extended beyond Its terminated date
7765                   so Replace rule will be set only for the remaining period.
7766                */
7767                l_newsdt := l_repldt;
7768                l_termdt := l_repldt;
7769 
7770                IF NVL (l_repl_rule, 'R') = 'R'
7771                THEN
7772                   l_newedt := p_kdtl_tbl (l_ctr).prod_edt;
7773                ELSIF NVL (l_repl_rule, 'R') = 'F'
7774                THEN
7775                   okc_time_util_pub.get_duration
7776                                  (p_start_date         => p_kdtl_tbl (l_ctr).prod_sdt,
7777                                   p_end_date           => p_kdtl_tbl (l_ctr).prod_edt,
7778                                   x_duration           => l_duration,
7779                                   x_timeunit           => l_timeunits,
7780                                   x_return_status      => l_return_status
7781                                  );
7782 
7783                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
7784                      )
7785                   THEN
7786                      fnd_log.STRING
7787                             (fnd_log.level_event,
7788                                 g_module_current
7789                              || '.CREATE_CONTRACT_IBREPLACE.after.get_duration',
7790                              'Return Status = ' || l_return_status
7791                             );
7792                   END IF;
7793 
7794                   IF NOT l_return_status = 'S'
7795                   THEN
7796                      RAISE g_exception_halt_validation;
7797                   END IF;
7798 
7799                   l_newedt :=
7800                      okc_time_util_pub.get_enddate (p_start_date      => l_repldt,
7801                                                     p_duration        => l_duration,
7802                                                     p_timeunit        => l_timeunits
7803                                                    );
7804                END IF;
7805             END IF;
7806 
7807             IF p_kdtl_tbl (l_ctr).service_amount IS NOT NULL
7808             THEN
7809                IF p_kdtl_tbl (l_ctr).lse_id IN (25, 9)
7810                THEN
7811                   actual_amount := p_kdtl_tbl (l_ctr).service_amount;
7812                   actual_tax := p_kdtl_tbl (l_ctr).service_tax_amount;
7813                   l_newedt := TRUNC (p_kdtl_tbl (l_ctr).prod_edt);
7814                   l_newamt := p_kdtl_tbl (l_ctr).service_amount;
7815                   l_oldamt := 0;
7816                   l_newtax := p_kdtl_tbl (l_ctr).service_tax_amount;
7817                   l_oldtax := 0;
7818                   l_newsdt := TRUNC (p_kdtl_tbl (l_ctr).prod_sdt);
7819                   -- Fixed for bug 4539750
7820                   l_termdt := TRUNC (p_kdtl_tbl (l_ctr).prod_sdt);
7821                END IF;
7822             END IF;
7823 
7824             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
7825             THEN
7826                fnd_log.STRING (fnd_log.level_statement,
7827                                g_module_current
7828                                || '.CREATE_CONTRACT_IBREPLACE',
7829                                   'New amount = '
7830                                || l_newamt
7831                                || ',Old amount = '
7832                                || l_oldamt
7833                               );
7834             END IF;
7835 
7836             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
7837             THEN
7838                fnd_log.STRING (fnd_log.level_statement,
7839                                g_module_current
7840                                || '.CREATE_CONTRACT_IBREPLACE',
7841                                   'New tax = '
7842                                || l_newtax
7843                                || ',Old tax = '
7844                                || l_oldtax
7845                               );
7846             END IF;
7847 
7848             l_covd_rec.tax_amount :=
7849                oks_extwar_util_pvt.round_currency_amt
7850                                            (l_newtax,
7851                                             p_kdtl_tbl (l_ctr).service_currency
7852                                            );
7853             l_covd_rec.negotiated_amount :=
7854                oks_extwar_util_pvt.round_currency_amt
7855                                            (l_newamt,
7856                                             p_kdtl_tbl (l_ctr).service_currency
7857                                            );
7858             l_covd_rec.list_price :=
7859                oks_extwar_util_pvt.round_currency_amt
7860                                            (  l_newamt
7861                                             / p_kdtl_tbl (l_ctr).old_cp_quantity,
7862                                             p_kdtl_tbl (l_ctr).service_currency
7863                                            );
7864 
7865             IF l_ste_code <> 'ENTERED'
7866             THEN
7867                l_clev_tbl_in (1).ID := p_kdtl_tbl (l_ctr).object_line_id;
7868                l_clev_tbl_in (1).date_terminated := l_termdt;
7869                l_clev_tbl_in (1).price_negotiated :=
7870                   oks_extwar_util_pvt.round_currency_amt
7871                                           (l_oldamt,
7872                                            p_kdtl_tbl (l_ctr).service_currency
7873                                           );
7874                l_clev_tbl_in (1).price_unit :=
7875                   oks_extwar_util_pvt.round_currency_amt
7876                                           (  p_kdtl_tbl (l_ctr).service_amount
7877                                            / p_kdtl_tbl (l_ctr).old_cp_quantity,
7878                                            p_kdtl_tbl (l_ctr).service_currency
7879                                           );
7880                l_clev_tbl_in (1).trn_code := 'REP';
7881                l_clev_tbl_in (1).term_cancel_source := 'IBREPLACE';
7882 
7883                get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
7884                l_clev_tbl_in (1).sts_code := l_sts_code;
7885 
7886                okc_contract_pub.update_contract_line
7887                                        (p_api_version            => l_api_version,
7888                                         p_init_msg_list          => l_init_msg_list,
7889                                         p_restricted_update      => okc_api.g_true,
7890                                         x_return_status          => l_return_status,
7891                                         x_msg_count              => x_msg_count,
7892                                         x_msg_data               => x_msg_data,
7893                                         p_clev_tbl               => l_clev_tbl_in,
7894                                         x_clev_tbl               => l_clev_tbl_out
7895                                        );
7896 
7897                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7898                THEN
7899                   fnd_log.STRING
7900                      (fnd_log.level_event,
7901                          g_module_current
7902                       || '.CREATE_CONTRACT_IBREPLACE.update_cov_lvl',
7903                          'okc_contract_pub.update_contract_line(Return status = '
7904                       || l_return_status
7905                       || 'count = '
7906                       || p_kdtl_tbl.COUNT
7907                       || ')'
7908                      );
7909                END IF;
7910 
7911                IF NOT l_return_status = okc_api.g_ret_sts_success
7912                THEN
7913                   RAISE g_exception_halt_validation;
7914                END IF;
7915 
7916                OPEN get_oks_line_dtls (p_kdtl_tbl (l_ctr).object_line_id);
7917 
7918                FETCH get_oks_line_dtls
7919                 INTO l_id, l_obj_version_num;
7920 
7921                CLOSE get_oks_line_dtls;
7922 
7923                l_klnv_tbl_in (1).ID := l_id;
7924                l_klnv_tbl_in (1).tax_amount :=
7925                   oks_extwar_util_pvt.round_currency_amt
7926                                            (l_oldtax,
7927                                             p_kdtl_tbl (l_ctr).service_currency
7928                                            );
7929                l_klnv_tbl_in (1).object_version_number := l_obj_version_num;
7930                oks_contract_line_pub.update_line
7931                                           (p_api_version        => l_api_version,
7932                                            p_init_msg_list      => l_init_msg_list,
7933                                            x_return_status      => l_return_status,
7934                                            x_msg_count          => x_msg_count,
7935                                            x_msg_data           => x_msg_data,
7936                                            p_klnv_tbl           => l_klnv_tbl_in,
7937                                            x_klnv_tbl           => l_klnv_tbl_out,
7938                                            p_validate_yn        => 'N'
7939                                           );
7940 
7941                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7942                THEN
7943                   fnd_log.STRING
7944                      (fnd_log.level_event,
7945                          g_module_current
7946                       || '.CREATE_CONTRACT_IBREPLACE.after_update.cov_lvl_tax',
7947                          'oks_contract_line_pub.update_line(Return status = '
7948                       || l_return_status
7949                       || ')'
7950                      );
7951                END IF;
7952 
7953                IF NOT l_return_status = 'S'
7954                THEN
7955                   okc_api.set_message (g_app_name,
7956                                        g_required_value,
7957                                        g_col_name_token,
7958                                        'OKS Contract COV LINE'
7959                                       );
7960                   RAISE g_exception_halt_validation;
7961                END IF;
7962 
7963                l_inst_dtls_tbl (l_ctr1).subline_date_terminated :=
7964                                            TRUNC (p_kdtl_tbl (l_ctr).prod_sdt);
7965             ELSE
7966                -- Cancel the line
7967 
7968 	      -- added for the bug # 6000133
7969 	      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
7970 
7971                oks_change_status_pvt.update_line_status
7972                           (x_return_status           => l_return_status,
7973                            x_msg_data                => x_msg_data,
7974                            x_msg_count               => x_msg_count,
7975                            p_init_msg_list           => 'F',
7976                            p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
7977                            p_cle_id                  => p_kdtl_tbl (l_ctr).object_line_id,
7978                            p_new_sts_code            => l_sts_code,
7979                            p_canc_reason_code        => 'REPLACE',
7980                            p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
7981                            p_old_ste_code            => 'ENTERED',
7982                            p_new_ste_code            => 'CANCELLED',
7983                            p_term_cancel_source      => 'IBREPLACE',
7984                            p_date_cancelled          => TRUNC (l_termdt),
7985                            p_comments                => NULL,
7986                            p_validate_status         => 'N'
7987                           );
7988 
7989                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7990                THEN
7991                   fnd_log.STRING
7992                      (fnd_log.level_event,
7993                       g_module_current || '.CREATE_CONTRACT_IBTERMINATE',
7994                          'okc_contract_pub.update_contract_line(Return status ='
7995                       || l_return_status
7996                       || ')'
7997                      );
7998                END IF;
7999 
8000                IF NOT l_return_status = okc_api.g_ret_sts_success
8001                THEN
8002                   RAISE g_exception_halt_validation;
8003                END IF;
8004 
8005                l_inst_dtls_tbl (l_ctr1).date_cancelled := TRUNC (l_termdt);
8006             END IF;
8007 
8008             get_sts_code (NULL,
8009                           p_kdtl_tbl (l_ctr).hdr_sts,
8010                           l_ste_code,
8011                           l_sts_code
8012                          );
8013             l_inst_dtls_tbl (l_ctr1).transaction_date :=
8014                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
8015             l_inst_dtls_tbl (l_ctr1).transaction_type := 'RPL';
8016             l_inst_dtls_tbl (l_ctr1).instance_amt_old :=
8017                                              p_kdtl_tbl (l_ctr).service_amount;
8018             l_inst_dtls_tbl (l_ctr1).instance_qty_old :=
8019                                                p_kdtl_tbl (l_ctr).new_quantity;
8020             l_inst_dtls_tbl (l_ctr1).old_contract_id :=
8021                                                      p_kdtl_tbl (l_ctr).hdr_id;
8022             l_inst_dtls_tbl (l_ctr1).old_contact_start_date :=
8023                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
8024             l_inst_dtls_tbl (l_ctr1).old_contract_end_date :=
8025                                                     p_kdtl_tbl (l_ctr).hdr_edt;
8026             l_inst_dtls_tbl (l_ctr1).old_service_line_id :=
8027                                             p_kdtl_tbl (l_ctr).service_line_id;
8028             l_inst_dtls_tbl (l_ctr1).old_service_start_date :=
8029                                                 p_kdtl_tbl (l_ctr).service_sdt;
8030             l_inst_dtls_tbl (l_ctr1).old_service_end_date :=
8031                                                 p_kdtl_tbl (l_ctr).service_edt;
8032             l_inst_dtls_tbl (l_ctr1).old_subline_id :=
8033                                              p_kdtl_tbl (l_ctr).object_line_id;
8034             l_inst_dtls_tbl (l_ctr1).old_subline_start_date :=
8035                                                    p_kdtl_tbl (l_ctr).prod_sdt;
8036             l_inst_dtls_tbl (l_ctr1).old_subline_end_date :=
8037                                                    p_kdtl_tbl (l_ctr).prod_edt;
8038             l_inst_dtls_tbl (l_ctr1).old_customer :=
8039                                                p_kdtl_tbl (l_ctr).cust_account;
8040             l_inst_dtls_tbl (l_ctr1).old_k_status := l_sts_code;
8041             --l_inst_dtls_tbl(l_ctr1).SUBLINE_DATE_TERMINATED   := TRUNC(p_kdtl_tbl( l_ctr ).prod_sdt);
8042             l_inst_dtls_tbl (l_ctr1).instance_id_new :=
8043                                                   p_kdtl_tbl (l_ctr).new_cp_id;
8044             l_inst_dtls_tbl (l_ctr1).instance_amt_new :=
8045                oks_extwar_util_pvt.round_currency_amt
8046                                            (l_oldamt,
8047                                             p_kdtl_tbl (l_ctr).service_currency
8048                                            );
8049             l_inst_dtls_tbl (l_ctr1).instance_qty_new :=
8050                                                p_kdtl_tbl (l_ctr).new_quantity;
8051             l_inst_dtls_tbl (l_ctr1).new_contract_id :=
8052                                                      p_kdtl_tbl (l_ctr).hdr_id;
8053             l_inst_dtls_tbl (l_ctr1).new_contact_start_date :=
8054                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
8055             l_inst_dtls_tbl (l_ctr1).new_contract_end_date :=
8056                                                     p_kdtl_tbl (l_ctr).hdr_edt;
8057             l_inst_dtls_tbl (l_ctr1).new_service_line_id :=
8058                                             p_kdtl_tbl (l_ctr).service_line_id;
8059             l_inst_dtls_tbl (l_ctr1).new_service_start_date :=
8060                                                 p_kdtl_tbl (l_ctr).service_sdt;
8061             l_inst_dtls_tbl (l_ctr1).new_service_end_date :=
8062                                                 p_kdtl_tbl (l_ctr).service_edt;
8063             l_inst_dtls_tbl (l_ctr1).new_subline_id :=
8064                                              p_kdtl_tbl (l_ctr).object_line_id;
8065             l_inst_dtls_tbl (l_ctr1).new_subline_start_date :=
8066                                                    p_kdtl_tbl (l_ctr).prod_sdt;
8067             l_inst_dtls_tbl (l_ctr1).new_subline_end_date :=
8068                                                    p_kdtl_tbl (l_ctr).prod_edt;
8069             l_inst_dtls_tbl (l_ctr1).new_customer :=
8070                                                p_kdtl_tbl (l_ctr).cust_account;
8071             l_inst_dtls_tbl (l_ctr1).new_k_status := l_sts_code;
8072 
8073             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
8074             THEN
8075                fnd_log.STRING (fnd_log.level_statement,
8076                                g_module_current
8077                                || '.CREATE_CONTRACT_IBREPLACE',
8078                                   'New End date = '
8079                                || l_newedt
8080                                || ',New start Date = '
8081                                || TRUNC (p_kdtl_tbl (l_ctr).prod_sdt)
8082                                || ',Old Amount= '
8083                                || l_oldamt
8084                                || 'New Amount = '
8085                                || l_newamt
8086                               );
8087             END IF;
8088 
8089             l_lineid := p_kdtl_tbl (l_ctr).service_line_id;
8090             l_inst_dtls_tbl (l_ctr1 + 1).new_service_line_id := l_lineid;
8091             l_inst_dtls_tbl (l_ctr1 + 1).new_service_start_date :=
8092                                                 p_kdtl_tbl (l_ctr).service_sdt;
8093             l_inst_dtls_tbl (l_ctr1 + 1).new_service_end_date :=
8094                                                 p_kdtl_tbl (l_ctr).service_edt;
8095 
8096             -- Fixed Bug 2500056  06-Aug-2002
8097             IF p_kdtl_tbl (l_ctr).lse_id = 18
8098             THEN
8099                l_covd_rec.rty_code := 'CONTRACTWARRANTYORDER';
8100             ELSE
8101                l_covd_rec.rty_code := 'CONTRACTSERVICESORDER';
8102             END IF;
8103             l_order_line_id := null;
8104             OPEN l_ordline_csr (p_kdtl_tbl (l_ctr).object_line_id);
8105 
8106             FETCH l_ordline_csr
8107              INTO l_order_line_id;
8108 
8109             CLOSE l_ordline_csr;
8110 
8111             l_covd_rec.order_line_id := l_order_line_id;
8112             OPEN l_serv_csr (p_kdtl_tbl (l_ctr).service_inventory_id);
8113 
8114             FETCH l_serv_csr
8115              INTO l_covd_rec.attach_2_line_desc;
8116 
8117             CLOSE l_serv_csr;
8118 
8119             IF p_kdtl_tbl (l_ctr).lse_id = 25
8120             THEN
8121                l_warranty_flag := 'E';
8122             ELSIF     p_kdtl_tbl (l_ctr).lse_id = 9
8123                   AND p_kdtl_tbl (l_ctr).scs_code = 'SERVICE'
8124             THEN
8125                l_warranty_flag := 'S';
8126             ELSIF p_kdtl_tbl (l_ctr).lse_id = 18
8127             THEN
8128                l_warranty_flag := 'W';
8129             ELSIF     p_kdtl_tbl (l_ctr).lse_id = 9
8130                   AND p_kdtl_tbl (l_ctr).scs_code = 'SUBSCRIPTION'
8131             THEN
8132                l_warranty_flag := 'SU';
8133             END IF;
8134 
8135             l_covd_rec.k_id := p_kdtl_tbl (l_ctr).hdr_id;
8136             l_covd_rec.attach_2_line_id := l_lineid;
8137             l_covd_rec.line_number := 1;
8138             l_covd_rec.customer_product_id := p_kdtl_tbl (l_ctr).new_cp_id;
8139             l_covd_rec.product_start_date := l_newsdt;
8140             l_covd_rec.product_end_date := TRUNC (l_newedt);
8141             l_covd_rec.quantity := p_kdtl_tbl (l_ctr).new_quantity;
8142             l_covd_rec.warranty_flag := l_warranty_flag;
8143             l_covd_rec.uom_code := p_kdtl_tbl (l_ctr).uom_code;
8144             l_covd_rec.currency_code := p_kdtl_tbl (l_ctr).service_currency;
8145             l_covd_rec.product_sts_code := p_kdtl_tbl (l_ctr).prod_sts_code;
8146             l_covd_rec.upg_orig_system_ref :=
8147                                         p_kdtl_tbl (l_ctr).upg_orig_system_ref;
8148             l_covd_rec.upg_orig_system_ref_id :=
8149                                      p_kdtl_tbl (l_ctr).upg_orig_system_ref_id;
8150             l_covd_rec.line_renewal_type :=
8151                                      p_kdtl_tbl (l_ctr).prod_line_renewal_type;
8152             l_covd_rec.prod_item_id := p_kdtl_tbl (l_ctr).new_inventory_item;
8153             l_covd_rec.price_uom := p_kdtl_tbl (l_ctr).price_uom_code;
8154             l_covd_rec.toplvl_uom_code := p_kdtl_tbl (l_ctr).toplvl_uom_code;
8155             --mchoudha added for bug#5233956
8156             l_covd_rec.toplvl_price_qty := p_kdtl_tbl (l_ctr).toplvl_price_qty;
8157             oks_extwarprgm_pvt.create_k_covered_levels
8158                                        (p_k_covd_rec         => l_covd_rec,
8159                                         p_price_attribs      => l_price_attribs_in,
8160                                         p_caller             => 'IB',
8161                                         x_order_error        => l_temp,
8162                                         x_covlvl_id          => l_covlvl_id,
8163                                         x_update_line        => l_update_line,
8164                                         x_return_status      => l_return_status,
8165                                         x_msg_count          => x_msg_count,
8166                                         x_msg_data           => x_msg_data
8167                                        );
8168 
8169             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
8170             THEN
8171                fnd_log.STRING
8172                   (fnd_log.level_event,
8173                       g_module_current
8174                    || '.CREATE_CONTRACT_IBREPLACE.create_cov_lvl',
8175                       'oks_extwarprgm_pvt.create_k_covered_levels(Return status = '
8176                    || l_return_status
8177                   );
8178             END IF;
8179 
8180             IF NOT l_return_status = 'S'
8181             THEN
8182                RAISE g_exception_halt_validation;
8183             END IF;
8184 
8185             IF l_ste_code = 'ENTERED'
8186             THEN
8187                -- UPdate topline price negotiated.
8188                UPDATE okc_k_lines_b
8189                   SET price_negotiated = price_negotiated + l_newamt
8190                 WHERE ID = l_lineid;
8191 
8192                -- Update header estimated amount
8193                UPDATE okc_k_headers_b
8194                   SET estimated_amount = estimated_amount + l_newamt
8195                 WHERE ID = p_kdtl_tbl (l_ctr).hdr_id;
8196 
8197                -- Update topline tax amount
8198                UPDATE oks_k_lines_b
8199                   SET tax_amount = tax_amount + l_newtax
8200                 WHERE cle_id = l_lineid;
8201 
8202                -- Update header tax amount
8203                UPDATE oks_k_headers_b
8204                   SET tax_amount = tax_amount + l_newtax
8205                 WHERE chr_id = p_kdtl_tbl (l_ctr).hdr_id;
8206             END IF;
8207 
8208             l_inst_dtls_tbl (l_ctr1 + 1).transaction_date :=
8209                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
8210             l_inst_dtls_tbl (l_ctr1 + 1).transaction_type := 'RPL';
8211             l_inst_dtls_tbl (l_ctr1 + 1).instance_amt_old :=
8212                                              p_kdtl_tbl (l_ctr).service_amount;
8213             l_inst_dtls_tbl (l_ctr1 + 1).instance_qty_old :=
8214                                                p_kdtl_tbl (l_ctr).new_quantity;
8215             l_inst_dtls_tbl (l_ctr1 + 1).old_contract_id :=
8216                                                      p_kdtl_tbl (l_ctr).hdr_id;
8217             l_inst_dtls_tbl (l_ctr1 + 1).old_contact_start_date :=
8218                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
8219             l_inst_dtls_tbl (l_ctr1 + 1).old_contract_end_date :=
8220                                                     p_kdtl_tbl (l_ctr).hdr_edt;
8221             l_inst_dtls_tbl (l_ctr1 + 1).old_service_line_id :=
8222                                             p_kdtl_tbl (l_ctr).service_line_id;
8223             l_inst_dtls_tbl (l_ctr1 + 1).old_service_start_date :=
8224                                                 p_kdtl_tbl (l_ctr).service_sdt;
8225             l_inst_dtls_tbl (l_ctr1 + 1).old_service_end_date :=
8226                                                 p_kdtl_tbl (l_ctr).service_edt;
8227             l_inst_dtls_tbl (l_ctr1 + 1).old_subline_id :=
8228                                              p_kdtl_tbl (l_ctr).object_line_id;
8229             l_inst_dtls_tbl (l_ctr1 + 1).old_subline_start_date :=
8230                                                    p_kdtl_tbl (l_ctr).prod_sdt;
8231             l_inst_dtls_tbl (l_ctr1 + 1).old_subline_end_date :=
8232                                                    p_kdtl_tbl (l_ctr).prod_edt;
8233             l_inst_dtls_tbl (l_ctr1 + 1).old_customer :=
8234                                                p_kdtl_tbl (l_ctr).cust_account;
8235             l_inst_dtls_tbl (l_ctr1 + 1).old_k_status := l_sts_code;
8236             l_inst_dtls_tbl (l_ctr1 + 1).subline_date_terminated := NULL;
8237             l_inst_dtls_tbl (l_ctr1 + 1).instance_id_new :=
8238                                                   p_kdtl_tbl (l_ctr).new_cp_id;
8239             l_inst_dtls_tbl (l_ctr1 + 1).instance_amt_new :=
8240                oks_extwar_util_pvt.round_currency_amt
8241                                            (l_newamt,
8242                                             p_kdtl_tbl (l_ctr).service_currency
8243                                            );
8244             l_inst_dtls_tbl (l_ctr1 + 1).instance_qty_new :=
8245                                                p_kdtl_tbl (l_ctr).new_quantity;
8246             l_inst_dtls_tbl (l_ctr1 + 1).new_contract_id :=
8247                                                      p_kdtl_tbl (l_ctr).hdr_id;
8248             l_inst_dtls_tbl (l_ctr1 + 1).new_contact_start_date :=
8249                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
8250             l_inst_dtls_tbl (l_ctr1 + 1).new_contract_end_date :=
8251                                                     p_kdtl_tbl (l_ctr).hdr_edt;
8252             l_inst_dtls_tbl (l_ctr1 + 1).new_subline_id := l_covlvl_id;
8253             l_inst_dtls_tbl (l_ctr1 + 1).new_subline_start_date :=
8254                                            TRUNC (p_kdtl_tbl (l_ctr).prod_sdt);
8255             l_inst_dtls_tbl (l_ctr1 + 1).new_subline_end_date :=
8256                                                               TRUNC (l_newedt);
8257             l_inst_dtls_tbl (l_ctr1 + 1).new_customer :=
8258                                                p_kdtl_tbl (l_ctr).cust_account;
8259             l_inst_dtls_tbl (l_ctr1 + 1).new_k_status := l_sts_code;
8260 
8261             -------Billing Schedule
8262             IF p_kdtl_tbl (l_ctr).lse_id IN (9, 25)
8263             THEN                       -- added subscription contract category
8264                oks_bill_sch.adjust_replace_product_bs
8265                             (p_old_cp_id          => p_kdtl_tbl (l_ctr).object_line_id,
8266                              p_new_cp_id          => l_covlvl_id,
8267                              x_return_status      => l_return_status,
8268                              x_msg_count          => x_msg_count,
8269                              x_msg_data           => x_msg_data
8270                             );
8271 
8272                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
8273                THEN
8274                   fnd_log.STRING
8275                      (fnd_log.level_event,
8276                          g_module_current
8277                       || '.CREATE_CONTRACT_IBREPLACE.OKS_BILL_SCH.ADJUST_REPLACE_PRODUCT_BS',
8278                          'ADJUST_REPLACE_PRODUCT_BS(Return status = '
8279                       || l_return_status
8280                      );
8281                END IF;
8282 
8283                IF NOT l_return_status = 'S'
8284                THEN
8285                   RAISE g_exception_halt_validation;
8286                END IF;
8287             END IF;
8288 
8289             l_create_oper_instance := 'N';
8290 
8291             IF    l_opr_instance_id IS NULL
8292                OR l_target_chr_id <> p_kdtl_tbl (l_ctr).hdr_id
8293             THEN
8294                l_target_chr_id := p_kdtl_tbl (l_ctr).hdr_id;
8295                l_create_oper_instance := 'Y';
8296             END IF;
8297 
8298             create_transaction_source
8299                         (p_create_opr_inst       => l_create_oper_instance,
8300                          p_source_code           => 'REPLACE',
8301                          p_target_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
8302                          p_source_line_id        => p_kdtl_tbl (l_ctr).object_line_id,
8303                          p_source_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
8304                          p_target_line_id        => l_covlvl_id,
8305                          x_oper_instance_id      => l_opr_instance_id,
8306                          x_return_status         => l_return_status,
8307                          x_msg_count             => x_msg_count,
8308                          x_msg_data              => x_msg_data
8309                         );
8310 
8311             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
8312             THEN
8313                fnd_log.STRING
8314                      (fnd_log.level_event,
8315                          g_module_current
8316                       || '.CREATE_CONTRACT_IBREPLACE.Create_transaction_source',
8317                          'ADJUST_REPLACE_PRODUCT_BS(Return status = '
8318                       || l_return_status
8319                      );
8320             END IF;
8321 
8322             IF NOT l_return_status = 'S'
8323             THEN
8324                RAISE g_exception_halt_validation;
8325             END IF;
8326 
8327             create_source_links
8328                             (p_create_opr_inst       => l_create_oper_instance,
8329                              p_source_code           => 'REPLACE',
8330                              p_target_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
8331                              p_line_id               => p_kdtl_tbl (l_ctr).object_line_id,
8332                              p_target_line_id        => l_covlvl_id,
8333                              p_txn_date              => p_kdtl_tbl (l_ctr).transaction_date,
8334                              x_oper_instance_id      => l_renewal_opr_instance_id,
8335                              x_return_status         => l_return_status,
8336                              x_msg_count             => x_msg_count,
8337                              x_msg_data              => x_msg_data
8338                             );
8339 
8340             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
8341             THEN
8342                fnd_log.STRING
8343                            (fnd_log.level_event,
8344                                g_module_current
8345                             || '.CREATE_CONTRACT_IBREPLACE.Create_source_links',
8346                                'ADJUST_REPLACE_PRODUCT_BS(Return status = '
8347                             || l_return_status
8348                            );
8349             END IF;
8350 
8351             IF NOT l_return_status = 'S'
8352             THEN
8353                RAISE g_exception_halt_validation;
8354             END IF;
8355 
8356             IF l_inst_dtls_tbl.COUNT <> 0
8357             THEN
8358                IF l_old_cp_id <> p_kdtl_tbl (l_ctr).old_cp_id
8359                THEN
8360                   OPEN l_refnum_csr (p_kdtl_tbl (l_ctr).old_cp_id);
8361 
8362                   FETCH l_refnum_csr
8363                    INTO l_ref_num;
8364 
8365                   CLOSE l_refnum_csr;
8366 
8367                   l_parameters :=
8368                         ' Old CP :'
8369                      || p_kdtl_tbl (l_ctr).old_cp_id
8370                      || ','
8371                      || 'Item Id:'
8372                      || p_kdtl_tbl (l_ctr).prod_inventory_item
8373                      || ','
8374                      || 'Old Quantity:'
8375                      || p_kdtl_tbl (l_ctr).current_cp_quantity
8376                      || ','
8377                      || 'Transaction type :'
8378                      || 'RPL'
8379                      || ','
8380                      || ' Transaction date :'
8381                      || TRUNC(p_kdtl_tbl (l_ctr).transaction_date)
8382                      || ','
8383                      || 'New CP:'
8384                      || p_kdtl_tbl (l_ctr).new_cp_id;
8385                   --oks_instance_history
8386                   l_old_cp_id := p_kdtl_tbl (l_ctr).old_cp_id;
8387                   l_insthist_rec.instance_id := p_kdtl_tbl (l_ctr).old_cp_id;
8388                   l_insthist_rec.transaction_type := 'RPL';
8389                   l_insthist_rec.transaction_date :=
8390                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
8391                   l_insthist_rec.reference_number := l_ref_num;
8392                   l_insthist_rec.PARAMETERS := l_parameters;
8393                   oks_ins_pvt.insert_row (p_api_version        => 1.0,
8394                                           p_init_msg_list      => 'T',
8395                                           x_return_status      => l_return_status,
8396                                           x_msg_count          => x_msg_count,
8397                                           x_msg_data           => x_msg_data,
8398                                           p_insv_rec           => l_insthist_rec,
8399                                           x_insv_rec           => x_insthist_rec
8400                                          );
8401 
8402                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
8403                      )
8404                   THEN
8405                      fnd_log.STRING
8406                                 (fnd_log.level_event,
8407                                  g_module_current || '.CREATE_IBREPLACE',
8408                                     'oks_ins_pvt.insert_row(Return status = '
8409                                  || l_return_status
8410                                  || ')'
8411                                 );
8412                   END IF;
8413 
8414                   x_return_status := l_return_status;
8415 
8416                   IF NOT l_return_status = okc_api.g_ret_sts_success
8417                   THEN
8418                      x_return_status := l_return_status;
8419                      RAISE g_exception_halt_validation;
8420                   END IF;
8421 
8422                   l_instparent_id := x_insthist_rec.ID;
8423                END IF;
8424 
8425                FOR i IN l_inst_dtls_tbl.FIRST .. l_inst_dtls_tbl.LAST
8426                LOOP
8427                   l_inst_dtls_tbl (i).ins_id := l_instparent_id;
8428                END LOOP;
8429 
8430                --oks_inst_history_details
8431                oks_ihd_pvt.insert_row (p_api_version        => 1.0,
8432                                        p_init_msg_list      => 'T',
8433                                        x_return_status      => l_return_status,
8434                                        x_msg_count          => x_msg_count,
8435                                        x_msg_data           => x_msg_data,
8436                                        p_ihdv_tbl           => l_inst_dtls_tbl,
8437                                        x_ihdv_tbl           => x_inst_dtls_tbl
8438                                       );
8439 
8440                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
8441                THEN
8442                   fnd_log.STRING
8443                                 (fnd_log.level_event,
8444                                  g_module_current || '.CREATE_K_IBREPLACE',
8445                                     'oks_ihd_pvt.insert_row(Return status = '
8446                                  || l_return_status
8447                                  || ')'
8448                                 );
8449                END IF;
8450 
8451                x_return_status := l_return_status;
8452 
8453                IF NOT l_return_status = okc_api.g_ret_sts_success
8454                THEN
8455                   x_return_status := l_return_status;
8456                   RAISE g_exception_halt_validation;
8457                END IF;
8458             END IF;
8459 
8460             launch_workflow (   'INSTALL BASE ACTIVITY : REPLACE '
8461                              || fnd_global.local_chr (10)
8462                              || 'Contract Number       :         '
8463                              || get_contract_number (p_kdtl_tbl (l_ctr).hdr_id)
8464                              || fnd_global.local_chr (10)
8465                              || 'Old Cust Product      :         '
8466                              || p_kdtl_tbl (l_ctr).old_cp_id
8467                              || fnd_global.local_chr (10)
8468                              || 'Replaced Cust Product :         '
8469                              || p_kdtl_tbl (l_ctr).new_cp_id
8470                             );
8471             --END IF;
8472             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
8473             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
8474             l_ctr1 := l_ctr1 + 2;
8475          END LOOP;
8476       END IF;
8477    EXCEPTION
8478       WHEN g_exception_halt_validation
8479       THEN
8480          x_return_status := l_return_status;
8481          NULL;
8482       WHEN OTHERS
8483       THEN
8484          x_return_status := okc_api.g_ret_sts_unexp_error;
8485          okc_api.set_message (g_app_name,
8486                               g_unexpected_error,
8487                               g_sqlcode_token,
8488                               SQLCODE,
8489                               g_sqlerrm_token,
8490                               SQLERRM
8491                              );
8492    END;
8493 
8494    PROCEDURE create_contract_ibreturn (
8495       p_kdtl_tbl        IN              contract_tbl,
8496       x_return_status   OUT NOCOPY      VARCHAR2,
8497       x_msg_count       OUT NOCOPY      NUMBER,
8498       x_msg_data        OUT NOCOPY      VARCHAR2
8499    )
8500    IS
8501       CURSOR l_serv_csr (p_serv_id NUMBER)
8502       IS
8503          SELECT t.description NAME
8504            FROM mtl_system_items_tl t
8505           WHERE t.inventory_item_id = p_serv_id
8506             AND t.LANGUAGE = USERENV ('LANG')
8507             AND ROWNUM < 2;
8508 
8509       CURSOR l_refnum_csr (p_cp_id NUMBER)
8510       IS
8511          SELECT instance_number
8512            FROM csi_item_instances
8513           WHERE instance_id = p_cp_id;
8514 
8515       Cursor l_hdr_sts_csr(p_hdr_id Number)
8516       Is
8517       Select sts_code
8518       From Okc_k_headers_all_b
8519       WHere id = p_hdr_id;
8520 
8521       l_hdr_status               Varchar2(240);
8522 
8523       l_ref_num                  VARCHAR2 (30);
8524       x_inst_dtls_tbl            oks_ihd_pvt.ihdv_tbl_type;
8525       l_inst_dtls_tbl            oks_ihd_pvt.ihdv_tbl_type;
8526       l_instparent_id            NUMBER;
8527       l_old_cp_id                NUMBER;
8528       l_insthist_rec             oks_ins_pvt.insv_rec_type;
8529       x_insthist_rec             oks_ins_pvt.insv_rec_type;
8530       l_parameters               VARCHAR2 (2000);
8531       l_price_attribs_in         oks_extwarprgm_pvt.pricing_attributes_type;
8532       --SalesCredit
8533       l_salescredit_tbl_line     oks_extwarprgm_pvt.salescredit_tbl;
8534       l_salescredit_tbl_hdr      oks_extwarprgm_pvt.salescredit_tbl;
8535       l_line_rec                 k_line_service_rec_type;
8536       l_covd_rec                 k_line_covered_level_rec_type;
8537       l_available_yn             CHAR;
8538       l_return_status            VARCHAR2 (5)     := okc_api.g_ret_sts_success;
8539       l_chrid                    NUMBER                                := NULL;
8540       l_lineid                   NUMBER                                := NULL;
8541       l_days                     NUMBER                                   := 0;
8542       l_day1price                NUMBER                                   := 0;
8543       l_oldamt                   NUMBER                                   := 0;
8544       l_ctr                      NUMBER                                   := 0;
8545       l_terminate_rec            okc_terminate_pvt.terminate_in_cle_rec;
8546       --Contract Line Table
8547       l_clev_tbl_in              okc_contract_pub.clev_tbl_type;
8548       l_clev_tbl_out             okc_contract_pub.clev_tbl_type;
8549       l_api_version     CONSTANT NUMBER                                 := 1.0;
8550       l_init_msg_list   CONSTANT VARCHAR2 (1)               := okc_api.g_false;
8551       l_retdt                    DATE;
8552       l_ste_code                 VARCHAR2 (30);
8553       l_sts_code                 VARCHAR2 (30);
8554       l_suppress_credit          VARCHAR2 (2)                           := 'N';
8555       l_chrv_tbl_in              okc_contract_pub.chrv_tbl_type;
8556       l_chrv_tbl_out             okc_contract_pub.chrv_tbl_type;
8557       l_full_credit              VARCHAR2 (2)                           := 'N';
8558       l_rnrl_rec_out             oks_renew_util_pvt.rnrl_rec_type;
8559       l_service_name             VARCHAR2 (2000);
8560       date_terminated            DATE;
8561       date_cancelled             DATE;
8562       l_alllines_terminated      VARCHAR2 (1);
8563       l_alllines_cancelled       VARCHAR2 (1);
8564       l_term_date_flag           VARCHAR2 (1);
8565       l_credit_amount            VARCHAR2 (30);
8566    BEGIN
8567       x_return_status := okc_api.g_ret_sts_success;
8568       l_old_cp_id := 0;
8569 
8570       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
8571       THEN
8572          fnd_log.STRING (fnd_log.level_event,
8573                          g_module_current || '.Create_Contract_IBRETURN.',
8574                          'count = ' || p_kdtl_tbl.COUNT || ')'
8575                         );
8576       END IF;
8577 
8578       IF p_kdtl_tbl.COUNT > 0
8579       THEN
8580          l_ctr := p_kdtl_tbl.FIRST;
8581 
8582          LOOP
8583 
8584             get_sts_code (NULL,
8585                           p_kdtl_tbl (l_ctr).hdr_sts,
8586                           l_ste_code,
8587                           l_sts_code
8588                          );
8589 
8590             IF l_ste_code = 'HOLD'
8591             THEN
8592                IF fnd_log.level_error >= fnd_log.g_current_runtime_level
8593                THEN
8594                   fnd_log.STRING (fnd_log.level_error,
8595                                      g_module_current
8596                                   || '.CREATE_CONTRACT_IBRETURN.ERROR',
8597                                      ' Contract '
8598                                   || p_kdtl_tbl (l_ctr).contract_number
8599                                   || ' in QA_HOLD status'
8600                                  );
8601                END IF;
8602 
8603                l_return_status := okc_api.g_ret_sts_error;
8604                okc_api.set_message (g_app_name,
8605                                     g_invalid_value,
8606                                     g_col_name_token,
8607                                        'Return not allowed. Contract '
8608                                     || p_kdtl_tbl (l_ctr).contract_number
8609                                     || 'is in QA_HOLD status'
8610                                    );
8611                RAISE g_exception_halt_validation;
8612             END IF;
8613 
8614             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
8615             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
8616          END LOOP;
8617       END IF;
8618 
8619       IF p_kdtl_tbl.COUNT > 0
8620       THEN
8621          l_ctr := p_kdtl_tbl.FIRST;
8622 
8623          LOOP
8624             --Fix for Bug 5406201
8625             l_clev_tbl_in.delete;
8626             l_chrv_tbl_in.delete;
8627 
8628             l_inst_dtls_tbl.DELETE;
8629 
8630             okc_context.set_okc_org_context
8631                                            (p_kdtl_tbl (l_ctr).hdr_org_id,
8632                                             p_kdtl_tbl (l_ctr).organization_id
8633                                            );
8634             get_sts_code (NULL,
8635                           p_kdtl_tbl (l_ctr).prod_sts_code,
8636                           l_ste_code,
8637                           l_sts_code
8638                          );
8639 
8640             IF l_ste_code <> 'ENTERED'
8641             THEN
8642                l_retdt := p_kdtl_tbl (l_ctr).termination_date;
8643 
8644                IF (TRUNC (l_retdt) <= TRUNC (p_kdtl_tbl (l_ctr).prod_sdt))
8645                THEN
8646                   l_retdt := p_kdtl_tbl (l_ctr).prod_sdt;
8647                END IF;
8648 
8649                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
8650                THEN
8651                   fnd_log.STRING (fnd_log.level_statement,
8652                                      g_module_current
8653                                   || '.CREATE_CONTRACT_IBRETURN',
8654                                      'Credit option = '
8655                                   || p_kdtl_tbl (l_ctr).raise_credit
8656                                  );
8657                END IF;
8658 
8659                IF TRUNC (p_kdtl_tbl (l_ctr).prod_edt) < TRUNC (l_retdt)
8660                THEN
8661                   l_retdt := p_kdtl_tbl (l_ctr).prod_edt + 1;
8662                   l_suppress_credit := 'Y';
8663                   l_term_date_flag := 'Y';
8664                ELSE
8665                   IF UPPER (p_kdtl_tbl (l_ctr).raise_credit) = 'FULL'
8666                   THEN
8667                      l_full_credit := 'Y';
8668                      --l_retdt := p_kdtl_tbl( l_ctr ).prod_sdt;
8669                      l_suppress_credit := 'N';
8670                   ELSIF UPPER (p_kdtl_tbl (l_ctr).raise_credit) = 'NONE'
8671                   THEN
8672                      l_suppress_credit := 'Y';
8673                      l_full_credit := 'N';
8674                   ELSIF UPPER (p_kdtl_tbl (l_ctr).raise_credit) = 'CALCULATED'
8675                   THEN
8676                      l_suppress_credit := 'N';
8677                      l_full_credit := 'N';
8678                   ELSIF p_kdtl_tbl (l_ctr).raise_credit IS NULL
8679                   THEN
8680                      -- Get the credit option from gcd
8681                      l_credit_amount :=
8682                         oks_ib_util_pvt.get_credit_option
8683                                    (p_party_id              => p_kdtl_tbl
8684                                                                         (l_ctr).party_id,
8685                                     p_org_id                => p_kdtl_tbl
8686                                                                         (l_ctr).hdr_org_id,
8687                                     p_transaction_date      => TRUNC (l_retdt)
8688                                    );
8689 
8690                      IF fnd_log.level_statement >=
8691                                                fnd_log.g_current_runtime_level
8692                      THEN
8693                         fnd_log.STRING (fnd_log.level_statement,
8694                                            g_module_current
8695                                         || '.CREATE_CONTRACT_IBRETURN',
8696                                            'Credit option from GCD = '
8697                                         || l_credit_amount
8698                                        );
8699                      END IF;
8700 
8701                      IF UPPER (l_credit_amount) = 'FULL'
8702                      THEN
8703                         l_full_credit := 'Y';
8704                         --l_retdt := p_kdtl_tbl( l_ctr ).prod_sdt;
8705                         l_suppress_credit := 'N';
8706                      ELSIF UPPER (l_credit_amount) = 'NONE'
8707                      THEN
8708                         l_suppress_credit := 'Y';
8709                         l_full_credit := 'N';
8710                      ELSIF l_credit_amount = 'CALCULATED'
8711                      THEN
8712                         l_suppress_credit := 'N';
8713                         l_full_credit := 'N';
8714                      END IF;
8715                   END IF;
8716                END IF;
8717 
8718                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
8719                THEN
8720                   fnd_log.STRING (fnd_log.level_statement,
8721                                      g_module_current
8722                                   || '.CREATE_CONTRACT_IBRETURN',
8723                                      'Suppress credit = '
8724                                   || l_suppress_credit
8725                                   || 'Full credit = '
8726                                   || l_full_credit
8727                                  );
8728                END IF;
8729 
8730                oks_bill_rec_pub.pre_terminate_cp
8731                                 (p_calledfrom                => -1,
8732                                  p_cle_id                    => p_kdtl_tbl
8733                                                                         (l_ctr).object_line_id,
8734                                  p_termination_date          => TRUNC (l_retdt),
8735                                  p_terminate_reason          => 'RMA',
8736                                  p_override_amount           => NULL,
8737                                  p_con_terminate_amount      => NULL,
8738                                  p_termination_amount        => NULL,
8739                                  p_suppress_credit           => l_suppress_credit,
8740                                  --p_existing_credit               => 0,
8741                                  p_full_credit               => l_full_credit,
8742                                  p_term_date_flag            => l_term_date_flag,
8743                                  p_term_cancel_source        => 'IBRETURN',
8744                                  x_return_status             => l_return_status
8745                                 );
8746 
8747                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
8748                THEN
8749                   fnd_log.STRING
8750                      (fnd_log.level_event,
8751                          g_module_current
8752                       || '.CREATE_CONTRACT_IBRETURN.terminate_cp',
8753                          'oks_bill_rec_pub.pre_terminate_cp(Return status = '
8754                       || l_return_status
8755                       || ')'
8756                      );
8757                END IF;
8758 
8759                IF NOT l_return_status = okc_api.g_ret_sts_success
8760                THEN
8761                   RAISE g_exception_halt_validation;
8762                END IF;
8763 
8764                l_inst_dtls_tbl (1).subline_date_terminated := TRUNC (l_retdt);
8765                -- If all the sublines are terminated terminate the top line
8766                oks_ib_util_pvt.check_termcancel_lines
8767                                            (p_kdtl_tbl (l_ctr).service_line_id,
8768                                             'SL',
8769                                             'T',
8770                                             date_terminated
8771                                            );
8772 
8773                IF date_terminated IS NOT NULL
8774                THEN
8775                   get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
8776 
8777                   l_clev_tbl_in (1).ID := p_kdtl_tbl (l_ctr).service_line_id;
8778                   l_clev_tbl_in (1).date_terminated := TRUNC (date_terminated);
8779                   l_clev_tbl_in (1).trn_code := 'RMA';
8780                   l_clev_tbl_in (1).term_cancel_source := 'IBRETURN';
8781 
8782                   If TRUNC (date_terminated)<= trunc(sysdate) Then
8783 	                    l_clev_tbl_in (1).sts_code  := l_sts_code;
8784                   End If;
8785 
8786                   okc_contract_pub.update_contract_line
8787                                       (p_api_version            => l_api_version,
8788                                        p_init_msg_list          => l_init_msg_list,
8789                                        p_restricted_update      => okc_api.g_true,
8790                                        x_return_status          => l_return_status,
8791                                        x_msg_count              => x_msg_count,
8792                                        x_msg_data               => x_msg_data,
8793                                        p_clev_tbl               => l_clev_tbl_in,
8794                                        x_clev_tbl               => l_clev_tbl_out
8795                                       );
8796 
8797                   IF NOT l_return_status = okc_api.g_ret_sts_success
8798                   THEN
8799                      RAISE g_exception_halt_validation;
8800                   END IF;
8801                END IF;
8802 
8803                date_terminated := NULL;
8804                -- If all the toplines are terminated, terminate the header
8805                oks_ib_util_pvt.check_termcancel_lines
8806                                                     (p_kdtl_tbl (l_ctr).hdr_id,
8807                                                      'TL',
8808                                                      'T',
8809                                                      date_terminated
8810                                                     );
8811 
8812                IF date_terminated IS NOT NULL
8813                THEN
8814                   get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
8815 
8816                   l_chrv_tbl_in (1).ID := p_kdtl_tbl (l_ctr).hdr_id;
8817                   l_chrv_tbl_in (1).date_terminated := TRUNC (date_terminated);
8818                   l_chrv_tbl_in (1).trn_code := 'RMA';
8819                   l_chrv_tbl_in (1).term_cancel_source := 'IBRETURN';
8820 
8821                   If TRUNC (date_terminated)<= trunc(sysdate) Then
8822                         l_chrv_tbl_in (1).sts_code := l_sts_code;
8823                   End If;
8824 
8825 
8826                   okc_contract_pub.update_contract_header
8827                                       (p_api_version            => l_api_version,
8828                                        p_init_msg_list          => l_init_msg_list,
8829                                        p_restricted_update      => okc_api.g_true,
8830                                        x_return_status          => l_return_status,
8831                                        x_msg_count              => x_msg_count,
8832                                        x_msg_data               => x_msg_data,
8833                                        p_chrv_tbl               => l_chrv_tbl_in,
8834                                        x_chrv_tbl               => l_chrv_tbl_out
8835                                       );
8836 
8837                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
8838                      )
8839                   THEN
8840                      fnd_log.STRING
8841                         (fnd_log.level_event,
8842                             g_module_current
8843                          || '.CREATE_CONTRACT_IBRETURN.external_call.after',
8844                             'okc_contract_pub.update_contract_header(Return status =
8845                                                    '
8846                          || l_return_status
8847                          || ')'
8848                         );
8849                   END IF;
8850 
8851                   IF NOT l_return_status = okc_api.g_ret_sts_success
8852                   THEN
8853                      RAISE g_exception_halt_validation;
8854                   END IF;
8855                END IF;
8856             ELSIF l_ste_code = 'ENTERED'
8857             THEN
8858                l_retdt := p_kdtl_tbl (l_ctr).termination_date;
8859 
8860                IF TRUNC (p_kdtl_tbl (l_ctr).prod_edt) < TRUNC (l_retdt)
8861                THEN
8862                   l_retdt := p_kdtl_tbl (l_ctr).prod_edt + 1;
8863                END IF;
8864 
8865                --Cancel the the entered lines.
8866 
8867 	      -- added for the bug # 6000133
8868 	      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
8869 
8870                oks_change_status_pvt.update_line_status
8871                            (x_return_status           => l_return_status,
8872                             x_msg_data                => x_msg_data,
8873                             x_msg_count               => x_msg_count,
8874                             p_init_msg_list           => 'F',
8875                             p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
8876                             p_cle_id                  => p_kdtl_tbl (l_ctr).object_line_id,
8877                             p_new_sts_code            => l_sts_code,
8878                             p_canc_reason_code        => 'RETURN',
8879                             p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
8880                             p_old_ste_code            => 'ENTERED',
8881                             p_new_ste_code            => 'CANCELLED',
8882                             p_term_cancel_source      => 'IBRETURN',
8883                             p_date_cancelled          => TRUNC (l_retdt),
8884                             p_comments                => NULL,
8885                             p_validate_status         => 'N'
8886                            );
8887 
8888                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
8889                THEN
8890                   fnd_log.STRING
8891                      (fnd_log.level_event,
8892                       g_module_current || '.CREATE_CONTRACT_IBRETURN',
8893                          'oks_change_status_pvt.Update_line_status (Return status ='
8894                       || l_return_status
8895                       || ')'
8896                      );
8897                END IF;
8898 
8899                IF NOT l_return_status = okc_api.g_ret_sts_success
8900                THEN
8901                   RAISE g_exception_halt_validation;
8902                END IF;
8903 
8904                l_inst_dtls_tbl (1).date_cancelled := TRUNC (l_retdt);
8905                date_cancelled := NULL;
8906                oks_ib_util_pvt.check_termcancel_lines
8907                                            (p_kdtl_tbl (l_ctr).service_line_id,
8908                                             'SL',
8909                                             'C',
8910                                             date_cancelled
8911                                            );
8912 
8913                IF date_cancelled IS NOT NULL
8914                THEN
8915 
8916 	      -- added for the bug # 6000133
8917 	      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
8918 
8919                   oks_change_status_pvt.update_line_status
8920                           (x_return_status           => l_return_status,
8921                            x_msg_data                => x_msg_data,
8922                            x_msg_count               => x_msg_count,
8923                            p_init_msg_list           => 'F',
8924                            p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
8925                            p_cle_id                  => p_kdtl_tbl (l_ctr).service_line_id,
8926                            p_new_sts_code            => l_sts_code,
8927                            p_canc_reason_code        => 'RETURN',
8928                            p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
8929                            p_old_ste_code            => 'ENTERED',
8930                            p_new_ste_code            => 'CANCELLED',
8931                            p_term_cancel_source      => 'IBRETURN',
8932                            p_date_cancelled          => TRUNC (date_cancelled),
8933                            p_comments                => NULL,
8934                            p_validate_status         => 'N'
8935                           );
8936 
8937                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
8938                      )
8939                   THEN
8940                      fnd_log.STRING
8941                         (fnd_log.level_event,
8942                          g_module_current || '.CREATE_CONTRACT_IBRETURN',
8943                             'oks_change_status_pvt.Update_line_status (Return status = '
8944                          || l_return_status
8945                          || ')'
8946                         );
8947                   END IF;
8948 
8949                   IF NOT l_return_status = okc_api.g_ret_sts_success
8950                   THEN
8951                      RAISE g_exception_halt_validation;
8952                   END IF;
8953                END IF;
8954 
8955                date_cancelled := NULL;
8956                oks_ib_util_pvt.check_termcancel_lines
8957                                                     (p_kdtl_tbl (l_ctr).hdr_id,
8958                                                      'TL',
8959                                                      'C',
8960                                                      date_cancelled
8961                                                     );
8962 
8963                IF date_cancelled IS NOT NULL
8964                THEN
8965 
8966 	      -- added for the bug # 6000133
8967 	      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
8968 
8969                   oks_change_status_pvt.update_header_status
8970                           (x_return_status           => l_return_status,
8971                            x_msg_data                => x_msg_data,
8972                            x_msg_count               => x_msg_count,
8973                            p_init_msg_list           => 'F',
8974                            p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
8975                            p_new_sts_code            => l_sts_code,
8976                            p_canc_reason_code        => 'RETURN',
8977                            p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
8978                            p_comments                => NULL,
8979                            p_term_cancel_source      => 'IBRETURN',
8980                            p_date_cancelled          => TRUNC (date_cancelled),
8981                            p_validate_status         => 'N'
8982                           );
8983 
8984                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
8985                      )
8986                   THEN
8987                      fnd_log.STRING
8988                         (fnd_log.level_event,
8989                          g_module_current || '.CREATE_CONTRACT_IBRETURN',
8990                             'OKS_WF_K_PROCESS_PVT.cancel_contract(Return status =
8991                                                     '
8992                          || l_return_status
8993                          || ')'
8994                         );
8995                   END IF;
8996 
8997                   IF NOT l_return_status = okc_api.g_ret_sts_success
8998                   THEN
8999                      RAISE g_exception_halt_validation;
9000                   END IF;
9001                END IF;
9002             END IF;
9003 
9004             get_sts_code (NULL,
9005                           p_kdtl_tbl (l_ctr).hdr_sts,
9006                           l_ste_code,
9007                           l_sts_code
9008                          );
9009             --x_inst_dtls_tbl(l_ctr).INST_PARENT_ID            := p_retn_rec.old_cp_id;
9010             l_inst_dtls_tbl (1).transaction_date := TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
9011             l_inst_dtls_tbl (1).transaction_type := 'RET';
9012             l_inst_dtls_tbl (1).system_id := NULL;
9013             l_inst_dtls_tbl (1).instance_id_new := NULL;
9014             l_inst_dtls_tbl (1).instance_qty_old :=
9015                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
9016             l_inst_dtls_tbl (1).instance_qty_new :=
9017                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
9018             l_inst_dtls_tbl (1).instance_amt_old :=
9019                                              p_kdtl_tbl (l_ctr).service_amount;
9020             l_inst_dtls_tbl (1).instance_amt_new :=
9021                                              p_kdtl_tbl (l_ctr).service_amount;
9022             l_inst_dtls_tbl (1).old_contract_id := p_kdtl_tbl (l_ctr).hdr_id;
9023             l_inst_dtls_tbl (1).old_contact_start_date :=
9024                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
9025             l_inst_dtls_tbl (1).old_contract_end_date :=
9026                                                     p_kdtl_tbl (l_ctr).hdr_edt;
9027             l_inst_dtls_tbl (1).new_contract_id := p_kdtl_tbl (l_ctr).hdr_id;
9028             l_inst_dtls_tbl (1).new_contact_start_date :=
9029                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
9030             l_inst_dtls_tbl (1).new_contract_end_date :=
9031                                                     p_kdtl_tbl (l_ctr).hdr_edt;
9032             l_inst_dtls_tbl (1).old_service_line_id :=
9033                                             p_kdtl_tbl (l_ctr).service_line_id;
9034             l_inst_dtls_tbl (1).old_service_start_date :=
9035                                                 p_kdtl_tbl (l_ctr).service_sdt;
9036             l_inst_dtls_tbl (1).old_service_end_date :=
9037                                                 p_kdtl_tbl (l_ctr).service_edt;
9038             l_inst_dtls_tbl (1).new_service_line_id :=
9039                                             p_kdtl_tbl (l_ctr).service_line_id;
9040             l_inst_dtls_tbl (1).new_service_start_date :=
9041                                                 p_kdtl_tbl (l_ctr).service_sdt;
9042             l_inst_dtls_tbl (1).new_service_end_date :=
9043                                                 p_kdtl_tbl (l_ctr).service_edt;
9044             l_inst_dtls_tbl (1).old_subline_id :=
9045                                              p_kdtl_tbl (l_ctr).object_line_id;
9046             l_inst_dtls_tbl (1).old_subline_start_date :=
9047                                                    p_kdtl_tbl (l_ctr).prod_sdt;
9048             l_inst_dtls_tbl (1).old_subline_end_date :=
9049                                                    p_kdtl_tbl (l_ctr).prod_edt;
9050             l_inst_dtls_tbl (1).new_subline_id :=
9051                                              p_kdtl_tbl (l_ctr).object_line_id;
9052             l_inst_dtls_tbl (1).new_subline_start_date :=
9053                                                    p_kdtl_tbl (l_ctr).prod_sdt;
9054             l_inst_dtls_tbl (1).new_subline_end_date :=
9055                                                    p_kdtl_tbl (l_ctr).prod_edt;
9056             l_inst_dtls_tbl (1).old_customer :=
9057                                                p_kdtl_tbl (l_ctr).cust_account;
9058             l_inst_dtls_tbl (1).new_customer :=
9059                                                p_kdtl_tbl (l_ctr).cust_account;
9060             l_inst_dtls_tbl (1).old_k_status := l_sts_code;
9061             l_inst_dtls_tbl (1).new_k_status := l_sts_code;
9062 
9063             IF l_inst_dtls_tbl.COUNT <> 0
9064             THEN
9065                IF     l_instparent_id IS NULL
9066                   AND l_old_cp_id <> p_kdtl_tbl (l_ctr).old_cp_id
9067                THEN
9068                   OPEN l_refnum_csr (p_kdtl_tbl (l_ctr).old_cp_id);
9069 
9070                   FETCH l_refnum_csr
9071                    INTO l_ref_num;
9072 
9073                   CLOSE l_refnum_csr;
9074 
9075                   l_parameters :=
9076                         ' Old CP :'
9077                      || p_kdtl_tbl (l_ctr).old_cp_id
9078                      || ','
9079                      || 'Item Id:'
9080                      || p_kdtl_tbl (l_ctr).prod_inventory_item
9081                      || ','
9082                      || 'Old Quantity:'
9083                      || p_kdtl_tbl (l_ctr).current_cp_quantity
9084                      || ','
9085                      || 'Transaction type :'
9086                      || 'RET'
9087                      || ','
9088                      || ' Transaction date :'
9089                      || TRUNC(p_kdtl_tbl (l_ctr).transaction_date)
9090                      || ','
9091                      || 'New quantity:'
9092                      || p_kdtl_tbl (l_ctr).new_quantity;
9093                   --oks_instance_history
9094                   l_old_cp_id := p_kdtl_tbl (l_ctr).old_cp_id;
9095                   l_insthist_rec.instance_id := p_kdtl_tbl (l_ctr).old_cp_id;
9096                   l_insthist_rec.transaction_type := 'RET';
9097                   l_insthist_rec.transaction_date := TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
9098                   l_insthist_rec.reference_number := l_ref_num;
9099                   l_insthist_rec.PARAMETERS := l_parameters;
9100                   oks_ins_pvt.insert_row (p_api_version        => 1.0,
9101                                           p_init_msg_list      => 'T',
9102                                           x_return_status      => l_return_status,
9103                                           x_msg_count          => x_msg_count,
9104                                           x_msg_data           => x_msg_data,
9105                                           p_insv_rec           => l_insthist_rec,
9106                                           x_insv_rec           => x_insthist_rec
9107                                          );
9108 
9109                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
9110                      )
9111                   THEN
9112                      fnd_log.STRING
9113                                 (fnd_log.level_event,
9114                                  g_module_current || '.CREATE_K_IBRETURN',
9115                                     'oks_ins_pvt.insert_row(Return status = '
9116                                  || l_return_status
9117                                  || ')'
9118                                 );
9119                   END IF;
9120 
9121                   x_return_status := l_return_status;
9122 
9123                   IF NOT l_return_status = okc_api.g_ret_sts_success
9124                   THEN
9125                      x_return_status := l_return_status;
9126                      RAISE g_exception_halt_validation;
9127                   END IF;
9128 
9129                   l_instparent_id := x_insthist_rec.ID;
9130                END IF;
9131 
9132                l_inst_dtls_tbl (1).ins_id := l_instparent_id;
9133                --oks_inst_history_details
9134                oks_ihd_pvt.insert_row (p_api_version        => 1.0,
9135                                        p_init_msg_list      => 'T',
9136                                        x_return_status      => l_return_status,
9137                                        x_msg_count          => x_msg_count,
9138                                        x_msg_data           => x_msg_data,
9139                                        p_ihdv_tbl           => l_inst_dtls_tbl,
9140                                        x_ihdv_tbl           => x_inst_dtls_tbl
9141                                       );
9142 
9143                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
9144                THEN
9145                   fnd_log.STRING
9146                                 (fnd_log.level_event,
9147                                  g_module_current || '.CREATE_IBRETURN',
9148                                     'oks_ihd_pvt.insert_row(Return status = '
9149                                  || l_return_status
9150                                  || ')'
9151                                 );
9152                END IF;
9153 
9154                x_return_status := l_return_status;
9155 
9156                IF NOT l_return_status = okc_api.g_ret_sts_success
9157                THEN
9158                   x_return_status := l_return_status;
9159                   RAISE g_exception_halt_validation;
9160                END IF;
9161 
9162 	       If date_terminated is not null or date_cancelled is not null Then
9163 	    	    Open l_hdr_sts_csr(p_kdtl_tbl (l_ctr).hdr_id);
9164 	            Fetch l_hdr_sts_csr into l_hdr_status;
9165 	            Close l_hdr_sts_csr;
9166 
9167 	            Update oks_inst_hist_details set new_k_status = l_hdr_status
9168 		    Where ins_id = l_instparent_id and new_contract_id = p_kdtl_tbl (l_ctr).hdr_id;
9169 
9170                End If;
9171             END IF;
9172 
9173             OPEN l_serv_csr (p_kdtl_tbl (l_ctr).service_inventory_id);
9174 
9175             FETCH l_serv_csr
9176              INTO l_service_name;
9177 
9178             CLOSE l_serv_csr;
9179 
9180             launch_workflow (   'INSTALL BASE ACTIVITY : RETURN  '
9181                              || fnd_global.local_chr (10)
9182                              || 'Contract Number       :         '
9183                              || get_contract_number (p_kdtl_tbl (l_ctr).hdr_id)
9184                              || fnd_global.local_chr (10)
9185                              || 'Service Terminated    :         '
9186                              || l_service_name
9187                             );
9188             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
9189             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
9190          END LOOP;
9191       END IF;
9192    EXCEPTION
9193       WHEN g_exception_halt_validation
9194       THEN
9195          x_return_status := l_return_status;
9196          NULL;
9197       WHEN OTHERS
9198       THEN
9199          x_return_status := okc_api.g_ret_sts_unexp_error;
9200          okc_api.set_message (g_app_name,
9201                               g_unexpected_error,
9202                               g_sqlcode_token,
9203                               SQLCODE,
9204                               g_sqlerrm_token,
9205                               SQLERRM
9206                              );
9207    END;
9208 
9209 ---System Transfer
9210    PROCEDURE create_k_system_transfer (
9211       p_kdtl_tbl        IN              contract_trf_tbl,
9212       x_return_status   OUT NOCOPY      VARCHAR2,
9213       x_msg_count       OUT NOCOPY      NUMBER,
9214       x_msg_data        OUT NOCOPY      VARCHAR2
9215    )
9216    IS
9217       CURSOR l_cov_csr (p_cle_id NUMBER)
9218       IS
9219          SELECT LN.transfer_option
9220            FROM oks_k_lines_b LN, okc_k_lines_b kl, oks_k_lines_b ks
9221           WHERE kl.ID = p_cle_id
9222             AND ks.cle_id = kl.ID
9223             AND LN.cle_id = ks.coverage_id;
9224 
9225       CURSOR l_contracts_csr (
9226          p_system_id   NUMBER,
9227          p_trxn_date   DATE,
9228          p_cust_id     NUMBER
9229       )
9230       IS
9231          SELECT DISTINCT new_contract_id
9232                     FROM oks_inst_hist_details
9233                    WHERE system_id = p_system_id
9234                      AND transaction_date = p_trxn_date
9235                      AND transaction_type = 'TRF'
9236                      AND old_customer = p_cust_id
9237                      AND new_contract_id <> old_contract_id;
9238 
9239       CURSOR l_qa_csr (p_id NUMBER)
9240       IS
9241          SELECT qcl_id
9242            FROM okc_k_headers_b
9243           WHERE ID = p_id;
9244 
9245       CURSOR l_hdrdt_csr (p_hdr_id NUMBER)
9246       IS
9247          SELECT start_date, end_date
9248            FROM okc_k_headers_b
9249           WHERE ID = p_hdr_id;
9250 
9251       CURSOR l_srvdt_csr (p_line_id NUMBER)
9252       IS
9253          SELECT start_date, end_date
9254            FROM okc_k_lines_b
9255           WHERE ID = p_line_id;
9256 
9257       CURSOR l_cust_rel_csr (
9258          p_old_customer    VARCHAR2,
9259          p_new_customer    VARCHAR2,
9260          p_relation        VARCHAR2,
9261          p_transfer_date   DATE
9262       )
9263       IS
9264          SELECT DISTINCT relationship_type
9265                     FROM hz_relationships
9266                    WHERE (   (    object_id = p_new_customer
9267                               AND subject_id = p_old_customer
9268                              )
9269                           OR (    object_id = p_old_customer
9270                               AND subject_id = p_new_customer
9271                              )
9272                          )
9273                      AND relationship_type = p_relation
9274                      AND status = 'A'
9275                      AND TRUNC (p_transfer_date) BETWEEN TRUNC (start_date)
9276                                                      AND TRUNC (end_date);
9277 
9278       CURSOR l_hdr_sts_csr (p_hdr_id NUMBER)
9279       IS
9280          SELECT sts_code
9281            FROM okc_k_headers_b
9282           WHERE ID = p_hdr_id;
9283 
9284 
9285       CURSOR l_Launch_WF_csr (p_hdr_id NUMBER)
9286       IS
9287          SELECT 'Y'
9288            FROM okc_k_headers_b Kh, oks_k_headers_b Ks
9289                 , okc_statuses_b sts
9290           WHERE Kh.ID = p_hdr_id
9291           And   Ks.chr_id = Kh.id
9292           And kh.sts_code = sts.code
9293           And sts.ste_code = 'ENTERED'
9294           And ks.wf_item_key is null;
9295       l_launch_wf_yn Varchar2(1);
9296 
9297       CURSOR l_subline_csr (p_id NUMBER)
9298       IS
9299          SELECT date_terminated, price_negotiated
9300            FROM okc_k_lines_b
9301           WHERE ID = p_id;
9302 
9303       l_date_terminated           DATE;
9304       l_subline_price             NUMBER;
9305       l_hdr_sts                   VARCHAR2 (40);
9306 
9307       CURSOR l_toplines_csr (p_chr_id NUMBER, p_service_item_id NUMBER)
9308       IS
9309          SELECT kl.ID cle_id
9310            FROM okc_k_lines_b kl, okc_k_items ki, okc_statuses_b st
9311           WHERE kl.dnz_chr_id = p_chr_id
9312             AND kl.lse_id IN (1, 14, 19)
9313             AND kl.ID = ki.cle_id
9314             AND ki.object1_id1 = TO_CHAR (p_service_item_id)
9315             AND st.code = kl.sts_code
9316             AND st.ste_code NOT IN ('TERMINATED', 'CANCELLED');
9317 
9318       l_cov_rec                   l_cov_csr%ROWTYPE;
9319 
9320       CURSOR l_refnum_csr (p_cp_id NUMBER)
9321       IS
9322          SELECT instance_number
9323            FROM csi_item_instances
9324           WHERE instance_id = p_cp_id;
9325 
9326       CURSOR l_serv_csr (p_serv_id NUMBER)
9327       IS
9328          SELECT t.description NAME
9329            FROM mtl_system_items_tl t
9330           WHERE t.inventory_item_id = p_serv_id
9331             AND t.LANGUAGE = USERENV ('LANG')
9332             AND ROWNUM < 2;
9333 
9334       l_start_date                DATE;
9335       l_end_date                  DATE;
9336       l_subline_id                NUMBER;
9337       l_renewal_id                NUMBER;
9338       l_source_line_id            NUMBER;
9339       l_transfer_id               NUMBER;
9340       l_srv_sdt                   DATE;
9341       l_srv_edt                   DATE;
9342       l_coverage_id               NUMBER;
9343       l_service_name              VARCHAR2 (240);
9344       l_ref_num                   VARCHAR2 (30);
9345       l_msg_count                 NUMBER;
9346       l_msg_data                  VARCHAR2 (2000);
9347       l_trf_option                VARCHAR2 (40);
9348       l_contact_tbl_in            oks_extwarprgm_pvt.contact_tbl;
9349       l_salescredit_tbl_line      oks_extwarprgm_pvt.salescredit_tbl;
9350       l_salescredit_tbl_hdr       oks_extwarprgm_pvt.salescredit_tbl;
9351       l_line_rec                  oks_extwarprgm_pvt.k_line_service_rec_type;
9352       l_covd_rec                  oks_extwarprgm_pvt.k_line_covered_level_rec_type;
9353 --l_kdtl_tbl                oks_extwar_util_pvt.contract_tbl_type;
9354       l_available_yn              CHAR;
9355       l_return_status             VARCHAR2 (5)    := okc_api.g_ret_sts_success;
9356       l_line_found                VARCHAR2 (1);
9357       l_ste_code                  VARCHAR2 (40);
9358       l_sts_code                  VARCHAR2 (40);
9359       l_ctr                       NUMBER;
9360       l_suppress_credit           VARCHAR2 (10)                         := 'N';
9361       l_trfdt                     DATE;
9362       l_clev_tbl_in               okc_contract_pub.clev_tbl_type;
9363       l_clev_tbl_out              okc_contract_pub.clev_tbl_type;
9364       l_api_version      CONSTANT NUMBER                                := 1.0;
9365       l_init_msg_list    CONSTANT VARCHAR2 (1)                          := 'F';
9366       l_index                     NUMBER;
9367       l_relationship              VARCHAR2 (40);
9368       l_relationship_type         VARCHAR2 (40);
9369       l_chr_id                    NUMBER;
9370       l_contract_exist            VARCHAR2 (1);
9371       l_contract_merge            VARCHAR2 (1);
9372       l_ptr                       NUMBER                                  := 0;
9373       l_old_cp_id                 NUMBER;
9374       l_line_id                   NUMBER;
9375       l_header_merge              VARCHAR2 (1);
9376       l_line_merge                VARCHAR2 (1);
9377       l_merge_chr_id              NUMBER;
9378       l_merge_line_id             NUMBER;
9379       l_max_severity              VARCHAR2 (1);
9380       l_msg_tbl                   okc_qa_check_pub.msg_tbl_type;
9381       l_covlvl_id                 NUMBER;
9382       i                           NUMBER;
9383       l_qcl_id                    NUMBER;
9384       l_update_line               VARCHAR2 (1);
9385       l_inst_dtls_tbl             oks_ihd_pvt.ihdv_tbl_type;
9386       x_inst_dtls_tbl             oks_ihd_pvt.ihdv_tbl_type;
9387       l_insthist_rec              oks_ins_pvt.insv_rec_type;
9388       x_insthist_rec              oks_ins_pvt.insv_rec_type;
9389       l_instparent_id             NUMBER;
9390       l_parameters                VARCHAR2 (2000);
9391       l_temp                      VARCHAR2 (2000);
9392       l_old_party_id              NUMBER;
9393       l_new_party_id              NUMBER;
9394       l_new_party_name            VARCHAR2 (360);
9395       l_old_party_name            VARCHAR2 (360);
9396       date_terminated             DATE;
9397       date_cancelled              DATE;
9398       l_chrv_tbl_in               okc_contract_pub.chrv_tbl_type;
9399       l_chrv_tbl_out              okc_contract_pub.chrv_tbl_type;
9400       l_create_contract           VARCHAR2 (1);
9401       l_party_id                  NUMBER;
9402       l_party_name                VARCHAR2 (360);
9403       l_opr_instance_id           NUMBER;
9404       l_renewal_opr_instance_id   NUMBER;
9405       l_term_date_flag            VARCHAR2 (1);
9406       l_wf_attr_details           oks_wf_k_process_pvt.wf_attr_details;
9407       l_create_oper_instance      VARCHAR2 (1);
9408       l_credit_amount             VARCHAR2 (50);
9409       l_full_credit               VARCHAR2 (10)                         := 'N';
9410 
9411       FUNCTION get_operation_instance (
9412          p_target_chr_id      NUMBER,
9413          p_transaction_type   VARCHAR2
9414       )
9415          RETURN NUMBER
9416       IS
9417          CURSOR l_operation_csr
9418          IS
9419             SELECT op.ID
9420               FROM okc_operation_instances op,
9421                    okc_class_operations classopr,
9422                    okc_subclasses_b subclass
9423              WHERE target_chr_id = p_target_chr_id
9424                AND subclass.code = 'SERVICE'
9425                AND classopr.cls_code = subclass.cls_code
9426                AND classopr.opn_code IN ('TRANSFER')
9427                AND op.cop_id = classopr.ID;
9428 
9429          CURSOR l_renewal_csr
9430          IS
9431             SELECT op.ID
9432               FROM okc_operation_instances op,
9433                    okc_class_operations classopr,
9434                    okc_subclasses_b subclass
9435              WHERE target_chr_id = p_target_chr_id
9436                AND subclass.code = 'SERVICE'
9437                AND classopr.cls_code = subclass.cls_code
9438                AND classopr.opn_code IN ('RENEWAL', 'REN_CON')
9439                AND op.cop_id = classopr.ID;
9440 
9441 /*
9442 Select id
9443 From   Okc_operation_instances
9444 Where  target_chr_id = p_target_chr_id
9445 And    cop_id in (40,41);
9446 */
9447          l_oper_inst_id   NUMBER;
9448       BEGIN
9449          IF p_transaction_type = 'TRF'
9450          THEN
9451             OPEN l_operation_csr;
9452 
9453             FETCH l_operation_csr
9454              INTO l_oper_inst_id;
9455 
9456             CLOSE l_operation_csr;
9457          ELSE
9458             OPEN l_renewal_csr;
9459 
9460             FETCH l_renewal_csr
9461              INTO l_oper_inst_id;
9462 
9463             CLOSE l_renewal_csr;
9464          END IF;
9465 
9466          RETURN (l_oper_inst_id);
9467       END;
9468 
9469       PROCEDURE get_party_id (
9470          p_cust_id      IN              NUMBER,
9471          x_party_id     OUT NOCOPY      NUMBER,
9472          x_party_name   OUT NOCOPY      VARCHAR2
9473       )
9474       IS
9475          CURSOR l_party_csr
9476          IS
9477             SELECT party_id, NAME
9478               FROM okx_customer_accounts_v
9479              WHERE id1 = p_cust_id;
9480       BEGIN
9481          OPEN l_party_csr;
9482 
9483          FETCH l_party_csr
9484           INTO x_party_id, x_party_name;
9485 
9486          CLOSE l_party_csr;
9487       EXCEPTION
9488          WHEN OTHERS
9489          THEN
9490             x_return_status := okc_api.g_ret_sts_unexp_error;
9491             okc_api.set_message (g_app_name,
9492                                  g_unexpected_error,
9493                                  g_sqlcode_token,
9494                                  SQLCODE,
9495                                  g_sqlerrm_token,
9496                                  SQLERRM
9497                                 );
9498       END;
9499 
9500       FUNCTION site_address (
9501          p_customer_id   NUMBER,
9502          p_party_id      NUMBER,
9503          p_code          VARCHAR2,
9504          p_org_id        NUMBER
9505       )
9506          RETURN NUMBER
9507       IS
9508          CURSOR l_address_csr
9509          IS
9510             SELECT id1
9511               FROM okx_cust_site_uses_v
9512              WHERE cust_account_id = p_customer_id
9513                AND party_id = p_party_id
9514                AND site_use_code = p_code
9515                AND identifying_address_flag = 'Y'
9516                AND status = 'A'
9517                AND org_id = p_org_id;
9518 
9519          l_site_id   NUMBER;
9520       BEGIN
9521          OPEN l_address_csr;
9522 
9523          FETCH l_address_csr
9524           INTO l_site_id;
9525 
9526          IF l_address_csr%NOTFOUND
9527          THEN
9528             CLOSE l_address_csr;
9529 
9530             RETURN (NULL);
9531          END IF;
9532 
9533          CLOSE l_address_csr;
9534 
9535          RETURN (l_site_id);
9536       END;
9537 
9538       PROCEDURE create_contract_header (
9539          p_kdtl_rec        IN              contract_trf_rec,
9540          x_msg_data        OUT NOCOPY      VARCHAR2,
9541          x_chr_id          OUT NOCOPY      NUMBER,
9542          x_msg_count       OUT NOCOPY      NUMBER,
9543          x_return_status   OUT NOCOPY      VARCHAR2
9544       )
9545       IS
9546          l_agrment_id        NUMBER;
9547          l_ste_code          VARCHAR2 (40);
9548          l_sts_code          VARCHAR2 (40);
9549 
9550          CURSOR l_party_csr (p_id NUMBER)
9551          IS
9552             SELECT party_id, NAME
9553               FROM okx_customer_accounts_v
9554              WHERE id1 = p_id;
9555 
9556          CURSOR l_get_agrid_csr (p_chr_id NUMBER)
9557          IS
9558             SELECT isa_agreement_id
9559               FROM okc_governances
9560              WHERE chr_id = p_chr_id AND dnz_chr_id = p_chr_id;
9561 
9562 -- Fix for bug 3588355
9563          CURSOR l_get_bill_ship_csr (p_cp_id NUMBER)
9564          IS
9565             SELECT bill_to_address, ship_to_address
9566               FROM csi_instance_party_v
9567              WHERE instance_id = p_cp_id;
9568 
9569 -- Fix for bug 3588355
9570          CURSOR validate_bill_ship_ids (
9571             p_id              NUMBER,
9572             p_org_id          NUMBER,
9573             p_site_use_code   VARCHAR2
9574          )
9575          IS
9576             SELECT 'x'
9577               FROM okx_cust_site_uses_v
9578              WHERE id1 = p_id
9579                AND site_use_code = p_site_use_code
9580                AND org_id = p_org_id
9581                AND status = 'A';
9582 
9583          CURSOR l_access_csr (p_hdr_id NUMBER)
9584          IS
9585             SELECT resource_id, GROUP_ID, access_level
9586               FROM okc_k_accesses_v
9587              WHERE chr_id = p_hdr_id;
9588 
9589          l_hdr_rec           k_header_rec_type;
9590          l_party_id          NUMBER;
9591          l_party_name        VARCHAR2 (360);
9592          l_return_status     VARCHAR2 (1);
9593          l_rnrl_rec_out      oks_renew_util_pvt.rnrl_rec_type;
9594          p_contact_tbl_in    oks_extwarprgm_pvt.contact_tbl;
9595          l_chrid             NUMBER;
9596          l_cacv_tbl_in       okc_contract_pub.cacv_tbl_type;
9597          l_cacv_tbl_out      okc_contract_pub.cacv_tbl_type;
9598          l_status            VARCHAR2 (40);
9599          l_bill_to_id        NUMBER;
9600          l_ship_to_id        NUMBER;
9601          l_valid             VARCHAR2 (1);
9602          l_resource_id       NUMBER;
9603          l_group_id          NUMBER;
9604          l_access_level      VARCHAR2 (3);
9605          l_sc_hdr_ctr        NUMBER;
9606          l_salescredit_tbl   oks_extwarprgm_pvt.salescredit_tbl;
9607          l_org_id            NUMBER;
9608 
9609          CURSOR l_sales_credit_hdr_csr (p_chr_id NUMBER)
9610          IS
9611             SELECT ctc_id, sales_credit_type_id1, PERCENT, sales_group_id
9612               FROM oks_k_sales_credits_v
9613              WHERE chr_id = p_chr_id AND cle_id IS NULL;
9614       BEGIN
9615          x_return_status := okc_api.g_ret_sts_success;
9616 
9617          OPEN l_get_agrid_csr (p_kdtl_rec.hdr_id);              --07-May-2003
9618 
9619          FETCH l_get_agrid_csr
9620           INTO l_agrment_id;
9621 
9622          CLOSE l_get_agrid_csr;
9623 
9624          l_hdr_rec.billed_at_source := p_kdtl_rec.billed_at_source;
9625 
9626          get_party_id (p_kdtl_rec.new_account_id, l_party_id, l_party_name);
9627          l_hdr_rec.party_id := l_party_id;
9628 
9629          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
9630          THEN
9631             fnd_log.STRING (fnd_log.level_statement,
9632                                g_module_current
9633                             || '.CREATE_K_SYSTEM_TRF.create_contract_header',
9634                             'Party id = ' || l_hdr_rec.party_id
9635                            );
9636          END IF;
9637 
9638          oks_renew_util_pub.get_renew_rules
9639                                           (p_api_version        => 1.0,
9640                                            p_init_msg_list      => 'T',
9641                                            x_return_status      => l_return_status,
9642                                            x_msg_count          => x_msg_count,
9643                                            x_msg_data           => x_msg_data,
9644                                            p_chr_id             => NULL,
9645                                            p_party_id           => l_hdr_rec.party_id,
9646                                            p_org_id             => p_kdtl_rec.hdr_org_id,
9647                                            p_date               => SYSDATE,
9648                                            p_rnrl_rec           => NULL,
9649                                            x_rnrl_rec           => l_rnrl_rec_out
9650                                           );
9651 
9652          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
9653          THEN
9654             fnd_log.STRING
9655                     (fnd_log.level_event,
9656                         g_module_current
9657                      || '.CREATE_K_SYSTEM_TRF.create_contract_header',
9658                         'oks_renew_util_pub.get_renew_rules(Return status = '
9659                      || l_return_status
9660                     );
9661          END IF;
9662 
9663          IF NOT l_return_status = okc_api.g_ret_sts_success
9664          THEN
9665             x_return_status := l_return_status;
9666             RAISE g_exception_halt_validation;
9667          END IF;
9668 
9669          l_hdr_rec.scs_code := p_kdtl_rec.scs_code;
9670 
9671          IF p_kdtl_rec.scs_code = 'WARRANTY'
9672          THEN
9673             l_hdr_rec.short_description :=
9674                   'CUSTOMER : '
9675                || l_party_name
9676                || ' Warranty/Extended Warranty Contract';
9677          ELSE
9678             l_hdr_rec.short_description :=
9679                                 'CUSTOMER : ' || l_party_name || '  Contract';
9680          END IF;
9681 
9682          l_hdr_rec.start_date := TRUNC (l_trfdt);
9683 
9684          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
9685          THEN
9686             fnd_log.STRING (fnd_log.level_statement,
9687                                g_module_current
9688                             || '.CREATE_K_SYSTEM_TRF.create_contract_header',
9689                                'Transfer status Profile = '
9690                             || fnd_profile.VALUE ('OKS_TRANSFER_STATUS')
9691                            );
9692          END IF;
9693 
9694          IF (p_kdtl_rec.scs_code = 'WARRANTY' AND p_kdtl_rec.lse_id = 18)
9695          THEN
9696             IF l_hdr_rec.start_date > SYSDATE
9697             THEN
9698                get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
9699             ELSE
9700                get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
9701             END IF;
9702 
9703             l_hdr_rec.sts_code := l_sts_code;
9704             l_hdr_rec.renewal_status := 'COMPLETE';
9705             l_hdr_rec.accounting_rule_id := null;
9706             l_hdr_rec.invoice_rule_id := Null;
9707             l_hdr_rec.qcl_id := Null;
9708             l_hdr_rec.pdf_id := Null;
9709             l_hdr_rec.ar_interface_yn := 'N';
9710 
9711          ELSE
9712             l_hdr_rec.accounting_rule_id := p_kdtl_rec.hdr_acct_rule_id;
9713             l_hdr_rec.invoice_rule_id := -2;
9714             l_hdr_rec.qcl_id := l_rnrl_rec_out.qcl_id;
9715             l_hdr_rec.pdf_id := l_rnrl_rec_out.pdf_id;
9716             l_hdr_rec.ar_interface_yn := p_kdtl_rec.ar_interface_yn;
9717 
9718 
9719             get_sts_code (p_kdtl_rec.prod_sts_code,
9720                           NULL,
9721                           l_ste_code,
9722                           l_sts_code
9723                          );
9724 
9725             IF l_ste_code = 'ENTERED'
9726             THEN
9727                l_hdr_rec.sts_code := l_sts_code;
9728             ELSE
9729                l_status := fnd_profile.VALUE ('OKS_TRANSFER_STATUS');
9730 
9731                IF l_status = 'ACTIVE'
9732                THEN
9733                   IF l_hdr_rec.start_date > SYSDATE
9734                   THEN
9735                      get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
9736                   ELSE
9737                      get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
9738                   END IF;
9739 
9740                   l_hdr_rec.renewal_status := 'COMPLETE';
9741                ELSE
9742                   get_sts_code (l_status, NULL, l_ste_code, l_sts_code);
9743                END IF;
9744 
9745                l_hdr_rec.sts_code := l_sts_code;
9746             END IF;
9747          END IF;
9748 
9749          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
9750          THEN
9751             fnd_log.STRING (fnd_log.level_statement,
9752                                g_module_current
9753                             || '.CREATE_K_SYSTEM_TRF.create_contract_header',
9754                                'Header Status = '
9755                             || l_hdr_rec.sts_code
9756                             || 'End date = '
9757                             || l_hdr_rec.end_date
9758                             || 'Start Date = '
9759                             || l_hdr_rec.start_date
9760                            );
9761          END IF;
9762 
9763          -- Fix for bug 3588355 Begin
9764          OPEN l_get_bill_ship_csr (p_kdtl_rec.old_cp_id);
9765 
9766          FETCH l_get_bill_ship_csr
9767           INTO l_bill_to_id, l_ship_to_id;
9768 
9769          CLOSE l_get_bill_ship_csr;
9770 
9771          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
9772          THEN
9773             fnd_log.STRING (fnd_log.level_statement,
9774                                g_module_current
9775                             || '.CREATE_K_SYSTEM_TRF.create_contract_header',
9776                                ' Bill to Id = '
9777                             || l_bill_to_id
9778                             || 'Ship to Id = '
9779                             || l_ship_to_id
9780                            );
9781          END IF;
9782 
9783          IF (l_bill_to_id IS NOT NULL)
9784          THEN
9785             OPEN validate_bill_ship_ids (l_bill_to_id,
9786                                          p_kdtl_tbl (l_ctr).hdr_org_id,
9787                                          'BILL_TO'
9788                                         );
9789 
9790             FETCH validate_bill_ship_ids
9791              INTO l_valid;
9792 
9793             IF validate_bill_ship_ids%NOTFOUND
9794             THEN
9795                CLOSE validate_bill_ship_ids;
9796 
9797                IF fnd_log.level_error >= fnd_log.g_current_runtime_level
9798                THEN
9799                   fnd_log.STRING (fnd_log.level_error,
9800                                      g_module_current
9801                                   || '.CREATE_K_SYSTEM_TRF.ERROR',
9802                                      ' Bill to Id ('
9803                                   || l_bill_to_id
9804                                   || ') is not valid'
9805                                  );
9806                END IF;
9807 
9808                l_return_status := okc_api.g_ret_sts_error;
9809                okc_api.set_message (g_app_name,
9810                                     g_required_value,
9811                                     g_col_name_token,
9812                                     'Bill to id is not Valid'
9813                                    );
9814                RAISE g_exception_halt_validation;
9815             END IF;
9816 
9817             CLOSE validate_bill_ship_ids;
9818          END IF;
9819 
9820          IF (l_ship_to_id IS NOT NULL)
9821          THEN
9822             OPEN validate_bill_ship_ids (l_ship_to_id,
9823                                          p_kdtl_rec.hdr_org_id,
9824                                          'SHIP_TO'
9825                                         );
9826 
9827             FETCH validate_bill_ship_ids
9828              INTO l_valid;
9829 
9830             IF validate_bill_ship_ids%NOTFOUND
9831             THEN
9832                CLOSE validate_bill_ship_ids;
9833 
9834                IF fnd_log.level_error >= fnd_log.g_current_runtime_level
9835                THEN
9836                   fnd_log.STRING (fnd_log.level_error,
9837                                      g_module_current
9838                                   || '.CREATE_K_SYSTEM_TRF.ERROR',
9839                                      ' Bill to Id ('
9840                                   || l_ship_to_id
9841                                   || ') is not valid'
9842                                  );
9843                END IF;
9844 
9845                l_return_status := okc_api.g_ret_sts_error;
9846                okc_api.set_message (g_app_name,
9847                                     g_required_value,
9848                                     g_col_name_token,
9849                                     'Ship to id is not Valid'
9850                                    );
9851                RAISE g_exception_halt_validation;
9852             END IF;
9853 
9854             CLOSE validate_bill_ship_ids;
9855          END IF;
9856 
9857          l_hdr_rec.bill_to_id :=
9858             NVL (l_bill_to_id,
9859                  site_address (p_kdtl_rec.new_account_id,
9860                                l_hdr_rec.party_id,
9861                                'BILL_TO',
9862                                p_kdtl_rec.hdr_org_id
9863                               )
9864                 );
9865          l_hdr_rec.ship_to_id :=
9866             NVL (l_ship_to_id,
9867                  site_address (p_kdtl_rec.new_account_id,
9868                                l_hdr_rec.party_id,
9869                                'SHIP_TO',
9870                                p_kdtl_rec.hdr_org_id
9871                               )
9872                 );
9873          -- Fix for bug 3588355 End
9874          l_hdr_rec.order_line_id := NULL;
9875          l_hdr_rec.contract_number := okc_api.g_miss_char;
9876          l_hdr_rec.rty_code := 'CONTRACTTRANSFERORDER';
9877          --l_hdr_rec.start_date                        := trunc(l_trfdt);
9878          l_hdr_rec.end_date := p_kdtl_rec.service_edt;
9879          l_hdr_rec.class_code := 'SVC';
9880          l_hdr_rec.authoring_org_id := p_kdtl_rec.hdr_org_id;
9881          l_hdr_rec.inv_organization_id := p_kdtl_rec.organization_id;
9882          l_hdr_rec.chr_group := l_rnrl_rec_out.cgp_new_id;
9883          l_hdr_rec.price_list_id := p_kdtl_rec.price_list_id;
9884          l_hdr_rec.agreement_id := l_agrment_id;
9885          l_hdr_rec.currency := p_kdtl_rec.header_currency;
9886          --p_kdtl_rec.hdr_inv_rule_id; --fix for bug 3451440
9887          l_hdr_rec.payment_type := p_kdtl_rec.payment_type;
9888          l_hdr_rec.inv_trx_type := p_kdtl_rec.inv_trx_type;
9889          l_hdr_rec.hold_billing := p_kdtl_rec.hold_billing;
9890          --mmadhavi for bug 3765672
9891          l_hdr_rec.summary_trx_yn := p_kdtl_rec.summary_trx_yn;
9892          --mmadhavi for bug 3765672
9893          l_hdr_rec.order_hdr_id := NULL;
9894          l_hdr_rec.payment_term_id := p_kdtl_rec.payment_term_id;
9895          l_hdr_rec.cvn_type := p_kdtl_rec.cvn_type;
9896          l_hdr_rec.cvn_rate := p_kdtl_rec.cvn_rate;
9897          l_hdr_rec.cvn_date := p_kdtl_rec.cvn_date;
9898          l_hdr_rec.cvn_euro_rate := p_kdtl_rec.cvn_euro_rate;
9899          l_hdr_rec.merge_type := 'NEW';
9900          l_hdr_rec.period_start := p_kdtl_rec.period_start;
9901          l_hdr_rec.period_type := p_kdtl_rec.period_type;
9902          l_hdr_rec.price_uom := p_kdtl_rec.price_uom_hdr;
9903          l_sc_hdr_ctr := 0;
9904 
9905          FOR l_sales_credit_hdr_rec IN
9906             l_sales_credit_hdr_csr (p_kdtl_rec.hdr_id)
9907          LOOP
9908             l_sc_hdr_ctr := l_sc_hdr_ctr + 1;
9909             l_salescredit_tbl (l_sc_hdr_ctr).ctc_id :=
9910                                                 l_sales_credit_hdr_rec.ctc_id;
9911             l_salescredit_tbl (l_sc_hdr_ctr).sales_credit_type_id :=
9912                                  l_sales_credit_hdr_rec.sales_credit_type_id1;
9913             l_salescredit_tbl (l_sc_hdr_ctr).PERCENT :=
9914                                                l_sales_credit_hdr_rec.PERCENT;
9915             l_salescredit_tbl (l_sc_hdr_ctr).sales_group_id :=
9916                                         l_sales_credit_hdr_rec.sales_group_id;
9917          END LOOP;             -- For l_sales_credit_rec IN l_sales_credit_csr
9918 
9919          oks_extwarprgm_pvt.create_k_hdr
9920                                    (p_k_header_rec            => l_hdr_rec,
9921                                     p_contact_tbl             => p_contact_tbl_in,
9922                                     p_salescredit_tbl_in      => l_salescredit_tbl
9923                                                                                   -- mmadhavi bug 4174921
9924          ,
9925                                     p_caller                  => 'ST',
9926                                     x_order_error             => l_temp,
9927                                     x_chr_id                  => l_chrid,
9928                                     x_return_status           => l_return_status,
9929                                     x_msg_count               => x_msg_count,
9930                                     x_msg_data                => x_msg_data
9931                                    );
9932 
9933          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
9934          THEN
9935             fnd_log.STRING
9936                        (fnd_log.level_statement,
9937                            g_module_current
9938                         || '.CREATE_K_SYSTEM_TRF.create_contract_header',
9939                            'OKS_EXTWARPRGM_PVT.create_k_hdr(Return status = '
9940                         || l_return_status
9941                         || ')'
9942                        );
9943          END IF;
9944 
9945          IF NOT l_return_status = 'S'
9946          THEN
9947             RAISE g_exception_halt_validation;
9948          ELSE
9949             x_chr_id := l_chrid;
9950          END IF;
9951 
9952          SELECT authoring_org_id
9953            INTO l_org_id
9954            FROM okc_k_headers_b
9955           WHERE ID = l_chrid;
9956 
9957          OPEN l_access_csr (p_kdtl_rec.hdr_id);
9958 
9959          FETCH l_access_csr
9960           INTO l_resource_id, l_group_id, l_access_level;
9961 
9962          CLOSE l_access_csr;
9963 
9964          IF l_resource_id IS NOT NULL OR l_group_id IS NOT NULL
9965          THEN
9966             l_cacv_tbl_in (1).chr_id := l_chrid;
9967             l_cacv_tbl_in (1).resource_id := l_resource_id;
9968             l_cacv_tbl_in (1).GROUP_ID := l_group_id;
9969             l_cacv_tbl_in (1).access_level := l_access_level;
9970             okc_contract_pub.create_contract_access
9971                                          (p_api_version        => l_api_version,
9972                                           p_init_msg_list      => l_init_msg_list,
9973                                           x_return_status      => l_return_status,
9974                                           x_msg_count          => x_msg_count,
9975                                           x_msg_data           => x_msg_data,
9976                                           p_cacv_tbl           => l_cacv_tbl_in,
9977                                           x_cacv_tbl           => l_cacv_tbl_out
9978                                          );
9979 
9980             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
9981             THEN
9982                fnd_log.STRING
9983                   (fnd_log.level_statement,
9984                       g_module_current
9985                    || '.CREATE_K_SYSTEM_TRF.create_contract_header',
9986                       'okc_contract_pub.create_contract_access(Return status = '
9987                    || l_return_status
9988                    || ')'
9989                   );
9990             END IF;
9991 
9992             IF NOT l_return_status = 'S'
9993             THEN
9994                RAISE g_exception_halt_validation;
9995             END IF;
9996          END IF;
9997 
9998          x_return_status := l_return_status;
9999       EXCEPTION
10000          WHEN g_exception_halt_validation
10001          THEN
10002             x_return_status := l_return_status;
10003             NULL;
10004          WHEN OTHERS
10005          THEN
10006             x_return_status := okc_api.g_ret_sts_unexp_error;
10007             okc_api.set_message (g_app_name,
10008                                  g_unexpected_error,
10009                                  g_sqlcode_token,
10010                                  SQLCODE,
10011                                  g_sqlerrm_token,
10012                                  SQLERRM
10013                                 );
10014       END create_contract_header;
10015 
10016       PROCEDURE create_contract_line (
10017          p_kdtl_rec        IN              contract_trf_rec,
10018          p_hdr_id          IN              NUMBER,
10019          x_return_status   OUT NOCOPY      VARCHAR2,
10020          x_msg_data        OUT NOCOPY      VARCHAR2,
10021          x_line_id         OUT NOCOPY      NUMBER,
10022          x_msg_count       OUT NOCOPY      NUMBER
10023       )
10024       IS
10025          CURSOR l_line_rule_csr (p_line_id NUMBER)
10026          IS
10027             SELECT oks.acct_rule_id, okc.inv_rule_id, okc.price_list_id
10028               FROM okc_k_lines_b okc, oks_k_lines_b oks
10029              WHERE okc.ID = p_line_id AND oks.cle_id = okc.ID;
10030 
10031          CURSOR l_party_csr (p_id NUMBER)
10032          IS
10033             SELECT party_id, NAME
10034               FROM okx_customer_accounts_v
10035              WHERE id1 = p_id;
10036 
10037          CURSOR l_hdr_sts_csr (p_hdr_id NUMBER)
10038          IS
10039             SELECT st.ste_code, kh.sts_code
10040               FROM okc_k_headers_b kh, okc_statuses_b st
10041              WHERE kh.ID = p_hdr_id AND st.code = kh.sts_code;
10042 
10043 -- Fix for bug 3588355
10044          CURSOR l_get_bill_ship_csr (p_cp_id NUMBER)
10045          IS
10046             SELECT bill_to_address, ship_to_address
10047               FROM csi_instance_party_v
10048              WHERE instance_id = p_cp_id;
10049 
10050          CURSOR l_serv_csr (p_serv_id NUMBER)
10051          IS
10052          SELECT  DECODE (fnd_profile.VALUE ('OKS_ITEM_DISPLAY_PREFERENCE'), 'DISPLAY_DESC', t.description , b.concatenated_segments )
10053            FROM mtl_system_items_b_kfv b, mtl_system_items_tl t
10054           WHERE b.inventory_item_id = t.inventory_item_id
10055             AND b.organization_id = t.organization_id
10056             AND t.LANGUAGE = USERENV ('LANG')
10057             AND b.inventory_item_id = p_serv_id
10058             AND ROWNUM < 2;
10059 
10060          l_line_rec          k_line_service_rec_type;
10061          l_acct_id           NUMBER;
10062          l_inv_id            NUMBER;
10063          l_party_id          NUMBER;
10064          l_party_name        VARCHAR2 (360);
10065          l_ste_code          VARCHAR2 (40);
10066          l_sts_code          VARCHAR2 (40);
10067          l_hdr_sts_code      VARCHAR2 (40);
10068          l_hdr_ste_code      VARCHAR2 (40);
10069          l_lineid            NUMBER;
10070          l_return_status     VARCHAR2 (10);
10071          l_price_list_id     NUMBER;
10072          p_contact_tbl_in    oks_extwarprgm_pvt.contact_tbl;
10073          l_status            VARCHAR2 (40);
10074          l_bill_to_id        NUMBER;
10075          l_ship_to_id        NUMBER;
10076          l_warranty_flag     VARCHAR2 (2);
10077 
10078          CURSOR l_sales_credit_csr (p_cle_id NUMBER)
10079          IS
10080             SELECT ctc_id, sales_credit_type_id1, PERCENT, sales_group_id
10081               FROM oks_k_sales_credits_v
10082              WHERE cle_id = p_cle_id;
10083 
10084          l_sc_ctr            NUMBER;
10085          l_salescredit_tbl   oks_extwarprgm_pvt.salescredit_tbl;
10086       BEGIN
10087          x_return_status := okc_api.g_ret_sts_success;
10088 
10089          OPEN l_line_rule_csr (p_kdtl_rec.service_line_id);
10090 
10091          FETCH l_line_rule_csr
10092           INTO l_acct_id, l_inv_id, l_price_list_id;
10093 
10094          CLOSE l_line_rule_csr;
10095 
10096          get_party_id (p_kdtl_rec.new_account_id, l_party_id, l_party_name);
10097 
10098          OPEN l_get_bill_ship_csr (p_kdtl_rec.old_cp_id);
10099 
10100          FETCH l_get_bill_ship_csr
10101           INTO l_bill_to_id, l_ship_to_id;
10102 
10103          CLOSE l_get_bill_ship_csr;
10104 
10105          l_line_rec.k_id := p_hdr_id;
10106          l_line_rec.k_line_number := okc_api.g_miss_char;
10107          l_line_rec.org_id := p_kdtl_rec.hdr_org_id;
10108          l_line_rec.accounting_rule_id := l_acct_id;
10109          l_line_rec.invoicing_rule_id := -2;
10110          --l_inv_id; -- fix for bug 3451440
10111          l_line_rec.srv_id := p_kdtl_rec.service_inventory_id;
10112          --  l_line_rec.srv_segment1           := p_kdtl_rec.service_name;
10113          --  l_line_rec.srv_desc               := p_kdtl_rec.service_description;
10114 
10115          OPEN l_serv_csr (p_kdtl_rec.service_inventory_id);
10116          FETCH l_serv_csr  INTO l_line_rec.srv_desc;
10117          CLOSE l_serv_csr;
10118 
10119          l_line_rec.srv_sdt := TRUNC (l_trfdt);
10120          l_line_rec.srv_edt := TRUNC (p_kdtl_rec.service_edt);
10121 
10122          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
10123          THEN
10124             fnd_log.STRING (fnd_log.level_statement,
10125                                g_module_current
10126                             || '.CREATE_K_SYSTEM_TRF.create_k_service_line',
10127                                'Start date = '
10128                             || l_line_rec.srv_sdt
10129                             || 'End date = '
10130                             || l_line_rec.srv_edt
10131                            );
10132          END IF;
10133 
10134          --to be derived
10135          l_line_rec.bill_to_id :=
10136             NVL (l_bill_to_id,
10137                  site_address (p_kdtl_rec.new_account_id,
10138                                l_party_id,
10139                                'BILL_TO',
10140                                p_kdtl_rec.hdr_org_id
10141                               )
10142                 );
10143          l_line_rec.ship_to_id :=
10144             NVL (l_ship_to_id,
10145                  site_address (p_kdtl_rec.new_account_id,
10146                                l_party_id,
10147                                'SHIP_TO',
10148                                p_kdtl_rec.hdr_org_id
10149                               )
10150                 );
10151 
10152          IF p_kdtl_rec.lse_id = 25
10153          THEN
10154             l_warranty_flag := 'E';
10155          ELSIF p_kdtl_rec.lse_id = 9 AND p_kdtl_rec.scs_code = 'SERVICE'
10156          THEN
10157             l_warranty_flag := 'S';
10158          ELSIF p_kdtl_rec.lse_id = 18
10159          THEN
10160             l_warranty_flag := 'W';
10161          ELSIF p_kdtl_rec.lse_id = 9 AND p_kdtl_rec.scs_code = 'SUBSCRIPTION'
10162          THEN
10163             l_warranty_flag := 'SU';
10164          END IF;
10165 
10166          l_line_rec.warranty_flag := l_warranty_flag;
10167          l_line_rec.currency := p_kdtl_rec.service_currency;
10168          --Fix for Bug4121175
10169          l_line_rec.tax_code := p_kdtl_rec.tax_code;
10170          --End Fix for Bug4121175
10171          l_line_rec.cust_account := p_kdtl_rec.new_account_id;
10172          l_line_rec.ln_price_list_id := l_price_list_id;
10173          l_line_rec.coverage_id := p_kdtl_rec.coverage_id;
10174          l_line_rec.coverage_template_id := p_kdtl_rec.coverage_id;
10175          l_line_rec.standard_cov_yn := p_kdtl_rec.standard_cov_yn;
10176          l_line_rec.price_uom := p_kdtl_rec.price_uom_tl;
10177 
10178          --l_line_rec.line_renewal_type      := p_extwar_rec.line_renewal_type;
10179          IF l_line_rec.warranty_flag = 'W'
10180          THEN
10181             IF l_line_rec.srv_sdt > SYSDATE
10182             THEN
10183                get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
10184             ELSE
10185                get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
10186             END IF;
10187 
10188             l_line_rec.line_sts_code := l_sts_code;
10189             l_line_rec.line_renewal_type := 'DNR'  ;
10190 
10191          ELSE
10192             get_sts_code (p_kdtl_rec.prod_sts_code,
10193                           NULL,
10194                           l_ste_code,
10195                           l_sts_code
10196                          );
10197 
10198             IF l_ste_code = 'ENTERED'
10199             THEN
10200                l_line_rec.line_sts_code := l_sts_code;
10201             ELSE
10202                l_status := fnd_profile.VALUE ('OKS_TRANSFER_STATUS');
10203 
10204                IF l_status = 'ACTIVE'
10205                THEN
10206                   IF l_line_rec.srv_sdt > SYSDATE
10207                   THEN
10208                      get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
10209                   ELSE
10210                      get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
10211                   END IF;
10212                ELSE
10213                   get_sts_code (l_status, NULL, l_ste_code, l_sts_code);
10214                END IF;
10215 
10216                l_line_rec.line_sts_code := l_sts_code;
10217             END IF;
10218          END IF;
10219 
10220          l_line_rec.SOURCE := NULL;
10221          --errorout_n ('srv sdt'||p_extwar_rec.srv_sdt||'   '||p_extwar_rec.srv_edt);
10222          l_sc_ctr := 0;
10223 
10224          FOR l_sales_credit_rec IN
10225             l_sales_credit_csr (p_kdtl_rec.service_line_id)
10226          LOOP
10227             l_sc_ctr := l_sc_ctr + 1;
10228             l_salescredit_tbl (l_sc_ctr).ctc_id := l_sales_credit_rec.ctc_id;
10229             l_salescredit_tbl (l_sc_ctr).sales_credit_type_id :=
10230                                      l_sales_credit_rec.sales_credit_type_id1;
10231             l_salescredit_tbl (l_sc_ctr).PERCENT :=
10232                                                    l_sales_credit_rec.PERCENT;
10233             l_salescredit_tbl (l_sc_ctr).sales_group_id :=
10234                                             l_sales_credit_rec.sales_group_id;
10235          END LOOP;             -- For l_sales_credit_rec IN l_sales_credit_csr
10236 
10237          oks_extwarprgm_pvt.create_k_service_lines
10238                                    (p_k_line_rec              => l_line_rec,
10239                                     p_contact_tbl             => p_contact_tbl_in,
10240                                     p_salescredit_tbl_in      => l_salescredit_tbl,
10241                                     p_caller                  => 'ST',
10242                                     x_order_error             => l_temp,
10243                                     x_service_line_id         => l_lineid,
10244                                     x_return_status           => l_return_status,
10245                                     x_msg_count               => x_msg_count,
10246                                     x_msg_data                => x_msg_data
10247                                    );
10248 
10249          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
10250          THEN
10251             fnd_log.STRING
10252                (fnd_log.level_statement,
10253                    g_module_current
10254                 || '.CREATE_K_SYSTEM_TRF.create_k_service_line',
10255                    'oks_extwarprgm_pvt.create_k_service_lines(Return status = '
10256                 || l_return_status
10257                 || ')'
10258                );
10259          END IF;
10260 
10261          IF NOT l_return_status = 'S'
10262          THEN
10263             RAISE g_exception_halt_validation;
10264          ELSE
10265             x_line_id := l_lineid;
10266          END IF;
10267       EXCEPTION
10268          WHEN g_exception_halt_validation
10269          THEN
10270             x_return_status := l_return_status;
10271             NULL;
10272          WHEN OTHERS
10273          THEN
10274             x_return_status := okc_api.g_ret_sts_unexp_error;
10275             okc_api.set_message (g_app_name,
10276                                  g_unexpected_error,
10277                                  g_sqlcode_token,
10278                                  SQLCODE,
10279                                  g_sqlerrm_token,
10280                                  SQLERRM
10281                                 );
10282       END create_contract_line;
10283 
10284       PROCEDURE create_contract_subline (
10285          p_kdtl_rec          IN              contract_trf_rec,
10286          p_hdr_id            IN              NUMBER,
10287          p_line_id           IN              NUMBER,
10288          x_subline_id        OUT NOCOPY      NUMBER,
10289          x_update_top_line   OUT NOCOPY      VARCHAR2,
10290          x_return_status     OUT NOCOPY      VARCHAR2,
10291          x_msg_data          OUT NOCOPY      VARCHAR2,
10292          x_msg_count         OUT NOCOPY      NUMBER
10293       )
10294       IS
10295 /*  Cursor l_Cust_csr IS                                                   --29-apr-03
10296 
10297       Select   csi.last_oe_order_line_id Original_order_line_id
10298               ,csi.inventory_item_id
10299               ,csi.quantity
10300               ,csi.unit_of_measure uom_code
10301        From   csi_item_instances csi
10302        Where  csi.instance_id = p_kdtl_rec.old_cp_id;
10303 */
10304          CURSOR l_line_sts_csr (p_line_id NUMBER)
10305          IS
10306             SELECT st.ste_code, kl.sts_code
10307               FROM okc_k_lines_b kl, okc_statuses_b st
10308              WHERE kl.ID = p_line_id AND st.code = kl.sts_code;
10309 
10310          CURSOR l_getprice_csr (p_line_id NUMBER)
10311          IS
10312             SELECT price_negotiated
10313               FROM okc_k_lines_b
10314              WHERE ID = p_line_id;
10315 
10316 
10317          CURSOR l_serv_csr (p_serv_id NUMBER)
10318          IS
10319          SELECT  DECODE (fnd_profile.VALUE ('OKS_ITEM_DISPLAY_PREFERENCE'), 'DISPLAY_DESC', t.description , b.concatenated_segments )
10320            FROM mtl_system_items_b_kfv b, mtl_system_items_tl t
10321           WHERE b.inventory_item_id = t.inventory_item_id
10322             AND b.organization_id = t.organization_id
10323             AND t.LANGUAGE = USERENV ('LANG')
10324             AND b.inventory_item_id = p_serv_id
10325             AND ROWNUM < 2;
10326 
10327 /*         CURSOR l_serv_csr (p_serv_id NUMBER)
10328          IS
10329             SELECT b.concatenated_segments description
10330               FROM mtl_system_items_b_kfv b
10331              WHERE b.inventory_item_id = p_serv_id AND ROWNUM < 2;
10332 */
10333 
10334          l_line_ste_code      VARCHAR2 (40);
10335          l_line_sts_code      VARCHAR2 (40);
10336          l_covd_rec           k_line_covered_level_rec_type;
10337          l_ste_code           VARCHAR2 (40);
10338          l_sts_code           VARCHAR2 (40);
10339          l_return_status      VARCHAR2 (10);
10340          l_days               NUMBER;
10341          l_newamt             NUMBER;
10342          l_day1price          NUMBER;
10343          p_price_attribs_in   oks_extwarprgm_pvt.pricing_attributes_type;
10344          l_warranty_flag      VARCHAR2 (2);
10345          l_covlvl_id          NUMBER;
10346          l_update_top_line    VARCHAR2 (1);
10347          l_status             VARCHAR2 (40);
10348          l_new_price          NUMBER;
10349          l_xfer_days          NUMBER;
10350          l_duration           NUMBER;
10351          l_timeunits          VARCHAR2 (25);
10352 --l_xfer_timeunits         VARCHAR2(25);
10353       BEGIN
10354          x_return_status := okc_api.g_ret_sts_success;
10355 
10356 /*                             Open l_Cust_csr;
10357                              Fetch l_Cust_csr into l_Cust_rec;
10358                              If l_Cust_csr%notfound Then
10359                                      Close l_Cust_Csr;
10360                                      IF FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
10361                                        fnd_log.string(FND_LOG.LEVEL_ERROR,G_MODULE_CURRENT||'.CREATE_K_SYSTEM_TRF.ERROR',
10362                                        'l_Cust_csr Not Found ' );
10363                                      END IF;
10364                                 l_return_status := OKC_API.G_RET_STS_ERROR;
10365                                      OKC_API.set_message(G_APP_NAME,'OKS_CUST_PROD_DTLS_NOT_FOUND','CUSTOMER_PRODUCT',p_kdtl_rec.old_cp_id);
10366                                      Raise G_EXCEPTION_HALT_VALIDATION;
10367                              End if;
10368                              Close l_Cust_csr;
10369 */                           -- Amount to be prorated
10370                              -- Fix for the bug 3405907 Vigandhi 10-feb-2004
10371          IF p_kdtl_rec.service_amount IS NOT NULL
10372          THEN
10373             get_sts_code (p_kdtl_rec.prod_sts_code,
10374                           NULL,
10375                           l_ste_code,
10376                           l_sts_code
10377                          );
10378 
10379             IF l_ste_code = 'ENTERED'
10380             THEN
10381                --l_days           := (trunc(p_kdtl_rec.prod_edt) - trunc(p_kdtl_rec.prod_sdt)) + 1;
10382                --l_day1price      := p_kdtl_rec.service_amount / l_days;
10383                --l_newamt         := oks_extwar_util_pvt.round_currency_amt(l_day1price * (trunc(p_kdtl_rec.prod_edt) - trunc(l_trfdt) + 1),p_kdtl_rec.service_currency);
10384 
10385                -- Calculations based on partial period.
10386                IF p_kdtl_rec.price_uom_sl IS NULL
10387                THEN
10388                   okc_time_util_pub.get_duration
10389                                  (p_start_date         => TRUNC
10390                                                              (p_kdtl_rec.prod_sdt
10391                                                              ),
10392                                   p_end_date           => p_kdtl_rec.prod_edt,
10393                                   x_duration           => l_duration,
10394                                   x_timeunit           => l_timeunits,
10395                                   x_return_status      => l_return_status
10396                                  );
10397                /*
10398                  Okc_time_util_pub.get_duration
10399                                 (
10400                                  p_start_date    => trunc(l_trfdt),
10401                                  p_end_date      => p_kdtl_rec.prod_edt,
10402                                  x_duration      => l_duration,
10403                                  x_timeunit      => l_xfer_timeunits,
10404                                  x_return_status => l_return_status
10405                                );*/
10406                END IF;
10407 
10408                l_days :=
10409                   oks_time_measures_pub.get_quantity
10410                                                (p_kdtl_rec.prod_sdt,
10411                                                 p_kdtl_rec.prod_edt,
10412                                                 NVL (p_kdtl_rec.price_uom_sl,
10413                                                      l_timeunits
10414                                                     ),
10415                                                 p_kdtl_rec.period_type,
10416                                                 p_kdtl_rec.period_start
10417                                                );
10418                l_xfer_days :=
10419                   oks_time_measures_pub.get_quantity
10420                                                (l_trfdt,
10421                                                 p_kdtl_rec.prod_edt,
10422                                                 NVL (p_kdtl_rec.price_uom_sl,
10423                                                      l_timeunits
10424                                                     ),
10425                                                 p_kdtl_rec.period_type,
10426                                                 p_kdtl_rec.period_start
10427                                                );
10428                l_newamt :=
10429                   oks_extwar_util_pvt.round_currency_amt
10430                                                  (  p_kdtl_rec.service_amount
10431                                                   * l_xfer_days
10432                                                   / l_days,
10433                                                   p_kdtl_rec.service_currency
10434                                                  );
10435             ELSE
10436                OPEN l_getprice_csr (p_kdtl_rec.object_line_id);
10437 
10438                FETCH l_getprice_csr
10439                 INTO l_new_price;
10440 
10441                CLOSE l_getprice_csr;
10442 
10443                l_newamt := p_kdtl_rec.service_amount - l_new_price;
10444             END IF;
10445          ELSE
10446             l_newamt := 0;
10447          END IF;
10448 
10449          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
10450          THEN
10451             fnd_log.STRING (fnd_log.level_statement,
10452                                g_module_current
10453                             || '.CREATE_K_SYSTEM_TRF.Create_Contract_subline',
10454                             'New amount = ' || l_newamt
10455                            );
10456          END IF;
10457 
10458          l_covd_rec.k_id := p_hdr_id;
10459          l_covd_rec.rty_code := 'CONTRACTTRANSFERORDER';
10460          l_covd_rec.attach_2_line_id := p_line_id;
10461          l_covd_rec.line_number := okc_api.g_miss_char;
10462          l_covd_rec.customer_product_id := p_kdtl_rec.old_cp_id;
10463          l_covd_rec.product_segment1 := p_kdtl_rec.prod_name;
10464          l_covd_rec.product_desc := p_kdtl_rec.prod_description;
10465          l_covd_rec.product_start_date := TRUNC (l_trfdt);
10466          l_covd_rec.product_end_date := TRUNC (p_kdtl_rec.prod_edt);
10467          l_covd_rec.quantity := p_kdtl_rec.cp_qty;
10468          l_covd_rec.list_price := p_kdtl_rec.service_unit_price;
10469          l_covd_rec.uom_code := p_kdtl_rec.uom_code;
10470          l_covd_rec.negotiated_amount := l_newamt;
10471          l_covd_rec.standard_coverage := p_kdtl_rec.standard_cov_yn;
10472          l_covd_rec.price_uom := p_kdtl_rec.price_uom_sl;
10473          l_covd_rec.toplvl_uom_code := p_kdtl_rec.toplvl_uom_code;
10474          --mchoudha added for bug#5233956
10475          l_covd_rec.toplvl_price_qty := p_kdtl_rec.toplvl_price_qty;
10476 
10477          IF p_kdtl_rec.lse_id = 25
10478          THEN
10479             l_warranty_flag := 'E';
10480          ELSIF p_kdtl_rec.lse_id = 9 AND p_kdtl_rec.scs_code = 'SERVICE'
10481          THEN
10482             l_warranty_flag := 'S';
10483          ELSIF p_kdtl_rec.lse_id = 18
10484          THEN
10485             l_warranty_flag := 'W';
10486             l_covd_rec.line_renewal_type := 'DNR'  ;
10487          ELSIF p_kdtl_rec.lse_id = 9 AND p_kdtl_rec.scs_code = 'SUBSCRIPTION'
10488          THEN
10489             l_warranty_flag := 'SU';
10490 
10491 
10492          END IF;
10493 
10494          l_covd_rec.warranty_flag := l_warranty_flag;
10495          -- l_covd_rec.line_renewal_type               := p_kdtl_rec.cp_line_renewal_type;
10496          l_covd_rec.currency_code := p_kdtl_rec.service_currency;
10497 
10498          OPEN l_serv_csr (p_kdtl_rec.service_inventory_id);
10499 
10500          FETCH l_serv_csr
10501           INTO l_covd_rec.attach_2_line_desc;
10502 
10503          CLOSE l_serv_csr;
10504 
10505          l_covd_rec.prod_item_id := p_kdtl_rec.prod_inventory_item;
10506 
10507          IF l_covd_rec.warranty_flag = 'W'
10508          THEN
10509             IF l_covd_rec.product_start_date > SYSDATE
10510             THEN
10511                get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
10512             ELSE
10513                get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
10514             END IF;
10515 
10516             l_covd_rec.product_sts_code := l_sts_code;
10517          ELSE
10518             get_sts_code (p_kdtl_rec.prod_sts_code,
10519                           NULL,
10520                           l_ste_code,
10521                           l_sts_code
10522                          );
10523 
10524             IF l_ste_code = 'ENTERED'
10525             THEN
10526                l_covd_rec.product_sts_code := l_sts_code;
10527             ELSE
10528                l_status := fnd_profile.VALUE ('OKS_TRANSFER_STATUS');
10529 
10530                IF l_status = 'ACTIVE'
10531                THEN
10532                   IF l_covd_rec.product_start_date > SYSDATE
10533                   THEN
10534                      get_sts_code ('SIGNED', NULL, l_ste_code, l_sts_code);
10535                   ELSE
10536                      get_sts_code ('ACTIVE', NULL, l_ste_code, l_sts_code);
10537                   END IF;
10538                ELSE
10539                   get_sts_code (l_status, NULL, l_ste_code, l_sts_code);
10540                END IF;
10541 
10542                l_covd_rec.product_sts_code := l_sts_code;
10543             END IF;
10544          END IF;
10545 
10546          oks_extwarprgm_pvt.create_k_covered_levels
10547                                        (p_k_covd_rec         => l_covd_rec,
10548                                         p_price_attribs      => p_price_attribs_in,
10549                                         p_caller             => 'ST',
10550                                         x_order_error        => l_temp,
10551                                         x_covlvl_id          => l_covlvl_id,
10552                                         x_update_line        => l_update_top_line,
10553                                         x_return_status      => l_return_status,
10554                                         x_msg_count          => x_msg_count,
10555                                         x_msg_data           => x_msg_data
10556                                        );
10557 
10558          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
10559          THEN
10560             fnd_log.STRING (fnd_log.level_event,
10561                                g_module_current
10562                             || '.CREATE_K_SYSTEM_TRF.Create_Contract_subline',
10563                             'New amount = ' || l_newamt
10564                            );
10565          END IF;
10566 
10567          IF NOT l_return_status = 'S'
10568          THEN
10569             RAISE g_exception_halt_validation;
10570          ELSE
10571             x_subline_id := l_covlvl_id;
10572             x_update_top_line := l_update_top_line;
10573          END IF;
10574       EXCEPTION
10575          WHEN g_exception_halt_validation
10576          THEN
10577             x_return_status := l_return_status;
10578             NULL;
10579          WHEN OTHERS
10580          THEN
10581             x_return_status := okc_api.g_ret_sts_unexp_error;
10582             okc_api.set_message (g_app_name,
10583                                  g_unexpected_error,
10584                                  g_sqlcode_token,
10585                                  SQLCODE,
10586                                  g_sqlerrm_token,
10587                                  SQLERRM
10588                                 );
10589       END create_contract_subline;
10590 
10591       PROCEDURE create_billing_schedule (
10592          p_line_id         IN              NUMBER,
10593          p_covlvl_id       IN              NUMBER,
10594          P_period_start    IN              Varchar2,
10595          p_start_date      IN              DATE,
10596          p_end_date        IN              DATE,
10597          p_update_line     IN              VARCHAR2,
10598          x_return_status   OUT NOCOPY      VARCHAR2,
10599          x_msg_data        OUT NOCOPY      VARCHAR2,
10600          x_msg_count       OUT NOCOPY      NUMBER
10601       )
10602       IS
10603          l_strmlvl_id      NUMBER;
10604          l_sll_tbl         oks_bill_sch.streamlvl_tbl;
10605          l_return_status   VARCHAR2 (1);
10606          l_duration        NUMBER;
10607          l_timeunits       VARCHAR2 (25);
10608          l_bil_sch_out     oks_bill_sch.itembillsch_tbl;
10609          l_uom_code         Varchar2(240);
10610          Cursor get_day_uom_code IS
10611           select uom_code
10612            from okc_time_code_units_v
10613            where tce_code='DAY'
10614            and quantity=1;
10615 
10616 
10617 
10618       BEGIN
10619          l_strmlvl_id := check_strmlvl_exists (p_line_id);
10620 
10621          IF l_strmlvl_id IS NULL
10622          THEN
10623 
10624           If p_period_start = 'CALENDAR' Then
10625                        Open get_day_uom_code;
10626 	                 Fetch get_day_uom_code into l_uom_code;
10627 	                 Close get_day_uom_code;
10628 
10629 
10630                       l_sll_tbl (1).cle_id                := p_line_id;
10631                       l_sll_tbl (1).sequence_no           := 1;
10632                       l_sll_tbl (1).level_periods         := 1;
10633                       l_sll_tbl (1).uom_code              := l_uom_code;
10634                       l_sll_tbl (1).uom_per_period        := p_end_date - p_start_date + 1;
10635                       l_sll_tbl (1).invoice_offset_days   := 0;
10636                       l_sll_tbl (1).interface_offset_days := 0;
10637                       l_sll_tbl (1).level_amount          := null;
10638 
10639 
10640 
10641 
10642 
10643           Else
10644             okc_time_util_pub.get_duration
10645                                         (p_start_date         => TRUNC
10646                                                                     (p_start_date
10647                                                                     ),
10648                                          p_end_date           => p_end_date,
10649                                          x_duration           => l_duration,
10650                                          x_timeunit           => l_timeunits,
10651                                          x_return_status      => l_return_status
10652                                         );
10653 
10654             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
10655             THEN
10656                fnd_log.STRING
10657                         (fnd_log.level_event,
10658                             g_module_current
10659                          || '.CREATE_K_SYSTEM_TRF.Create_billing_schedule',
10660                             'Okc_time_util_pub.get_duration(Return status = '
10661                          || l_return_status
10662                          || ',Duration = '
10663                          || l_duration
10664                          || ',Time Units = '
10665                          || l_timeunits
10666                          || ')'
10667                         );
10668             END IF;
10669 
10670             IF NOT l_return_status = 'S'
10671             THEN
10672                RAISE g_exception_halt_validation;
10673             END IF;
10674 
10675             l_sll_tbl (1).cle_id := p_line_id;
10676             --l_sll_tbl(1).billing_type                := 'T';
10677             l_sll_tbl (1).uom_code := l_timeunits;
10678             l_sll_tbl (1).sequence_no := '1';
10679             l_sll_tbl (1).level_periods := '1';
10680             --l_sll_tbl (1).start_date := TRUNC (l_trfdt);
10681             l_sll_tbl (1).uom_per_period := l_duration;
10682             l_sll_tbl (1).advance_periods := NULL;
10683             l_sll_tbl (1).level_amount := NULL;
10684             l_sll_tbl (1).invoice_offset_days := NULL;
10685             l_sll_tbl (1).interface_offset_days := NULL;
10686 
10687           End If;
10688             oks_bill_sch.create_bill_sch_rules
10689                                           (p_billing_type         => 'T',
10690                                            p_sll_tbl              => l_sll_tbl,
10691                                            p_invoice_rule_id      => -2,
10692                                            x_bil_sch_out_tbl      => l_bil_sch_out,
10693                                            x_return_status        => l_return_status
10694                                           );
10695 
10696             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
10697             THEN
10698                fnd_log.STRING
10699                     (fnd_log.level_event,
10700                         g_module_current
10701                      || '.CREATE_K_SYSTEM_TRF.Create_billing_schedule',
10702                         'oks_bill_sch.create_bill_sch_rules(Return status = '
10703                      || l_return_status
10704                      || ')'
10705                     );
10706             END IF;
10707 
10708             IF l_return_status <> okc_api.g_ret_sts_success
10709             THEN
10710                okc_api.set_message (g_app_name,
10711                                     g_required_value,
10712                                     g_col_name_token,
10713                                     'Sched Billing Rule (LINE)'
10714                                    );
10715                RAISE g_exception_halt_validation;
10716             END IF;
10717                   /* OKS_BILL_UTIL_PUB.CREATE_BCL_FOR_OM
10718                    (
10719                         P_LINE_ID  => p_line_id ,
10720                         X_RETURN_STATUS => l_return_status
10721                     );
10722           If(G_FND_LOG_OPTION = 'Y') Then
10723                    FND_FILE.PUT_LINE (FND_FILE.LOG,'IBNEW :- CREATE_BCL_FOR_OM ' || l_return_status );
10724          OKS_RENEW_PVT.DEBUG_LOG( 'OKS_EXTWARPRGM_PVT.CREATE_K_SYSTEM_TRF :: CREATE_BCL_FOR_OM '|| l_return_status);
10725          End if;
10726 
10727                    If Not l_return_status = 'S' then
10728                         Raise G_EXCEPTION_HALT_VALIDATION;
10729                    End if;
10730                    */
10731          ELSE
10732             IF check_lvlelements_exists (p_line_id)
10733             THEN
10734                IF p_update_line = 'Y'
10735                THEN
10736                   oks_bill_sch.update_om_sll_date
10737                                          (p_top_line_id        => p_line_id,
10738                                           x_return_status      => l_return_status,
10739                                           x_msg_count          => x_msg_count,
10740                                           x_msg_data           => x_msg_data
10741                                          );
10742 
10743                   -- FND_FILE.PUT_LINE( fnd_file.LOG, 'IBNEW :- Update_OM_SLL_Date ' || l_return_status );
10744                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
10745                      )
10746                   THEN
10747                      fnd_log.STRING
10748                         (fnd_log.level_event,
10749                             g_module_current
10750                          || '.CREATE_K_SYSTEM_TRF.Create_billing_schedule',
10751                             'oks_bill_sch.update_om_sll_date(Return status = '
10752                          || l_return_status
10753                          || ')'
10754                         );
10755                   END IF;
10756 
10757                   IF NOT l_return_status = 'S'
10758                   THEN
10759                      RAISE g_exception_halt_validation;
10760                   END IF;
10761                ELSE
10762                   oks_bill_sch.create_bill_sch_cp
10763                                          (p_top_line_id        => p_line_id,
10764                                           p_cp_line_id         => p_covlvl_id,
10765                                           p_cp_new             => 'Y',
10766                                           x_return_status      => l_return_status,
10767                                           x_msg_count          => x_msg_count,
10768                                           x_msg_data           => x_msg_data
10769                                          );
10770 
10771                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
10772                      )
10773                   THEN
10774                      fnd_log.STRING
10775                         (fnd_log.level_event,
10776                             g_module_current
10777                          || '.CREATE_K_SYSTEM_TRF.Create_billing_schedule',
10778                             'oks_bill_sch.create_bill_sch_cp(Return status = '
10779                          || l_return_status
10780                          || ')'
10781                         );
10782                   END IF;
10783 
10784                   IF NOT l_return_status = 'S'
10785                   THEN
10786                      RAISE g_exception_halt_validation;
10787                   END IF;
10788                END IF;
10789                       /* OKS_BILL_UTIL_PUB.CREATE_BCL_FOR_OM
10790                        (
10791                        P_LINE_ID  => p_line_id ,
10792                        X_RETURN_STATUS => l_return_status
10793                        );
10794                       -- FND_FILE.PUT_LINE (FND_FILE.LOG,'IBNEW :- CREATE_BCL_FOR_OM ' || l_return_status );
10795             If(G_FND_LOG_OPTION = 'Y') Then
10796                        OKS_RENEW_PVT.DEBUG_LOG( 'OKS_EXTWARPRGM_PVT.CREATE_K_SYSTEM_TRF :: CREATE_BCL_FOR_OM '|| l_return_status);
10797             End if;
10798                        If Not l_return_status = 'S' then
10799                             Raise G_EXCEPTION_HALT_VALIDATION;
10800                        End if;
10801                        */
10802             ELSE
10803                okc_api.set_message (g_app_name,
10804                                     g_required_value,
10805                                     g_col_name_token,
10806                                     'level elements NOT EXIST'
10807                                    );
10808                RAISE g_exception_halt_validation;
10809             END IF;
10810          END IF;                                                -- strmlvl end
10811 
10812          x_return_status := l_return_status;
10813       EXCEPTION
10814          WHEN g_exception_halt_validation
10815          THEN
10816             x_return_status := l_return_status;
10817             NULL;
10818          WHEN OTHERS
10819          THEN
10820             x_return_status := okc_api.g_ret_sts_unexp_error;
10821             okc_api.set_message (g_app_name,
10822                                  g_unexpected_error,
10823                                  g_sqlcode_token,
10824                                  SQLCODE,
10825                                  g_sqlerrm_token,
10826                                  SQLERRM
10827                                 );
10828       END;
10829    BEGIN
10830       x_return_status := okc_api.g_ret_sts_success;
10831       l_old_cp_id := 0;
10832 
10833       IF p_kdtl_tbl.COUNT > 0
10834       THEN
10835          l_ctr := p_kdtl_tbl.FIRST;
10836 
10837          LOOP
10838 
10839 
10840             get_sts_code (NULL,
10841                           p_kdtl_tbl (l_ctr).hdr_sts,
10842                           l_ste_code,
10843                           l_sts_code
10844                          );
10845 
10846             IF l_ste_code = 'HOLD'
10847             THEN
10848                l_return_status := okc_api.g_ret_sts_error;
10849 
10850                IF fnd_log.level_error >= fnd_log.g_current_runtime_level
10851                THEN
10852                   fnd_log.STRING (fnd_log.level_error,
10853                                      g_module_current
10854                                   || '.CREATE_CONTRACT_IBTERMINATE.ERROR',
10855                                   'Contract in QA_HOLD status'
10856                                  );
10857                END IF;
10858 
10859                okc_api.set_message (g_app_name,
10860                                     g_invalid_value,
10861                                     g_col_name_token,
10862                                        'Termination not allowed .Contract '
10863                                     || p_kdtl_tbl (l_ctr).contract_number
10864                                     || 'is in QA_HOLD status'
10865                                    );
10866                RAISE g_exception_halt_validation;
10867             END IF;
10868 
10869             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
10870             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
10871          END LOOP;
10872       END IF;
10873 
10874 
10875       IF p_kdtl_tbl.COUNT > 0
10876       THEN
10877          l_ctr := p_kdtl_tbl.FIRST;
10878 
10879          LOOP
10880             --Fix for Bug 5406201
10881             l_clev_tbl_in.delete;
10882             l_chrv_tbl_in.delete;
10883             okc_context.set_okc_org_context
10884                                            (p_kdtl_tbl (l_ctr).hdr_org_id,
10885                                             p_kdtl_tbl (l_ctr).organization_id
10886                                            );
10887             get_party_id (p_kdtl_tbl (l_ctr).new_account_id,
10888                           l_party_id,
10889                           l_party_name
10890                          );
10891 
10892             OPEN l_serv_csr (p_kdtl_tbl (l_ctr).service_inventory_id);
10893 
10894             FETCH l_serv_csr
10895              INTO l_service_name;
10896 
10897             CLOSE l_serv_csr;
10898 
10899             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
10900             THEN
10901                fnd_log.STRING (fnd_log.level_statement,
10902                                g_module_current || '.CREATE_K_SYSTEM_TRF',
10903                                   'new cust acct id = '
10904                                || p_kdtl_tbl (l_ctr).new_account_id
10905                                || ',party id = '
10906                                || l_party_id
10907                               );
10908             END IF;
10909 
10910             IF p_kdtl_tbl (l_ctr).party_id <> l_party_id
10911             THEN
10912                l_inst_dtls_tbl.DELETE;
10913                l_ptr := l_ptr + 1;
10914                l_trf_option := NULL;
10915 
10916                OPEN l_cov_csr (p_kdtl_tbl (l_ctr).service_line_id);
10917 
10918                FETCH l_cov_csr
10919                 INTO l_cov_rec;
10920 
10921                IF l_cov_csr%FOUND
10922                THEN
10923                   l_trf_option := l_cov_rec.transfer_option;
10924                END IF;
10925 
10926                --errorout_n('l_trf_option'||l_trf_option);
10927                CLOSE l_cov_csr;
10928 
10929                l_trfdt := p_kdtl_tbl (l_ctr).transfer_date;
10930 
10931                IF (TRUNC (l_trfdt) <= TRUNC (p_kdtl_tbl (l_ctr).prod_sdt))
10932                THEN
10933                   l_trfdt := p_kdtl_tbl (l_ctr).prod_sdt;
10934                END IF;
10935 
10936                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
10937                THEN
10938                   fnd_log.STRING (fnd_log.level_statement,
10939                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
10940                                      'Transfer Option = '
10941                                   || l_trf_option
10942                                   || ',For service line = '
10943                                   || p_kdtl_tbl (l_ctr).service_line_id
10944                                  );
10945                END IF;
10946 
10947 /*-------------------------------------------------*/
10948 -- If Transfer Option Is "No Change to Contract"
10949 /*-------------------------------------------------*/
10950                IF l_trf_option = 'NO_CHANGE'
10951                THEN
10952                   NULL;
10953                END IF;
10954 
10955  /*-------------------------------------------------*/
10956  --If Transfer Option Is "Terminate upon Transfer"
10957  /*-------------------------------------------------*/
10958  /*----------------------------------------------------------------------------------------*/
10959  --If Transfer option Is "No Change if Transfer within group otherwise Terminate Contract".
10960 /*----------------------------------------------------------------------------------------*/
10961                IF l_trf_option IN ('TERM', 'TERM_NO_REL')
10962                THEN
10963                   l_ptr := 1;
10964                   --Check if the CUstomers are related by the value defined in profile
10965                   l_relationship := NULL;
10966 
10967                   IF l_trf_option = 'TERM_NO_REL'
10968                   THEN
10969                      l_relationship_type :=
10970                                       fnd_profile.VALUE ('OKS_TRF_PARTY_REL');
10971                      get_party_id (p_kdtl_tbl (l_ctr).new_account_id,
10972                                    l_new_party_id,
10973                                    l_new_party_name
10974                                   );
10975                      get_party_id (p_kdtl_tbl (l_ctr).old_account_id,
10976                                    l_old_party_id,
10977                                    l_old_party_name
10978                                   );
10979 
10980                      OPEN l_cust_rel_csr (l_old_party_id,
10981                                           l_new_party_id,
10982                                           l_relationship_type,
10983                                           p_kdtl_tbl (l_ctr).transfer_date
10984                                          );
10985 
10986                      FETCH l_cust_rel_csr
10987                       INTO l_relationship;
10988 
10989                      CLOSE l_cust_rel_csr;
10990 
10991                      IF fnd_log.level_statement >=
10992                                                fnd_log.g_current_runtime_level
10993                      THEN
10994                         fnd_log.STRING
10995                                     (fnd_log.level_statement,
10996                                      g_module_current
10997                                      || '.CREATE_K_SYSTEM_TRF',
10998                                         'TERM_NO_REL profile relationship = '
10999                                      || l_relationship_type
11000                                      || ', Actual Relationship = '
11001                                      || l_relationship
11002                                     );
11003                      END IF;
11004                   END IF;
11005 
11006                   IF l_relationship IS NULL
11007                   THEN
11008 
11009 
11010 			-- Check Product status
11011                         get_sts_code (NULL,
11012                                    p_kdtl_tbl (l_ctr).prod_sts_code,
11013                                    l_ste_code,
11014                                    l_sts_code
11015                                   );
11016 
11017                      IF fnd_log.level_statement >=
11018                                                fnd_log.g_current_runtime_level
11019                      THEN
11020                         fnd_log.STRING (fnd_log.level_statement,
11021                                            g_module_current
11022                                         || '.CREATE_K_SYSTEM_TRF',
11023                                            'Product status Code = '
11024                                         || p_kdtl_tbl (l_ctr).prod_sts_code
11025                                         || ', Ste code = '
11026                                         || l_ste_code
11027                                        );
11028                      END IF;
11029 
11030                      IF l_ste_code <> 'ENTERED'
11031                      THEN
11032                         --Terminate the CUrrent Owners Contract subline with date terminated as Transfer date
11033                         IF fnd_log.level_statement >=
11034                                               fnd_log.g_current_runtime_level
11035                         THEN
11036                            fnd_log.STRING
11037                               (fnd_log.level_statement,
11038                                g_module_current || '.CREATE_K_SYSTEM_TRF',
11039                                   'OKS Raise credit memo profile option value  ='
11040                                || fnd_profile.VALUE
11041                                            ('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT')
11042                               );
11043                         END IF;
11044 
11045                         /*IF    fnd_profile.VALUE('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT') = 'YES' OR fnd_profile.VALUE('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT') IS NULL THEN
11046                                l_suppress_credit := 'N';
11047                         ELSE
11048                                l_suppress_credit := 'Y';
11049                         END IF;*/
11050                         l_credit_amount :=
11051                            oks_ib_util_pvt.get_credit_option
11052                                               (p_kdtl_tbl (l_ctr).party_id,
11053                                                p_kdtl_tbl (l_ctr).hdr_org_id,
11054                                                p_kdtl_tbl (l_ctr).transfer_date
11055                                               );
11056 
11057                         IF UPPER (l_credit_amount) = 'FULL'
11058                         THEN
11059                            l_full_credit := 'Y';
11060                            l_suppress_credit := 'N';
11061                            --l_trfdt := p_kdtl_tbl( l_ctr ).prod_sdt;
11062                            l_term_date_flag := 'N';
11063                         ELSIF UPPER (l_credit_amount) = 'NONE'
11064                         THEN
11065                            l_suppress_credit := 'Y';
11066                            l_full_credit := 'N';
11067                            l_term_date_flag := 'N';
11068                         ELSIF UPPER (l_credit_amount) = 'CALCULATED'
11069                         THEN
11070                            l_suppress_credit := 'N';
11071                            l_full_credit := 'N';
11072                            l_term_date_flag := 'N';
11073                         END IF;
11074 
11075                         IF (TRUNC (p_kdtl_tbl (l_ctr).prod_edt) <
11076                                                                TRUNC (l_trfdt)
11077                            )
11078                         THEN
11079                            l_suppress_credit := 'Y';
11080                            l_full_credit := 'N';
11081                            l_trfdt := p_kdtl_tbl (l_ctr).prod_edt + 1;
11082                            l_term_date_flag := 'Y';
11083                         END IF;
11084 
11085 
11086 
11087                         oks_bill_rec_pub.pre_terminate_cp
11088                                 (p_calledfrom                => -1,
11089                                  p_cle_id                    => p_kdtl_tbl
11090                                                                         (l_ctr).object_line_id,
11091                                  p_termination_date          => TRUNC (l_trfdt),
11092                                  p_terminate_reason          => 'TRF',
11093                                  p_override_amount           => NULL,
11094                                  p_con_terminate_amount      => NULL,
11095                                  p_termination_amount        => NULL,
11096                                  p_suppress_credit           => l_suppress_credit,
11097                                  --p_existing_credit             => 0,
11098                                  p_full_credit               => l_full_credit,
11099                                  --'N',
11100                                  p_term_date_flag            => l_term_date_flag,
11101                                  p_term_cancel_source        => 'IBTRANSFER',
11102                                  x_return_status             => l_return_status
11103                                 );
11104 
11105                         IF (fnd_log.level_event >=
11106                                                fnd_log.g_current_runtime_level
11107                            )
11108                         THEN
11109                            fnd_log.STRING
11110                               (fnd_log.level_event,
11111                                g_module_current || '.CREATE_K_SYSTEM_TRF',
11112                                   'oks_bill_rec_pub.Pre_terminate_cp(Return status ='
11113                                || l_return_status
11114                                || ')'
11115                               );
11116                         END IF;
11117 
11118                         IF NOT l_return_status = okc_api.g_ret_sts_success
11119                         THEN
11120                            RAISE g_exception_halt_validation;
11121                         END IF;
11122 
11123                         l_inst_dtls_tbl (l_ptr).subline_date_terminated :=
11124                                                                TRUNC (l_trfdt);
11125                         date_terminated := NULL;
11126                         oks_ib_util_pvt.check_termcancel_lines
11127                                            (p_kdtl_tbl (l_ctr).service_line_id,
11128                                             'SL',
11129                                             'T',
11130                                             date_terminated
11131                                            );
11132 
11133                         IF date_terminated IS NOT NULL
11134                         THEN
11135                            get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
11136 
11137                            l_clev_tbl_in (1).ID :=
11138                                            p_kdtl_tbl (l_ctr).service_line_id;
11139                            l_clev_tbl_in (1).date_terminated := TRUNC (date_terminated);
11140                            l_clev_tbl_in (1).trn_code := 'TRF';
11141                            l_clev_tbl_in (1).term_cancel_source := 'IBTRANSFER';
11142                            If TRUNC (date_terminated)<= trunc(sysdate) Then
11143                                  l_clev_tbl_in (1).sts_code := l_sts_code;
11144                            End If;
11145 
11146                            okc_contract_pub.update_contract_line
11147                                       (p_api_version            => l_api_version,
11148                                        p_init_msg_list          => l_init_msg_list,
11149                                        p_restricted_update      => okc_api.g_true,
11150                                        x_return_status          => l_return_status,
11151                                        x_msg_count              => x_msg_count,
11152                                        x_msg_data               => x_msg_data,
11153                                        p_clev_tbl               => l_clev_tbl_in,
11154                                        x_clev_tbl               => l_clev_tbl_out
11155                                       );
11156 
11157                            IF (fnd_log.level_event >=
11158                                                fnd_log.g_current_runtime_level
11159                               )
11160                            THEN
11161                               fnd_log.STRING
11162                                  (fnd_log.level_event,
11163                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
11164                                      'okc_contract_pub.update_contract_line(Return status = '
11165                                   || l_return_status
11166                                   || ')'
11167                                  );
11168                            END IF;
11169 
11170                            IF NOT l_return_status = okc_api.g_ret_sts_success
11171                            THEN
11172                               RAISE g_exception_halt_validation;
11173                            END IF;
11174                         END IF;
11175 
11176                         date_terminated := NULL;
11177                         oks_ib_util_pvt.check_termcancel_lines
11178                                                     (p_kdtl_tbl (l_ctr).hdr_id,
11179                                                      'TL',
11180                                                      'T',
11181                                                      date_terminated
11182                                                     );
11183 
11184                         IF date_terminated IS NOT NULL
11185                         THEN
11186                            get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
11187 
11188                            l_chrv_tbl_in (1).ID := p_kdtl_tbl (l_ctr).hdr_id;
11189                            l_chrv_tbl_in (1).date_terminated := TRUNC (date_terminated);
11190                            l_chrv_tbl_in (1).trn_code := 'TRF';
11191                            l_chrv_tbl_in (1).term_cancel_source := 'IBTRANSFER';
11192                            If TRUNC (date_terminated)<= trunc(sysdate) Then
11193 		                      l_chrv_tbl_in (1).sts_code  := l_sts_code;
11194                            End If;
11195 
11196                            okc_contract_pub.update_contract_header
11197                                       (p_api_version            => l_api_version,
11198                                        p_init_msg_list          => l_init_msg_list,
11199                                        p_restricted_update      => okc_api.g_true,
11200                                        x_return_status          => l_return_status,
11201                                        x_msg_count              => x_msg_count,
11202                                        x_msg_data               => x_msg_data,
11203                                        p_chrv_tbl               => l_chrv_tbl_in,
11204                                        x_chrv_tbl               => l_chrv_tbl_out
11205                                       );
11206 
11207                            IF (fnd_log.level_event >=
11208                                                fnd_log.g_current_runtime_level
11209                               )
11210                            THEN
11211                               fnd_log.STRING
11212                                  (fnd_log.level_event,
11213                                      g_module_current
11214                                   || '.Update_Hdr_Dates.external_call.after',
11215                                      'okc_contract_pub.update_contract_header(Return status = '
11216                                   || l_return_status
11217                                   || ')'
11218                                  );
11219                            END IF;
11220 
11221                            IF NOT l_return_status = okc_api.g_ret_sts_success
11222                            THEN
11223                               RAISE g_exception_halt_validation;
11224                            END IF;
11225                         END IF;
11226 
11227                         launch_workflow
11228                            (   'INSTALL BASE ACTIVITY : TRANSFER TERMINATE SUBLINE '
11229                             || fnd_global.local_chr (10)
11230                             || 'Contract Number       :                     '
11231                             || get_contract_number (p_kdtl_tbl (l_ctr).hdr_id)
11232                             || fnd_global.local_chr (10)
11233                             || 'Service Terminated    :                     '
11234                             || l_service_name
11235                            );
11236                      ELSIF l_ste_code = 'ENTERED'
11237                      THEN
11238                         IF (TRUNC (p_kdtl_tbl (l_ctr).prod_edt) <
11239                                                                TRUNC (l_trfdt)
11240                            )
11241                         THEN
11242                            l_trfdt := p_kdtl_tbl (l_ctr).prod_edt + 1;
11243                         END IF;
11244 
11245 		      -- added for the bug # 6000133
11246 		      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
11247 
11248                         oks_change_status_pvt.update_line_status
11249                            (x_return_status           => l_return_status,
11250                             x_msg_data                => x_msg_data,
11251                             x_msg_count               => x_msg_count,
11252                             p_init_msg_list           => 'F',
11253                             p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
11254                             p_cle_id                  => p_kdtl_tbl (l_ctr).object_line_id,
11255                             p_new_sts_code            => l_sts_code,
11256                             p_canc_reason_code        => 'TRANSFER',
11257                             p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
11258                             p_old_ste_code            => 'ENTERED',
11259                             p_new_ste_code            => 'CANCELLED',
11260                             p_term_cancel_source      => 'IBTRANSFER',
11261                             p_date_cancelled          => TRUNC (l_trfdt),
11262                             p_comments                => NULL,
11263                             p_validate_status         => 'N'
11264                            );
11265 
11266                         IF (fnd_log.level_event >=
11267                                                fnd_log.g_current_runtime_level
11268                            )
11269                         THEN
11270                            fnd_log.STRING
11271                               (fnd_log.level_event,
11272                                g_module_current || '.CREATE_K_SYSTEM_TRF',
11273                                   'okc_contract_pub.update_contract_line(Return status ='
11274                                || l_return_status
11275                                || ')'
11276                               );
11277                         END IF;
11278 
11279                         IF NOT l_return_status = okc_api.g_ret_sts_success
11280                         THEN
11281                            RAISE g_exception_halt_validation;
11282                         END IF;
11283 
11284                         l_inst_dtls_tbl (l_ptr).date_cancelled :=
11285                                                                TRUNC (l_trfdt);
11286                         date_cancelled := NULL;
11287                         oks_ib_util_pvt.check_termcancel_lines
11288                                            (p_kdtl_tbl (l_ctr).service_line_id,
11289                                             'SL',
11290                                             'C',
11291                                             date_cancelled
11292                                            );
11293 
11294                         IF date_cancelled IS NOT NULL
11295                         THEN
11296 
11297 		      -- added for the bug # 6000133
11298 		      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
11299 
11300 			   oks_change_status_pvt.update_line_status
11301                               (x_return_status           => l_return_status,
11302                                x_msg_data                => x_msg_data,
11303                                x_msg_count               => x_msg_count,
11304                                p_init_msg_list           => 'F',
11305                                p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
11306                                p_cle_id                  => p_kdtl_tbl (l_ctr).service_line_id,
11307                                p_new_sts_code            => l_sts_code,
11308                                p_canc_reason_code        => 'TRANSFER',
11309                                p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
11310                                p_old_ste_code            => 'ENTERED',
11311                                p_new_ste_code            => 'CANCELLED',
11312                                p_term_cancel_source      => 'IBTRANSFER',
11313                                p_date_cancelled          => TRUNC
11314                                                                (date_cancelled),
11315                                p_comments                => NULL,
11316                                p_validate_status         => 'N'
11317                               );
11318 
11319                            IF (fnd_log.level_event >=
11320                                                fnd_log.g_current_runtime_level
11321                               )
11322                            THEN
11323                               fnd_log.STRING
11324                                  (fnd_log.level_event,
11325                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
11326                                      'okc_contract_pub.update_contract_line(Return status = '
11327                                   || l_return_status
11328                                   || ')'
11329                                  );
11330                            END IF;
11331 
11332                            IF NOT l_return_status = okc_api.g_ret_sts_success
11333                            THEN
11334                               RAISE g_exception_halt_validation;
11335                            END IF;
11336                         END IF;
11337 
11338                         date_cancelled := NULL;
11339                         oks_ib_util_pvt.check_termcancel_lines
11340                                                     (p_kdtl_tbl (l_ctr).hdr_id,
11341                                                      'TL',
11342                                                      'C',
11343                                                      date_cancelled
11344                                                     );
11345 
11346                         IF date_cancelled IS NOT NULL
11347                         THEN
11348 
11349 		      -- added for the bug # 6000133
11350 		      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
11351 
11352 			   oks_change_status_pvt.update_header_status
11353                               (x_return_status           => l_return_status,
11354                                x_msg_data                => x_msg_data,
11355                                x_msg_count               => x_msg_count,
11356                                p_init_msg_list           => 'F',
11357                                p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
11358                                p_new_sts_code            => l_sts_code,
11359                                p_canc_reason_code        => 'TRANSFER',
11360                                p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
11361                                p_comments                => NULL,
11362                                p_term_cancel_source      => 'IBTRANSFER',
11363                                p_date_cancelled          => TRUNC
11364                                                                (date_cancelled),
11365                                p_validate_status         => 'N'
11366                               );
11367 
11368                            IF (fnd_log.level_event >=
11369                                                fnd_log.g_current_runtime_level
11370                               )
11371                            THEN
11372                               fnd_log.STRING
11373                                  (fnd_log.level_event,
11374                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
11375                                      'oks_change_status_pvt.Update_header_status(Return status = '
11376                                   || l_return_status
11377                                   || ')'
11378                                  );
11379                            END IF;
11380 
11381                            IF NOT l_return_status = okc_api.g_ret_sts_success
11382                            THEN
11383                               RAISE g_exception_halt_validation;
11384                            END IF;
11385                         END IF;                   --Date_Cancelled Is Not Null
11386                      END IF;                          -- ste_code <> 'ENTERED'
11387 
11388                      l_date_terminated := NULL;
11389                      l_subline_price := NULL;
11390 
11391                      OPEN l_subline_csr (p_kdtl_tbl (l_ctr).object_line_id);
11392 
11393                      FETCH l_subline_csr
11394                       INTO l_date_terminated, l_subline_price;
11395 
11396                      CLOSE l_subline_csr;
11397 
11398                      l_inst_dtls_tbl (l_ptr).transaction_date :=
11399                                               (p_kdtl_tbl (l_ctr).transaction_date);
11400                      l_inst_dtls_tbl (l_ptr).transaction_type := 'TRF';
11401                      l_inst_dtls_tbl (l_ptr).system_id :=
11402                                                   p_kdtl_tbl (l_ctr).system_id;
11403                      l_inst_dtls_tbl (l_ptr).transfer_option := l_trf_option;
11404                      l_inst_dtls_tbl (l_ptr).instance_id_new :=
11405                                                 p_kdtl_tbl (l_ctr).instance_id;
11406                      l_inst_dtls_tbl (l_ptr).instance_amt_new :=
11407                                                                l_subline_price;
11408                      --l_kdtl_tbl( l_ctr ).service_amount;
11409                      l_inst_dtls_tbl (l_ptr).instance_qty_new :=
11410                                                      p_kdtl_tbl (l_ctr).cp_qty;
11411                      l_inst_dtls_tbl (l_ptr).new_contract_id :=
11412                                                      p_kdtl_tbl (l_ctr).hdr_id;
11413                      l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
11414                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
11415                      l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
11416                                                     p_kdtl_tbl (l_ctr).hdr_edt;
11417                      l_inst_dtls_tbl (l_ptr).new_service_line_id :=
11418                                             p_kdtl_tbl (l_ctr).service_line_id;
11419                      l_inst_dtls_tbl (l_ptr).new_service_start_date :=
11420                                                 p_kdtl_tbl (l_ctr).service_sdt;
11421                      l_inst_dtls_tbl (l_ptr).new_service_end_date :=
11422                                                 p_kdtl_tbl (l_ctr).service_edt;
11423                      l_inst_dtls_tbl (l_ptr).new_subline_id :=
11424                                              p_kdtl_tbl (l_ctr).object_line_id;
11425                      l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
11426                                                    p_kdtl_tbl (l_ctr).prod_sdt;
11427                      l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
11428                                                    p_kdtl_tbl (l_ctr).prod_edt;
11429                      l_inst_dtls_tbl (l_ptr).new_customer :=
11430                                              p_kdtl_tbl (l_ctr).old_account_id;
11431                      l_inst_dtls_tbl (l_ptr).new_k_status :=
11432                                                     p_kdtl_tbl (l_ctr).hdr_sts;
11433                      l_inst_dtls_tbl (l_ptr).instance_amt_old :=
11434                                              p_kdtl_tbl (l_ctr).service_amount;
11435                      l_inst_dtls_tbl (l_ptr).instance_qty_old :=
11436                                                      p_kdtl_tbl (l_ctr).cp_qty;
11437                      l_inst_dtls_tbl (l_ptr).old_contract_id :=
11438                                                      p_kdtl_tbl (l_ctr).hdr_id;
11439                      l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
11440                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
11441                      l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
11442                                                     p_kdtl_tbl (l_ctr).hdr_edt;
11443                      l_inst_dtls_tbl (l_ptr).old_service_line_id :=
11444                                             p_kdtl_tbl (l_ctr).service_line_id;
11445                      l_inst_dtls_tbl (l_ptr).old_service_start_date :=
11446                                                 p_kdtl_tbl (l_ctr).service_sdt;
11447                      l_inst_dtls_tbl (l_ptr).old_service_end_date :=
11448                                                 p_kdtl_tbl (l_ctr).service_edt;
11449                      l_inst_dtls_tbl (l_ptr).old_subline_id :=
11450                                              p_kdtl_tbl (l_ctr).object_line_id;
11451                      l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
11452                                                    p_kdtl_tbl (l_ctr).prod_sdt;
11453                      l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
11454                                                    p_kdtl_tbl (l_ctr).prod_edt;
11455                      l_inst_dtls_tbl (l_ptr).old_customer :=
11456                                              p_kdtl_tbl (l_ctr).old_account_id;
11457                      l_inst_dtls_tbl (l_ptr).old_k_status :=
11458                                                     p_kdtl_tbl (l_ctr).hdr_sts;
11459                   END IF;                            -- l_relation_ship = null
11460                END IF;               --l_trf_option in ( 'TERM','TERM_NO_REL')
11461 
11462 /*------------------------------------------------------------------------------*/
11463  -- If Transfer option is "Transfer service to new owner, terminate old service".
11464 /*-------------------------------------------------------------------------------*/
11465                IF l_trf_option IN ('TRANS', 'TRANS_NO_REL')
11466                THEN
11467                   l_ptr := 1;
11468 
11469                    -- Check Subline status
11470                    get_sts_code (NULL,
11471                                 p_kdtl_tbl (l_ctr).prod_sts_code,
11472                                 l_ste_code,
11473                                 l_sts_code
11474                                );
11475 		   --Check if the Customers are related by the value defined in profile for  Transfer option 'TRANS_NO_REL'
11476 
11477                   /*1*/
11478                   IF l_trf_option = 'TRANS_NO_REL'
11479                   THEN
11480                      l_relationship := NULL;
11481                      l_relationship_type :=
11482                                       fnd_profile.VALUE ('OKS_TRF_PARTY_REL');
11483                      get_party_id (p_kdtl_tbl (l_ctr).new_account_id,
11484                                    l_new_party_id,
11485                                    l_new_party_name
11486                                   );
11487                      get_party_id (p_kdtl_tbl (l_ctr).old_account_id,
11488                                    l_old_party_id,
11489                                    l_old_party_name
11490                                   );
11491 
11492                      OPEN l_cust_rel_csr (l_old_party_id,
11493                                           l_new_party_id,
11494                                           l_relationship_type,
11495                                           p_kdtl_tbl (l_ctr).transfer_date
11496                                          );
11497 
11498                      FETCH l_cust_rel_csr
11499                       INTO l_relationship;
11500 
11501                      CLOSE l_cust_rel_csr;
11502                   /*E1*/
11503                   END IF;
11504 
11505                   IF fnd_log.level_statement >=
11506                                                fnd_log.g_current_runtime_level
11507                   THEN
11508                      fnd_log.STRING
11509                                    (fnd_log.level_statement,
11510                                     g_module_current || '.CREATE_K_SYSTEM_TRF',
11511                                        'TRANS_NO_REL profile relationship = '
11512                                     || l_relationship_type
11513                                     || ', Actual Relationship = '
11514                                     || l_relationship
11515                                    );
11516                   END IF;
11517 
11518                   /*2*/
11519                   IF l_relationship IS NULL OR l_trf_option = 'TRANS'
11520                   THEN
11521                      -- If Contract is in Entered Status then no updates on the original Contract
11522                      -- but Create a Contract for New Owner in Entered Status.
11523                      IF fnd_log.level_statement >=
11524                                               fnd_log.g_current_runtime_level
11525                      THEN
11526                         fnd_log.STRING (fnd_log.level_statement,
11527                                            g_module_current
11528                                         || '.CREATE_K_SYSTEM_TRF',
11529                                            'Product Status code = '
11530                                         || p_kdtl_tbl (l_ctr).prod_sts_code
11531                                         || ',Ste code = '
11532                                         || l_ste_code
11533                                        );
11534                      END IF;
11535 
11536                      l_create_contract := 'Y';
11537 
11538                      /*4*/
11539                      IF l_ste_code <> 'ENTERED'
11540                      THEN
11541                         IF fnd_log.level_statement >=
11542                                               fnd_log.g_current_runtime_level
11543                         THEN
11544                            fnd_log.STRING
11545                               (fnd_log.level_statement,
11546                                g_module_current || '.CREATE_K_SYSTEM_TRF',
11547                                   'OKS Raise credit memo profile option value  ='
11548                                || fnd_profile.VALUE
11549                                            ('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT')
11550                               );
11551                         END IF;
11552 
11553                         /*IF    fnd_profile.VALUE('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT') = 'YES' OR fnd_profile.VALUE('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT') IS NULL THEN
11554                               l_suppress_credit := 'N';
11555                         ELSE
11556                               l_suppress_credit := 'Y';
11557                         END IF;*/
11558                         l_credit_amount :=
11559                            oks_ib_util_pvt.get_credit_option
11560                                               (p_kdtl_tbl (l_ctr).party_id,
11561                                                p_kdtl_tbl (l_ctr).hdr_org_id,
11562                                                p_kdtl_tbl (l_ctr).transfer_date
11563                                               );
11564 
11565                         IF UPPER (l_credit_amount) = 'FULL'
11566                         THEN
11567                            l_full_credit := 'Y';
11568                            l_suppress_credit := 'N';
11569                            --l_trfdt := p_kdtl_tbl( l_ctr ).prod_sdt;
11570                            l_term_date_flag := 'N';
11571                         ELSIF UPPER (l_credit_amount) = 'NONE'
11572                         THEN
11573                            l_suppress_credit := 'Y';
11574                            l_full_credit := 'N';
11575                            l_term_date_flag := 'N';
11576                         ELSIF UPPER (l_credit_amount) = 'CALCULATED'
11577                         THEN
11578                            l_suppress_credit := 'N';
11579                            l_full_credit := 'N';
11580                            l_term_date_flag := 'N';
11581                         END IF;
11582 
11583                         IF TRUNC (p_kdtl_tbl (l_ctr).prod_edt) <
11584                                                                TRUNC (l_trfdt)
11585                         THEN
11586                            l_suppress_credit := 'Y';
11587                            l_full_credit := 'N';
11588                            l_trfdt := p_kdtl_tbl (l_ctr).prod_edt + 1;
11589                            l_term_date_flag := 'Y';
11590                            l_create_contract := 'N';
11591                         END IF;
11592 
11593 
11594 
11595                         oks_bill_rec_pub.pre_terminate_cp
11596                                 (p_calledfrom                => -1,
11597                                  p_cle_id                    => p_kdtl_tbl
11598                                                                         (l_ctr).object_line_id,
11599                                  p_termination_date          => TRUNC (l_trfdt),
11600                                  p_terminate_reason          => 'TRF',
11601                                  p_override_amount           => NULL,
11602                                  p_con_terminate_amount      => NULL,
11603                                  p_termination_amount        => NULL,
11604                                  --p_existing_credit               => 0,
11605                                  p_suppress_credit           => l_suppress_credit,
11606                                  p_full_credit               => l_full_credit,
11607                                  --'N',
11608                                  p_term_date_flag            => l_term_date_flag,
11609                                  p_term_cancel_source        => 'IBTRANSFER',
11610                                  x_return_status             => l_return_status
11611                                 );
11612 
11613                         IF (fnd_log.level_event >=
11614                                                fnd_log.g_current_runtime_level
11615                            )
11616                         THEN
11617                            fnd_log.STRING
11618                               (fnd_log.level_event,
11619                                g_module_current || '.CREATE_K_SYSTEM_TRF',
11620                                   'oks_bill_rec_pub.Pre_terminate_cp(Return status ='
11621                                || l_return_status
11622                                || ')'
11623                               );
11624                         END IF;
11625 
11626                         IF NOT l_return_status = okc_api.g_ret_sts_success
11627                         THEN
11628                            RAISE g_exception_halt_validation;
11629                         END IF;
11630 
11631                         l_inst_dtls_tbl (l_ptr).subline_date_terminated :=
11632                                                                TRUNC (l_trfdt);
11633                         date_terminated := NULL;
11634                         oks_ib_util_pvt.check_termcancel_lines
11635                                            (p_kdtl_tbl (l_ctr).service_line_id,
11636                                             'SL',
11637                                             'T',
11638                                             date_terminated
11639                                            );
11640 
11641                         IF date_terminated IS NOT NULL
11642                         THEN
11643                            get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
11644 
11645                            l_clev_tbl_in (1).ID :=
11646                                            p_kdtl_tbl (l_ctr).service_line_id;
11647                            l_clev_tbl_in (1).date_terminated :=
11648                                                       TRUNC (date_terminated);
11649                            l_clev_tbl_in (1).trn_code := 'TRF';
11650                            ---check the actual code
11651                            l_clev_tbl_in (1).term_cancel_source := 'IBTRANSFER';
11652                            If TRUNC (date_terminated)<= trunc(sysdate) Then
11653                                 l_clev_tbl_in (1).sts_code  := l_sts_code;
11654                            End If;
11655 
11656                            okc_contract_pub.update_contract_line
11657                                       (p_api_version            => l_api_version,
11658                                        p_init_msg_list          => l_init_msg_list,
11659                                        p_restricted_update      => okc_api.g_true,
11660                                        x_return_status          => l_return_status,
11661                                        x_msg_count              => x_msg_count,
11662                                        x_msg_data               => x_msg_data,
11663                                        p_clev_tbl               => l_clev_tbl_in,
11664                                        x_clev_tbl               => l_clev_tbl_out
11665                                       );
11666 
11667                            IF (fnd_log.level_event >=
11668                                                fnd_log.g_current_runtime_level
11669                               )
11670                            THEN
11671                               fnd_log.STRING
11672                                  (fnd_log.level_event,
11673                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
11674                                      'okc_contract_pub.update_contract_line(Return status = '
11675                                   || l_return_status
11676                                   || ')'
11677                                  );
11678                            END IF;
11679 
11680                            IF NOT l_return_status = okc_api.g_ret_sts_success
11681                            THEN
11682                               RAISE g_exception_halt_validation;
11683                            END IF;
11684                         END IF;
11685 
11686                         date_terminated := NULL;
11687                         oks_ib_util_pvt.check_termcancel_lines
11688                                                     (p_kdtl_tbl (l_ctr).hdr_id,
11689                                                      'TL',
11690                                                      'T',
11691                                                      date_terminated
11692                                                     );
11693 
11694                         IF date_terminated IS NOT NULL
11695                         THEN
11696                            get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
11697 
11698                            l_chrv_tbl_in (1).ID := p_kdtl_tbl (l_ctr).hdr_id;
11699                            l_chrv_tbl_in (1).date_terminated := TRUNC (date_terminated);
11700                            l_chrv_tbl_in (1).trn_code := 'TRF';
11701                            l_chrv_tbl_in (1).term_cancel_source := 'IBTRANSFER';
11702                            If TRUNC (date_terminated)<= trunc(sysdate) Then
11703                                 l_chrv_tbl_in (1).sts_code  := l_sts_code;
11704                            End If;
11705 
11706                            okc_contract_pub.update_contract_header
11707                                       (p_api_version            => l_api_version,
11708                                        p_init_msg_list          => l_init_msg_list,
11709                                        p_restricted_update      => okc_api.g_true,
11710                                        x_return_status          => l_return_status,
11711                                        x_msg_count              => x_msg_count,
11712                                        x_msg_data               => x_msg_data,
11713                                        p_chrv_tbl               => l_chrv_tbl_in,
11714                                        x_chrv_tbl               => l_chrv_tbl_out
11715                                       );
11716 
11717                            IF (fnd_log.level_event >=
11718                                                fnd_log.g_current_runtime_level
11719                               )
11720                            THEN
11721                               fnd_log.STRING
11722                                  (fnd_log.level_event,
11723                                      g_module_current
11724                                   || '.Update_Hdr_Dates.external_call.after',
11725                                      'okc_contract_pub.update_contract_header(Return status = '
11726                                   || l_return_status
11727                                   || ')'
11728                                  );
11729                            END IF;
11730 
11731                            IF NOT l_return_status = okc_api.g_ret_sts_success
11732                            THEN
11733                               RAISE g_exception_halt_validation;
11734                            END IF;
11735                         END IF;
11736                      ELSIF l_ste_code = 'ENTERED'
11737                      THEN
11738                         IF TRUNC (p_kdtl_tbl (l_ctr).prod_edt) <
11739                                                               TRUNC (l_trfdt)
11740                         THEN
11741                            l_create_contract := 'N';
11742                            l_trfdt := p_kdtl_tbl (l_ctr).prod_edt + 1;
11743                         ELSE
11744                            l_create_contract := 'Y';
11745                         END IF;
11746 
11747 		      -- added for the bug # 6000133
11748 		      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
11749 
11750 			oks_change_status_pvt.update_line_status
11751                            (x_return_status           => l_return_status,
11752                             x_msg_data                => x_msg_data,
11753                             x_msg_count               => x_msg_count,
11754                             p_init_msg_list           => 'F',
11755                             p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
11756                             p_cle_id                  => p_kdtl_tbl (l_ctr).object_line_id,
11757                             p_new_sts_code            => l_sts_code,
11758                             p_canc_reason_code        => 'TRANSFER',
11759                             p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
11760                             p_old_ste_code            => 'ENTERED',
11761                             p_new_ste_code            => 'CANCELLED',
11762                             p_term_cancel_source      => 'IBTRANSFER',
11763                             p_date_cancelled          => TRUNC (l_trfdt),
11764                             p_comments                => NULL,
11765                             p_validate_status         => 'N'
11766                            );
11767 
11768                         IF (fnd_log.level_event >=
11769                                                fnd_log.g_current_runtime_level
11770                            )
11771                         THEN
11772                            fnd_log.STRING
11773                               (fnd_log.level_event,
11774                                g_module_current || '.CREATE_K_SYSTEM_TRF',
11775                                   'oks_change_status_pvt.Update_line_status(Return status ='
11776                                || l_return_status
11777                                || ')'
11778                               );
11779                         END IF;
11780 
11781                         IF NOT l_return_status = okc_api.g_ret_sts_success
11782                         THEN
11783                            RAISE g_exception_halt_validation;
11784                         END IF;
11785 
11786                         l_inst_dtls_tbl (l_ptr).date_cancelled :=
11787                                                                TRUNC (l_trfdt);
11788                         date_cancelled := NULL;
11789                         oks_ib_util_pvt.check_termcancel_lines
11790                                            (p_kdtl_tbl (l_ctr).service_line_id,
11791                                             'SL',
11792                                             'C',
11793                                             date_cancelled
11794                                            );
11795 
11796                         IF date_cancelled IS NOT NULL
11797                         THEN
11798 
11799 		      -- added for the bug # 6000133
11800 		      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
11801 
11802 			   oks_change_status_pvt.update_line_status
11803                               (x_return_status           => l_return_status,
11804                                x_msg_data                => x_msg_data,
11805                                x_msg_count               => x_msg_count,
11806                                p_init_msg_list           => 'F',
11807                                p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
11808                                p_cle_id                  => p_kdtl_tbl (l_ctr).service_line_id,
11809                                p_new_sts_code            => l_sts_code,
11810                                p_canc_reason_code        => 'TRANSFER',
11811                                p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
11812                                p_old_ste_code            => 'ENTERED',
11813                                p_new_ste_code            => 'CANCELLED',
11814                                p_term_cancel_source      => 'IBTRANSFER',
11815                                p_date_cancelled          => TRUNC
11816                                                                (date_cancelled),
11817                                p_comments                => NULL,
11818                                p_validate_status         => 'N'
11819                               );
11820 
11821                            IF (fnd_log.level_event >=
11822                                                fnd_log.g_current_runtime_level
11823                               )
11824                            THEN
11825                               fnd_log.STRING
11826                                  (fnd_log.level_event,
11827                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
11828                                      'okc_contract_pub.update_contract_line(Return status = '
11829                                   || l_return_status
11830                                   || ')'
11831                                  );
11832                            END IF;
11833 
11834                            IF NOT l_return_status = okc_api.g_ret_sts_success
11835                            THEN
11836                               RAISE g_exception_halt_validation;
11837                            END IF;
11838                         END IF;
11839 
11840                         date_cancelled := NULL;
11841                         oks_ib_util_pvt.check_termcancel_lines
11842                                                     (p_kdtl_tbl (l_ctr).hdr_id,
11843                                                      'TL',
11844                                                      'C',
11845                                                      date_cancelled
11846                                                     );
11847 
11848                         IF date_cancelled IS NOT NULL
11849                         THEN
11850 
11851 		      -- added for the bug # 6000133
11852 		      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
11853 
11854                            oks_change_status_pvt.update_header_status
11855                               (x_return_status           => l_return_status,
11856                                x_msg_data                => x_msg_data,
11857                                x_msg_count               => x_msg_count,
11858                                p_init_msg_list           => 'F',
11859                                p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
11860                                p_new_sts_code            => l_sts_code,
11861                                p_canc_reason_code        => 'TRANSFER',
11862                                p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
11863                                p_comments                => NULL,
11864                                p_term_cancel_source      => 'IBTRANSFER',
11865                                p_date_cancelled          => TRUNC
11866                                                                (date_cancelled),
11867                                p_validate_status         => 'N'
11868                               );
11869 
11870                            IF (fnd_log.level_event >=
11871                                                fnd_log.g_current_runtime_level
11872                               )
11873                            THEN
11874                               fnd_log.STRING
11875                                  (fnd_log.level_event,
11876                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
11877                                      'OKS_WF_K_PROCESS_PVT.cancel_contract(Return status = '
11878                                   || l_return_status
11879                                   || ')'
11880                                  );
11881                            END IF;
11882 
11883                            IF NOT l_return_status = okc_api.g_ret_sts_success
11884                            THEN
11885                               RAISE g_exception_halt_validation;
11886                            END IF;
11887                         END IF;
11888                      /*E4*/
11889                      END IF;                          -- ste_code <> 'ENTERED'
11890 
11891                      l_date_terminated := NULL;
11892                      l_subline_price := NULL;
11893 
11894                      OPEN l_subline_csr (p_kdtl_tbl (l_ctr).object_line_id);
11895 
11896                      FETCH l_subline_csr
11897                       INTO l_date_terminated, l_subline_price;
11898 
11899                      CLOSE l_subline_csr;
11900 
11901                      l_inst_dtls_tbl (l_ptr).transaction_date :=
11902                                               (p_kdtl_tbl (l_ctr).transaction_date);
11903                      l_inst_dtls_tbl (l_ptr).transaction_type := 'TRF';
11904                      l_inst_dtls_tbl (l_ptr).system_id :=
11905                                                   p_kdtl_tbl (l_ctr).system_id;
11906                      l_inst_dtls_tbl (l_ptr).transfer_option := l_trf_option;
11907                      l_inst_dtls_tbl (l_ptr).instance_id_new :=
11908                                                   p_kdtl_tbl (l_ctr).old_cp_id;
11909                      l_inst_dtls_tbl (l_ptr).instance_amt_new :=
11910                                                                l_subline_price;
11911                      --l_kdtl_tbl( l_ctr ).service_amount;
11912                      l_inst_dtls_tbl (l_ptr).instance_qty_new :=
11913                                                      p_kdtl_tbl (l_ctr).cp_qty;
11914                      l_inst_dtls_tbl (l_ptr).new_contract_id :=
11915                                                      p_kdtl_tbl (l_ctr).hdr_id;
11916                      l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
11917                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
11918                      l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
11919                                                     p_kdtl_tbl (l_ctr).hdr_edt;
11920                      l_inst_dtls_tbl (l_ptr).new_service_line_id :=
11921                                             p_kdtl_tbl (l_ctr).service_line_id;
11922                      l_inst_dtls_tbl (l_ptr).new_service_start_date :=
11923                                                 p_kdtl_tbl (l_ctr).service_sdt;
11924                      l_inst_dtls_tbl (l_ptr).new_service_end_date :=
11925                                                 p_kdtl_tbl (l_ctr).service_edt;
11926                      l_inst_dtls_tbl (l_ptr).new_subline_id :=
11927                                              p_kdtl_tbl (l_ctr).object_line_id;
11928                      l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
11929                                                    p_kdtl_tbl (l_ctr).prod_sdt;
11930                      l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
11931                                                    p_kdtl_tbl (l_ctr).prod_edt;
11932                      l_inst_dtls_tbl (l_ptr).new_customer :=
11933                                              p_kdtl_tbl (l_ctr).old_account_id;
11934                      l_inst_dtls_tbl (l_ptr).new_k_status :=
11935                                                     p_kdtl_tbl (l_ctr).hdr_sts;
11936                      l_inst_dtls_tbl (l_ptr).instance_amt_old :=
11937                                              p_kdtl_tbl (l_ctr).service_amount;
11938                      l_inst_dtls_tbl (l_ptr).instance_qty_old :=
11939                                                      p_kdtl_tbl (l_ctr).cp_qty;
11940                      l_inst_dtls_tbl (l_ptr).old_contract_id :=
11941                                                      p_kdtl_tbl (l_ctr).hdr_id;
11942                      l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
11943                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
11944                      l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
11945                                                     p_kdtl_tbl (l_ctr).hdr_edt;
11946                      l_inst_dtls_tbl (l_ptr).old_service_line_id :=
11947                                             p_kdtl_tbl (l_ctr).service_line_id;
11948                      l_inst_dtls_tbl (l_ptr).old_service_start_date :=
11949                                                 p_kdtl_tbl (l_ctr).service_sdt;
11950                      l_inst_dtls_tbl (l_ptr).old_service_end_date :=
11951                                                 p_kdtl_tbl (l_ctr).service_edt;
11952                      l_inst_dtls_tbl (l_ptr).old_subline_id :=
11953                                              p_kdtl_tbl (l_ctr).object_line_id;
11954                      l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
11955                                                    p_kdtl_tbl (l_ctr).prod_sdt;
11956                      l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
11957                                                    p_kdtl_tbl (l_ctr).prod_edt;
11958                      l_inst_dtls_tbl (l_ptr).old_customer :=
11959                                              p_kdtl_tbl (l_ctr).old_account_id;
11960                      l_inst_dtls_tbl (l_ptr).old_k_status :=
11961                                                     p_kdtl_tbl (l_ctr).hdr_sts;
11962                      l_ptr := l_ptr + 1;
11963                      launch_workflow
11964                         (   'INSTALL BASE ACTIVITY : TRANSFER TERMINATE  SUBLINE '
11965                          || fnd_global.local_chr (10)
11966                          || 'Contract Number       :                     '
11967                          || get_contract_number (p_kdtl_tbl (l_ctr).hdr_id)
11968                          || fnd_global.local_chr (10)
11969                          || 'Service Terminated    :                     '
11970                          || l_service_name
11971                         );
11972 
11973                      /*---------------------------------------------------------
11974                       Check if the Customer product transferred
11975                       is a part of System Transfer.
11976                       If SYstem id is Not null then SYsytem transfer
11977                       else Customer product Transfer.
11978                      -----------------------------------------------------------*/
11979                      IF fnd_log.level_statement >=
11980                                                fnd_log.g_current_runtime_level
11981                      THEN
11982                         fnd_log.STRING (fnd_log.level_statement,
11983                                            g_module_current
11984                                         || '.CREATE_K_SYSTEM_TRF.system_trf',
11985                                            'System Id = '
11986                                         || p_kdtl_tbl (l_ctr).system_id
11987                                         || ',lse_id = '
11988                                         || p_kdtl_tbl (l_ctr).lse_id
11989                                         || ',Merge Profile = '
11990                                         || fnd_profile.VALUE
11991                                                            ('OKS_MERGE_SYSTRF')
11992                                        );
11993                      END IF;
11994 
11995                      --If Contract is expired as of the transfer date, do not create a new contract.
11996                      IF l_create_contract = 'Y'
11997                      THEN
11998                         /*Sys trf*/
11999                         IF    p_kdtl_tbl (l_ctr).system_id IS NULL
12000                            OR p_kdtl_tbl (l_ctr).lse_id = 18
12001                            OR fnd_profile.VALUE ('OKS_MERGE_SYSTRF') = 'N'
12002                         THEN
12003                            l_contract_exist := 'F';
12004                            l_contract_merge := 'F';
12005                         /*Sys trf*/
12006                         ELSE
12007                            --Check if there exists a Contract for the System
12008                            l_contract_exist := 'F';
12009                            l_contract_merge := 'F';
12010 
12011                            FOR l_contracts_rec IN
12012                               l_contracts_csr
12013                                             (p_kdtl_tbl (l_ctr).system_id,
12014                                              p_kdtl_tbl (l_ctr).transaction_date,
12015                                              p_kdtl_tbl (l_ctr).old_account_id
12016                                             )
12017                            /*5*/
12018                            LOOP
12019                               IF fnd_log.level_statement >=
12020                                               fnd_log.g_current_runtime_level
12021                               THEN
12022                                  fnd_log.STRING
12023                                           (fnd_log.level_statement,
12024                                               g_module_current
12025                                            || '.CREATE_K_SYSTEM_TRF.system_trf',
12026                                            'In Contracts_rec Loop'
12027                                           );
12028                               END IF;
12029 
12030                               IF fnd_log.level_statement >=
12031                                                fnd_log.g_current_runtime_level
12032                               THEN
12033                                  fnd_log.STRING
12034                                           (fnd_log.level_statement,
12035                                               g_module_current
12036                                            || '.CREATE_K_SYSTEM_TRF.system_trf',
12037                                               'Source chr_id = '
12038                                            || p_kdtl_tbl (l_ctr).hdr_id
12039                                           );
12040                               END IF;
12041 
12042                               IF fnd_log.level_statement >=
12043                                                fnd_log.g_current_runtime_level
12044                               THEN
12045                                  fnd_log.STRING
12046                                           (fnd_log.level_statement,
12047                                               g_module_current
12048                                            || '.CREATE_K_SYSTEM_TRF.system_trf',
12049                                               'Target chr Id = '
12050                                            || l_contracts_rec.new_contract_id
12051                                           );
12052                               END IF;
12053 
12054                               l_contract_exist := 'T';
12055 
12056                               IF l_contract_merge = 'T'
12057                               THEN
12058                                  EXIT;
12059                               END IF;
12060 
12061                               -- Check Header merging rules
12062                               header_merge_yn
12063                                  (p_source_chr_id      => p_kdtl_tbl (l_ctr).hdr_id,
12064                                   p_target_chr_id      => l_contracts_rec.new_contract_id,
12065                                   p_sts_code           => p_kdtl_tbl (l_ctr).hdr_sts,
12066                                   x_eligible_yn        => l_header_merge,
12067                                   x_msg_count          => x_msg_count,
12068                                   x_msg_data           => x_msg_data,
12069                                   x_return_status      => l_return_status
12070                                  );
12071 
12072                               IF (fnd_log.level_event >=
12073                                                fnd_log.g_current_runtime_level
12074                                  )
12075                               THEN
12076                                  fnd_log.STRING
12077                                         (fnd_log.level_event,
12078                                             g_module_current
12079                                          || '.CREATE_K_SYSTEM_TRF',
12080                                             'header_merge_yn(Return status ='
12081                                          || l_return_status
12082                                          || ',Merging Rule = '
12083                                          || l_header_merge
12084                                          || ')'
12085                                         );
12086                               END IF;
12087 
12088                               l_merge_chr_id :=
12089                                                l_contracts_rec.new_contract_id;
12090                               l_line_found := 'F';
12091 
12092                               /*6*/
12093                               IF l_header_merge = 'Y'
12094                               THEN
12095                                  -- Check line_merge rules
12096                                  FOR l_topline_rec IN
12097                                     l_toplines_csr
12098                                        (l_merge_chr_id,
12099                                         p_kdtl_tbl (l_ctr).service_inventory_id
12100                                        )
12101                                  LOOP
12102                                     l_line_found := 'T';
12103 
12104                                     IF fnd_log.level_statement >=
12105                                               fnd_log.g_current_runtime_level
12106                                     THEN
12107                                        fnd_log.STRING
12108                                           (fnd_log.level_statement,
12109                                               g_module_current
12110                                            || '.CREATE_K_SYSTEM_TRF.system_trf',
12111                                               'Source line_id = '
12112                                            || p_kdtl_tbl (l_ctr).service_line_id
12113                                           );
12114                                     END IF;
12115 
12116                                     IF fnd_log.level_statement >=
12117                                                fnd_log.g_current_runtime_level
12118                                     THEN
12119                                        fnd_log.STRING
12120                                           (fnd_log.level_statement,
12121                                               g_module_current
12122                                            || '.CREATE_K_SYSTEM_TRF.system_trf',
12123                                               'Target line_id = '
12124                                            || l_topline_rec.cle_id
12125                                           );
12126                                     END IF;
12127 
12128                                     line_merge_yn
12129                                        (p_source_line_id      => p_kdtl_tbl
12130                                                                         (l_ctr).service_line_id,
12131                                         p_target_line_id      => l_topline_rec.cle_id,
12132                                         p_source_flag         => 'N',
12133                                         x_eligible_yn         => l_line_merge,
12134                                         x_msg_count           => x_msg_count,
12135                                         x_msg_data            => x_msg_data,
12136                                         x_return_status       => l_return_status
12137                                        );
12138 
12139                                     IF (fnd_log.level_event >=
12140                                                fnd_log.g_current_runtime_level
12141                                        )
12142                                     THEN
12143                                        fnd_log.STRING
12144                                           (fnd_log.level_event,
12145                                               g_module_current
12146                                            || '.CREATE_K_SYSTEM_TRF',
12147                                               'line_merge_yn(Return status ='
12148                                            || l_return_status
12149                                            || ',Merging Rule = '
12150                                            || l_line_merge
12151                                            || ')'
12152                                           );
12153                                     END IF;
12154 
12155                                     l_merge_line_id := l_topline_rec.cle_id;
12156 
12157                                     /*7*/
12158                                     IF l_line_merge = 'Y'
12159                                     THEN
12160                                        --Create Contract Subline
12161                                        create_contract_subline
12162                                           (p_kdtl_rec             => p_kdtl_tbl
12163                                                                         (l_ctr),
12164                                            p_hdr_id               => l_merge_chr_id,
12165                                            p_line_id              => l_merge_line_id,
12166                                            x_subline_id           => l_subline_id,
12167                                            x_update_top_line      => l_update_line,
12168                                            x_return_status        => l_return_status,
12169                                            x_msg_data             => x_msg_data,
12170                                            x_msg_count            => x_msg_count
12171                                           );
12172 
12173                                        IF (fnd_log.level_event >=
12174                                                fnd_log.g_current_runtime_level
12175                                           )
12176                                        THEN
12177                                           fnd_log.STRING
12178                                              (fnd_log.level_event,
12179                                                  g_module_current
12180                                               || '.CREATE_K_SYSTEM_TRF',
12181                                                  'Create_contract_subline(Return status ='
12182                                               || l_return_status
12183                                               || ')'
12184                                              );
12185                                        END IF;
12186 
12187                                        IF NOT l_return_status =
12188                                                      okc_api.g_ret_sts_success
12189                                        THEN
12190                                           RAISE g_exception_halt_validation;
12191                                        END IF;
12192 
12193                                        l_opr_instance_id :=
12194                                           get_operation_instance
12195                                                               (l_merge_chr_id,
12196                                                                'TRF'
12197                                                               );
12198                                        create_transaction_source
12199                                           (p_create_opr_inst       => 'N',
12200                                            p_source_code           => 'TRANSFER',
12201                                            p_target_chr_id         => l_merge_chr_id,
12202                                            p_source_line_id        => p_kdtl_tbl
12203                                                                          (l_ctr
12204                                                                          ).object_line_id,
12205                                            p_source_chr_id         => p_kdtl_tbl
12206                                                                          (l_ctr
12207                                                                          ).hdr_id,
12208                                            p_target_line_id        => l_subline_id,
12209                                            x_oper_instance_id      => l_opr_instance_id,
12210                                            x_return_status         => l_return_status,
12211                                            x_msg_count             => x_msg_count,
12212                                            x_msg_data              => x_msg_data
12213                                           );
12214 
12215                                        IF (fnd_log.level_event >=
12216                                                fnd_log.g_current_runtime_level
12217                                           )
12218                                        THEN
12219                                           fnd_log.STRING
12220                                              (fnd_log.level_event,
12221                                                  g_module_current
12222                                               || '.CREATE_K_SYSTEM_TRF',
12223                                                  'Create_transaction_source(Return status ='
12224                                               || l_return_status
12225                                               || ')'
12226                                              );
12227                                        END IF;
12228 
12229                                        IF NOT l_return_status = 'S'
12230                                        THEN
12231                                           RAISE g_exception_halt_validation;
12232                                        END IF;
12233 
12234                                        l_renewal_opr_instance_id :=
12235                                           get_operation_instance
12236                                                               (l_merge_chr_id,
12237                                                                'REN'
12238                                                               );
12239 
12240                                        IF l_renewal_opr_instance_id IS NULL
12241                                        THEN
12242                                           l_create_oper_instance := 'Y';
12243                                        ELSE
12244                                           l_create_oper_instance := 'N';
12245                                        END IF;
12246 
12247                                        create_source_links
12248                                           (p_create_opr_inst       => l_create_oper_instance,
12249                                            p_source_code           => 'TRANSFER',
12250                                            p_target_chr_id         => l_merge_chr_id,
12251                                            p_line_id               => p_kdtl_tbl
12252                                                                          (l_ctr
12253                                                                          ).object_line_id,
12254                                            p_target_line_id        => l_subline_id,
12255                                            p_txn_date              => p_kdtl_tbl
12256                                                                          (l_ctr
12257                                                                          ).transfer_date,
12258                                            x_oper_instance_id      => l_renewal_opr_instance_id,
12259                                            x_return_status         => l_return_status,
12260                                            x_msg_count             => x_msg_count,
12261                                            x_msg_data              => x_msg_data
12262                                           );
12263 
12264                                        IF (fnd_log.level_event >=
12265                                                fnd_log.g_current_runtime_level
12266                                           )
12267                                        THEN
12268                                           fnd_log.STRING
12269                                              (fnd_log.level_event,
12270                                                  g_module_current
12271                                               || '.CREATE_K_SYSTEM_TRF',
12272                                                  'Create_source_links(Return status ='
12273                                               || l_return_status
12274                                               || ')'
12275                                              );
12276                                        END IF;
12277 
12278                                        IF NOT l_return_status = 'S'
12279                                        THEN
12280                                           RAISE g_exception_halt_validation;
12281                                        END IF;
12282 
12283                                        OPEN l_hdrdt_csr (l_merge_chr_id);
12284 
12285                                        FETCH l_hdrdt_csr
12286                                         INTO l_start_date, l_end_date;
12287 
12288                                        CLOSE l_hdrdt_csr;
12289 
12290                                        IF fnd_log.level_statement >=
12291                                                fnd_log.g_current_runtime_level
12292                                        THEN
12293                                           fnd_log.STRING
12294                                                    (fnd_log.level_statement,
12295                                                        g_module_current
12296                                                     || '.CREATE_K_SYSTEM_TRF',
12297                                                        'Header start date = '
12298                                                     || l_start_date
12299                                                     || ',Header End date = '
12300                                                     || l_end_date
12301                                                    );
12302                                        END IF;
12303 
12304                                        OPEN l_srvdt_csr (l_merge_line_id);
12305 
12306                                        FETCH l_srvdt_csr
12307                                         INTO l_srv_sdt, l_srv_edt;
12308 
12309                                        CLOSE l_srvdt_csr;
12310 
12311                                        IF fnd_log.level_statement >=
12312                                                fnd_log.g_current_runtime_level
12313                                        THEN
12314                                           fnd_log.STRING
12315                                                     (fnd_log.level_statement,
12316                                                         g_module_current
12317                                                      || '.CREATE_K_SYSTEM_TRF',
12318                                                         'Line start date = '
12319                                                      || l_srv_sdt
12320                                                      || ',Line End date = '
12321                                                      || l_srv_edt
12322                                                     );
12323                                        END IF;
12324 
12325                                        l_date_terminated := NULL;
12326                                        l_subline_price := NULL;
12327 
12328                                        OPEN l_subline_csr (l_subline_id);
12329 
12330                                        FETCH l_subline_csr
12331                                         INTO l_date_terminated,
12332                                              l_subline_price;
12333 
12334                                        CLOSE l_subline_csr;
12335 
12336                                        l_inst_dtls_tbl (l_ptr).new_contract_id :=
12337                                                                 l_merge_chr_id;
12338                                        l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
12339                                                                   l_start_date;
12340                                        l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
12341                                                                     l_end_date;
12342                                        l_inst_dtls_tbl (l_ptr).new_service_line_id :=
12343                                                                l_merge_line_id;
12344                                        l_inst_dtls_tbl (l_ptr).new_service_start_date :=
12345                                                                      l_srv_sdt;
12346                                        l_inst_dtls_tbl (l_ptr).new_service_end_date :=
12347                                                                      l_srv_edt;
12348                                        l_inst_dtls_tbl (l_ptr).new_subline_id :=
12349                                                                   l_subline_id;
12350                                        l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
12351                                                                TRUNC (l_trfdt);
12352                                        --p_transfer_rec.transfer_date;
12353                                        l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
12354                                                    p_kdtl_tbl (l_ctr).prod_edt;
12355                                        l_inst_dtls_tbl (l_ptr).instance_amt_new :=
12356                                                                l_subline_price;
12357                                        ---Update Billing Schedule
12358                                        create_billing_schedule
12359                                           (p_line_id            => l_merge_line_id,
12360                                            p_covlvl_id          => l_subline_id,
12361                                            p_period_start       => p_kdtl_tbl(l_ctr).period_start,
12362                                            p_start_date         => l_srv_sdt,
12363                                            p_end_date           => l_srv_edt,
12364                                            p_update_line        => l_update_line,
12365                                            x_return_status      => l_return_status,
12366                                            x_msg_data           => x_msg_data,
12367                                            x_msg_count          => x_msg_count
12368                                           );
12369 
12370                                        IF (fnd_log.level_event >=
12371                                                fnd_log.g_current_runtime_level
12372                                           )
12373                                        THEN
12374                                           fnd_log.STRING
12375                                              (fnd_log.level_event,
12376                                                  g_module_current
12377                                               || '.CREATE_K_SYSTEM_TRF',
12378                                                  'Create_billing_schedule(Return status ='
12379                                               || l_return_status
12380                                               || ')'
12381                                              );
12382                                        END IF;
12383 
12384                                        IF NOT l_return_status =
12385                                                      okc_api.g_ret_sts_success
12386                                        THEN
12387                                           RAISE g_exception_halt_validation;
12388                                        END IF;
12389 
12390                                        UPDATE okc_k_lines_b
12391                                           SET price_negotiated =
12392                                                  (SELECT NVL
12393                                                             (SUM
12394                                                                 (NVL
12395                                                                     (price_negotiated,
12396                                                                      0
12397                                                                     )
12398                                                                 ),
12399                                                              0
12400                                                             )
12401                                                     FROM okc_k_lines_b
12402                                                    WHERE cle_id =
12403                                                                l_merge_line_id
12404                                                      AND dnz_chr_id =
12405                                                                 l_merge_chr_id)
12406                                         WHERE ID = l_merge_line_id;
12407 
12408                                        UPDATE oks_k_lines_b
12409                                           SET tax_amount =
12410                                                    NVL (tax_amount, 0)
12411                                                  + NVL ((SELECT tax_amount
12412                                                            FROM oks_k_lines_b
12413                                                           WHERE cle_id =
12414                                                                    l_subline_id),
12415                                                         0
12416                                                        )
12417                                         WHERE cle_id = l_merge_line_id;
12418 
12419                                        UPDATE okc_k_headers_b
12420                                           SET estimated_amount =
12421                                                  (SELECT NVL
12422                                                             (SUM
12423                                                                 (NVL
12424                                                                     (price_negotiated,
12425                                                                      0
12426                                                                     )
12427                                                                 ),
12428                                                              0
12429                                                             )
12430                                                     FROM okc_k_lines_b
12431                                                    WHERE dnz_chr_id =
12432                                                                 l_merge_chr_id
12433                                                      AND lse_id IN (1, 19))
12434                                         WHERE ID = l_merge_chr_id;
12435 
12436                                        UPDATE oks_k_headers_b
12437                                           SET tax_amount =
12438                                                    NVL (tax_amount, 0)
12439                                                  + NVL ((SELECT tax_amount
12440                                                            FROM oks_k_lines_b
12441                                                           WHERE cle_id =
12442                                                                    l_subline_id),
12443                                                         0
12444                                                        )
12445                                         WHERE chr_id = l_merge_chr_id;
12446 
12447                                        -- Check Qa
12448                                        -- Get the qa check list id
12449                                        OPEN l_qa_csr (l_merge_chr_id);
12450 
12451                                        FETCH l_qa_csr
12452                                         INTO l_qcl_id;
12453 
12454                                        CLOSE l_qa_csr;
12455 
12456                                        okc_qa_check_pub.execute_qa_check_list
12457                                           (p_api_version        => l_api_version,
12458                                            p_init_msg_list      => okc_api.g_false,
12459                                            x_return_status      => x_return_status,
12460                                            x_msg_count          => x_msg_count,
12461                                            x_msg_data           => x_msg_data,
12462                                            p_qcl_id             => l_qcl_id,
12463                                            p_chr_id             => l_merge_chr_id,
12464                                            x_msg_tbl            => l_msg_tbl
12465                                           );
12466 
12467                                        IF (fnd_log.level_event >=
12468                                                fnd_log.g_current_runtime_level
12469                                           )
12470                                        THEN
12471                                           fnd_log.STRING
12472                                              (fnd_log.level_event,
12473                                                  g_module_current
12474                                               || '.CREATE_K_SYSTEM_TRF',
12475                                                  'okc_qa_check_pub.execute_qa_check_list(Return status ='
12476                                               || x_return_status
12477                                               || ')'
12478                                              );
12479                                        END IF;
12480 
12481                                        IF x_return_status <>
12482                                                      okc_api.g_ret_sts_success
12483                                        THEN
12484                                           RAISE g_exception_halt_validation;
12485                                        END IF;
12486 
12487                                        l_max_severity := 'I';
12488 
12489                                        IF l_msg_tbl.COUNT > 0
12490                                        THEN
12491                                           i := l_msg_tbl.FIRST;
12492 
12493                                           LOOP
12494                                              IF l_msg_tbl (i).error_status =
12495                                                                           'E'
12496                                              THEN
12497                                                 --'QA returned with errors. Post renewal stopped';
12498                                                 EXIT;
12499                                              END IF;
12500 
12501                                              EXIT WHEN i = l_msg_tbl.LAST;
12502                                              i := l_msg_tbl.NEXT (i);
12503                                           END LOOP;
12504                                        END IF;                   --table count
12505 
12506                                        IF fnd_log.level_error >=
12507                                                fnd_log.g_current_runtime_level
12508                                        THEN
12509                                           fnd_log.STRING
12510                                                 (fnd_log.level_error,
12511                                                     g_module_current
12512                                                  || '.CREATE_K_SYSTEM_TRF',
12513                                                     'qa Check list error'
12514                                                  || l_msg_tbl (i).error_status
12515                                                  || ','
12516                                                  || l_msg_tbl (i).DATA
12517                                                 );
12518                                        END IF;
12519 
12520                                        IF l_msg_tbl (i).error_status = 'E'
12521                                        THEN
12522                                           -- Change the Contract status to QA_HOLD
12523                                           -- if the COntract is in either Signed or Active status
12524                                           OPEN l_hdr_sts_csr (l_merge_chr_id);
12525 
12526                                           FETCH l_hdr_sts_csr
12527                                            INTO l_hdr_sts;
12528 
12529                                           CLOSE l_hdr_sts_csr;
12530 
12531                                           get_sts_code (NULL,
12532                                                         l_hdr_sts,
12533                                                         l_ste_code,
12534                                                         l_sts_code
12535                                                        );
12536 
12537                                           IF l_ste_code IN
12538                                                          ('ACTIVE', 'SIGNED')
12539                                           THEN
12540                                              get_sts_code ('ENTERED',
12541                                                            NULL,
12542                                                            l_ste_code,
12543                                                            l_sts_code
12544                                                           );
12545 
12546                                              UPDATE okc_k_headers_b
12547                                                 SET sts_code = l_sts_code,
12548                                                     date_approved = NULL,
12549                                                     date_signed = NULL
12550                                               WHERE ID = l_merge_chr_id;
12551 
12552                                              UPDATE okc_k_lines_b
12553                                                 SET sts_code = l_sts_code
12554                                               WHERE dnz_chr_id =
12555                                                                 l_merge_chr_id;
12556 
12557                                              l_wf_attr_details.contract_id :=
12558                                                                 l_merge_chr_id;
12559                                              l_wf_attr_details.irr_flag := 'Y';
12560                                              l_wf_attr_details.process_type :=
12561                                                                       'MANUAL';
12562                                              l_wf_attr_details.negotiation_status :=
12563                                                                        'DRAFT';
12564                                              oks_wf_k_process_pvt.launch_k_process_wf
12565                                                 (p_api_version        => 1,
12566                                                  p_init_msg_list      => 'T',
12567                                                  p_wf_attributes      => l_wf_attr_details,
12568                                                  x_return_status      => x_return_status,
12569                                                  x_msg_count          => x_msg_count,
12570                                                  x_msg_data           => x_msg_data
12571                                                 );
12572                                           END IF;
12573                                        END IF;
12574 
12575                                        launch_workflow
12576                                           (   'INSTALL BASE ACTIVITY : Transfer '
12577                                            || fnd_global.local_chr (10)
12578                                            || 'Contract Number       :       '
12579                                            || get_contract_number
12580                                                                (l_merge_chr_id)
12581                                            || fnd_global.local_chr (10)
12582                                            || 'Covered Product line merged into Contract     :       '
12583                                            || p_kdtl_tbl (l_ctr).old_cp_id
12584                                           );
12585                                        l_contract_merge := 'T';
12586                                        EXIT;
12587                                     /*End If7*/
12588                                     END IF;
12589                                  END LOOP;
12590 
12591                                  --If line merge fails Or l_line_found = 'F'
12592 
12593                                  /*8*/
12594                                  IF l_line_merge = 'N' OR l_line_found = 'F'
12595                                  THEN
12596                                     -- Create Top line
12597                                     create_contract_line
12598                                          (p_kdtl_rec           => p_kdtl_tbl
12599                                                                         (l_ctr),
12600                                           p_hdr_id             => l_merge_chr_id,
12601                                           x_return_status      => l_return_status,
12602                                           x_msg_data           => x_msg_data,
12603                                           x_line_id            => l_line_id,
12604                                           x_msg_count          => x_msg_count
12605                                          );
12606 
12607                                     IF (fnd_log.level_event >=
12608                                                fnd_log.g_current_runtime_level
12609                                        )
12610                                     THEN
12611                                        fnd_log.STRING
12612                                           (fnd_log.level_event,
12613                                               g_module_current
12614                                            || '.CREATE_K_SYSTEM_TRF',
12615                                               'Create_Contract_line(Return status = '
12616                                            || l_return_status
12617                                           );
12618                                     END IF;
12619 
12620                                     IF NOT l_return_status =
12621                                                      okc_api.g_ret_sts_success
12622                                     THEN
12623                                        RAISE g_exception_halt_validation;
12624                                     END IF;
12625 
12626                                     IF     p_kdtl_tbl (l_ctr).coverage_id IS NOT NULL
12627                                        AND p_kdtl_tbl (l_ctr).standard_cov_yn =
12628                                                                            'N'
12629                                     THEN
12630                                        oks_coverages_pub.create_adjusted_coverage
12631                                           (p_api_version                  => l_api_version,
12632                                            p_init_msg_list                => l_init_msg_list,
12633                                            x_return_status                => l_return_status,
12634                                            x_msg_count                    => x_msg_count,
12635                                            x_msg_data                     => x_msg_data,
12636                                            p_source_contract_line_id      => p_kdtl_tbl
12637                                                                                 (l_ctr
12638                                                                                 ).service_line_id,
12639                                            p_target_contract_line_id      => l_line_id,
12640                                            x_actual_coverage_id           => l_coverage_id
12641                                           );
12642 
12643                                        IF (fnd_log.level_event >=
12644                                                fnd_log.g_current_runtime_level
12645                                           )
12646                                        THEN
12647                                           fnd_log.STRING
12648                                              (fnd_log.level_event,
12649                                                  g_module_current
12650                                               || '.CREATE_K_SYSTEM_TRF',
12651                                                  'Oks_coverages_pub.create_adjusted_coverage(Return status = '
12652                                               || l_return_status
12653                                               || ')'
12654                                              );
12655                                        END IF;
12656 
12657                                        IF NOT l_return_status =
12658                                                      okc_api.g_ret_sts_success
12659                                        THEN
12660                                           RAISE g_exception_halt_validation;
12661                                        END IF;
12662 
12663                                        UPDATE oks_k_lines_b
12664                                           SET coverage_id = l_coverage_id,
12665                                               standard_cov_yn = 'N'
12666                                         WHERE cle_id = l_line_id;
12667                                     END IF;
12668 
12669 
12670                                    oks_coverages_pvt.create_k_coverage_ext
12671                                        (p_api_version        => 1,
12672                                         p_init_msg_list      => 'T',
12673                                         p_src_line_id        => p_kdtl_tbl
12674                                                                         (l_ctr).service_line_id,
12675                                         p_tgt_line_id        => l_line_id,
12676                                         x_return_status      => l_return_status,
12677                                         x_msg_count          => x_msg_count,
12678                                         x_msg_data           => x_msg_data
12679                                        );
12680 
12681                                     IF (fnd_log.level_event >=
12682                                                fnd_log.g_current_runtime_level
12683                                        )
12684                                     THEN
12685                                        fnd_log.STRING
12686                                           (fnd_log.level_event,
12687                                               g_module_current
12688                                            || '..after_coverage_ext',
12689                                               'OKS_COVERAGES_PVT.Create_K_coverage_ext(Return status = '
12690                                            || l_return_status
12691                                            || ')'
12692                                           );
12693                                     END IF;
12694 
12695                                     IF NOT l_return_status =
12696                                                      okc_api.g_ret_sts_success
12697                                     THEN
12698                                        okc_api.set_message
12699                                              (g_app_name,
12700                                               g_required_value,
12701                                               g_col_name_token,
12702                                               'Coverage Extn creation error '
12703                                              );
12704                                        RAISE g_exception_halt_validation;
12705                                     END IF;
12706 
12707                                     create_contract_subline
12708                                           (p_kdtl_rec             => p_kdtl_tbl
12709                                                                         (l_ctr),
12710                                            p_hdr_id               => l_merge_chr_id,
12711                                            x_subline_id           => l_subline_id,
12712                                            x_update_top_line      => l_update_line,
12713                                            p_line_id              => l_line_id,
12714                                            x_return_status        => l_return_status,
12715                                            x_msg_data             => x_msg_data,
12716                                            x_msg_count            => x_msg_count
12717                                           );
12718 
12719                                     IF (fnd_log.level_event >=
12720                                                fnd_log.g_current_runtime_level
12721                                        )
12722                                     THEN
12723                                        fnd_log.STRING
12724                                           (fnd_log.level_event,
12725                                               g_module_current
12726                                            || '.CREATE_K_SYSTEM_TRF',
12727                                               'Create_contract_subline(Return status = '
12728                                            || l_return_status
12729                                            || ')'
12730                                           );
12731                                     END IF;
12732 
12733                                     IF NOT l_return_status =
12734                                                      okc_api.g_ret_sts_success
12735                                     THEN
12736                                        RAISE g_exception_halt_validation;
12737                                     END IF;
12738 
12739                                     l_opr_instance_id :=
12740                                        get_operation_instance (l_merge_chr_id,
12741                                                                'TRF'
12742                                                               );
12743                                     create_transaction_source
12744                                        (p_create_opr_inst       => 'N',
12745                                         p_source_code           => 'TRANSFER',
12746                                         p_target_chr_id         => l_merge_chr_id,
12747                                         p_source_line_id        => p_kdtl_tbl
12748                                                                         (l_ctr).object_line_id,
12749                                         p_source_chr_id         => p_kdtl_tbl
12750                                                                         (l_ctr).hdr_id,
12751                                         p_target_line_id        => l_subline_id,
12752                                         x_oper_instance_id      => l_opr_instance_id,
12753                                         x_return_status         => l_return_status,
12754                                         x_msg_count             => x_msg_count,
12755                                         x_msg_data              => x_msg_data
12756                                        );
12757 
12758                                     IF (fnd_log.level_event >=
12759                                                fnd_log.g_current_runtime_level
12760                                        )
12761                                     THEN
12762                                        fnd_log.STRING
12763                                           (fnd_log.level_event,
12764                                               g_module_current
12765                                            || '.CREATE_K_SYSTEM_TRF',
12766                                               'Create_transaction_source(Return status ='
12767                                            || l_return_status
12768                                            || ')'
12769                                           );
12770                                     END IF;
12771 
12772                                     IF NOT l_return_status = 'S'
12773                                     THEN
12774                                        RAISE g_exception_halt_validation;
12775                                     END IF;
12776 
12777                                     l_renewal_opr_instance_id :=
12778                                        get_operation_instance (l_merge_chr_id,
12779                                                                'REN'
12780                                                               );
12781 
12782                                     IF l_renewal_opr_instance_id IS NULL
12783                                     THEN
12784                                        l_create_oper_instance := 'Y';
12785                                     ELSE
12786                                        l_create_oper_instance := 'N';
12787                                     END IF;
12788 
12789                                     create_source_links
12790                                        (p_create_opr_inst       => l_create_oper_instance,
12791                                         p_source_code           => 'TRANSFER',
12792                                         p_target_chr_id         => l_merge_chr_id,
12793                                         p_line_id               => p_kdtl_tbl
12794                                                                         (l_ctr).object_line_id,
12795                                         p_target_line_id        => l_subline_id,
12796                                         p_txn_date              => p_kdtl_tbl
12797                                                                         (l_ctr).transfer_date,
12798                                         x_oper_instance_id      => l_renewal_opr_instance_id,
12799                                         x_return_status         => l_return_status,
12800                                         x_msg_count             => x_msg_count,
12801                                         x_msg_data              => x_msg_data
12802                                        );
12803 
12804                                     IF (fnd_log.level_event >=
12805                                                fnd_log.g_current_runtime_level
12806                                        )
12807                                     THEN
12808                                        fnd_log.STRING
12809                                           (fnd_log.level_event,
12810                                               g_module_current
12811                                            || '.CREATE_K_SYSTEM_TRF',
12812                                               'Create_source_links(Return status ='
12813                                            || l_return_status
12814                                            || ')'
12815                                           );
12816                                     END IF;
12817 
12818                                     IF NOT l_return_status = 'S'
12819                                     THEN
12820                                        RAISE g_exception_halt_validation;
12821                                     END IF;
12822 
12823                                     OPEN l_hdrdt_csr (l_merge_chr_id);
12824 
12825                                     FETCH l_hdrdt_csr
12826                                      INTO l_start_date, l_end_date;
12827 
12828                                     CLOSE l_hdrdt_csr;
12829 
12830                                     IF fnd_log.level_statement >=
12831                                                fnd_log.g_current_runtime_level
12832                                     THEN
12833                                        fnd_log.STRING
12834                                                    (fnd_log.level_statement,
12835                                                        g_module_current
12836                                                     || '.CREATE_K_SYSTEM_TRF',
12837                                                        'Header start date = '
12838                                                     || l_start_date
12839                                                     || ',End date ='
12840                                                     || l_end_date
12841                                                    );
12842                                     END IF;
12843 
12844                                     OPEN l_srvdt_csr (l_line_id);
12845 
12846                                     FETCH l_srvdt_csr
12847                                      INTO l_srv_sdt, l_srv_edt;
12848 
12849                                     CLOSE l_srvdt_csr;
12850 
12851                                     IF fnd_log.level_statement >=
12852                                                fnd_log.g_current_runtime_level
12853                                     THEN
12854                                        fnd_log.STRING
12855                                                     (fnd_log.level_statement,
12856                                                         g_module_current
12857                                                      || '.CREATE_K_SYSTEM_TRF',
12858                                                         'Line start date = '
12859                                                      || l_srv_sdt
12860                                                      || ',End date ='
12861                                                      || l_srv_edt
12862                                                     );
12863                                     END IF;
12864 
12865                                     l_date_terminated := NULL;
12866                                     l_subline_price := NULL;
12867 
12868                                     OPEN l_subline_csr (l_subline_id);
12869 
12870                                     FETCH l_subline_csr
12871                                      INTO l_date_terminated, l_subline_price;
12872 
12873                                     CLOSE l_subline_csr;
12874 
12875                                     l_inst_dtls_tbl (l_ptr).new_contract_id :=
12876                                                                 l_merge_chr_id;
12877                                     l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
12878                                                                   l_start_date;
12879                                     l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
12880                                                                     l_end_date;
12881                                     l_inst_dtls_tbl (l_ptr).new_service_line_id :=
12882                                                                      l_line_id;
12883                                     l_inst_dtls_tbl (l_ptr).new_service_start_date :=
12884                                                                      l_srv_sdt;
12885                                     l_inst_dtls_tbl (l_ptr).new_service_end_date :=
12886                                                                      l_srv_edt;
12887                                     --END IF;
12888                                     l_inst_dtls_tbl (l_ptr).new_subline_id :=
12889                                                                   l_subline_id;
12890                                     l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
12891                                                                TRUNC (l_trfdt);
12892                                     --p_transfer_rec.transfer_date;
12893                                     l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
12894                                                    p_kdtl_tbl (l_ctr).prod_edt;
12895                                     l_inst_dtls_tbl (l_ptr).instance_amt_new :=
12896                                                                l_subline_price;
12897                                     --- Create Billing Schedule
12898                                     create_billing_schedule
12899                                           (p_line_id            => l_line_id,
12900                                            p_covlvl_id          => l_subline_id,
12901                                            p_period_start       => p_kdtl_tbl(l_ctr).period_start,
12902                                            p_start_date         => l_srv_sdt,
12903                                            p_end_date           => l_srv_edt,
12904                                            p_update_line        => l_update_line,
12905                                            x_return_status      => l_return_status,
12906                                            x_msg_data           => x_msg_data,
12907                                            x_msg_count          => x_msg_count
12908                                           );
12909 
12910                                     IF (fnd_log.level_event >=
12911                                                fnd_log.g_current_runtime_level
12912                                        )
12913                                     THEN
12914                                        fnd_log.STRING
12915                                           (fnd_log.level_event,
12916                                               g_module_current
12917                                            || '.CREATE_K_SYSTEM_TRF',
12918                                               'Create_billing_schedule(Return status = '
12919                                            || l_return_status
12920                                            || ')'
12921                                           );
12922                                     END IF;
12923 
12924                                     IF NOT l_return_status =
12925                                                      okc_api.g_ret_sts_success
12926                                     THEN
12927                                        RAISE g_exception_halt_validation;
12928                                     END IF;
12929 
12930                                     UPDATE okc_k_lines_b
12931                                        SET price_negotiated =
12932                                               (SELECT NVL
12933                                                          (SUM
12934                                                              (NVL
12935                                                                  (price_negotiated,
12936                                                                   0
12937                                                                  )
12938                                                              ),
12939                                                           0
12940                                                          )
12941                                                  FROM okc_k_lines_b
12942                                                 WHERE cle_id = l_line_id
12943                                                   AND dnz_chr_id =
12944                                                                 l_merge_chr_id)
12945                                      WHERE ID = l_line_id;
12946 
12947                                     UPDATE oks_k_lines_b
12948                                        SET tax_amount =
12949                                                 NVL (tax_amount, 0)
12950                                               + NVL ((SELECT tax_amount
12951                                                         FROM oks_k_lines_b
12952                                                        WHERE cle_id =
12953                                                                   l_subline_id),
12954                                                      0
12955                                                     )
12956                                      WHERE cle_id = l_line_id;
12957 
12958                                     UPDATE okc_k_headers_b
12959                                        SET estimated_amount =
12960                                               (SELECT NVL
12961                                                          (SUM
12962                                                              (NVL
12963                                                                  (price_negotiated,
12964                                                                   0
12965                                                                  )
12966                                                              ),
12967                                                           0
12968                                                          )
12969                                                  FROM okc_k_lines_b
12970                                                 WHERE dnz_chr_id =
12971                                                                 l_merge_chr_id
12972                                                   AND lse_id IN (1, 19))
12973                                      WHERE ID = l_merge_chr_id;
12974 
12975                                     UPDATE oks_k_headers_b
12976                                        SET tax_amount =
12977                                                 NVL (tax_amount, 0)
12978                                               + NVL ((SELECT tax_amount
12979                                                         FROM oks_k_lines_b
12980                                                        WHERE cle_id =
12981                                                                   l_subline_id),
12982                                                      0
12983                                                     )
12984                                      WHERE chr_id = l_merge_chr_id;
12985 
12986                                     --  Check QA
12987                                     OPEN l_qa_csr (l_merge_chr_id);
12988 
12989                                     FETCH l_qa_csr
12990                                      INTO l_qcl_id;
12991 
12992                                     CLOSE l_qa_csr;
12993 
12994                                     okc_qa_check_pub.execute_qa_check_list
12995                                           (p_api_version        => l_api_version,
12996                                            p_init_msg_list      => okc_api.g_false,
12997                                            x_return_status      => x_return_status,
12998                                            x_msg_count          => x_msg_count,
12999                                            x_msg_data           => x_msg_data,
13000                                            p_qcl_id             => l_qcl_id,
13001                                            p_chr_id             => l_merge_chr_id,
13002                                            x_msg_tbl            => l_msg_tbl
13003                                           );
13004 
13005                                     IF (fnd_log.level_event >=
13006                                                fnd_log.g_current_runtime_level
13007                                        )
13008                                     THEN
13009                                        fnd_log.STRING
13010                                           (fnd_log.level_event,
13011                                               g_module_current
13012                                            || '.CREATE_K_SYSTEM_TRF',
13013                                               'okc_qa_check_pub.execute_qa_check_list(Return status = '
13014                                            || x_return_status
13015                                            || ')'
13016                                           );
13017                                     END IF;
13018 
13019                                     IF x_return_status <>
13020                                                      okc_api.g_ret_sts_success
13021                                     THEN
13022                                        RAISE g_exception_halt_validation;
13023                                     END IF;
13024 
13025                                     l_max_severity := 'I';
13026 
13027                                     IF l_msg_tbl.COUNT > 0
13028                                     THEN
13029                                        i := l_msg_tbl.FIRST;
13030 
13031                                        LOOP
13032                                           IF l_msg_tbl (i).error_status = 'E'
13033                                           THEN
13034                                              --'QA returned with errors. ';
13035                                              EXIT;
13036                                           END IF;
13037 
13038                                           EXIT WHEN i = l_msg_tbl.LAST;
13039                                           i := l_msg_tbl.NEXT (i);
13040                                        END LOOP;
13041                                     END IF;                      --table count
13042 
13043                                     IF fnd_log.level_error >=
13044                                                fnd_log.g_current_runtime_level
13045                                     THEN
13046                                        fnd_log.STRING
13047                                                 (fnd_log.level_error,
13048                                                     g_module_current
13049                                                  || '.CREATE_K_SYSTEM_TRF',
13050                                                     'qa Check list error'
13051                                                  || l_msg_tbl (i).error_status
13052                                                  || ','
13053                                                  || l_msg_tbl (i).DATA
13054                                                 );
13055                                     END IF;
13056 
13057                                     IF l_msg_tbl (i).error_status = 'E'
13058                                     THEN
13059                                        -- Change the Contract status to Entered
13060                                        -- if the COntract is in either Signed or Active status
13061                                        OPEN l_hdr_sts_csr (l_merge_chr_id);
13062 
13063                                        FETCH l_hdr_sts_csr
13064                                         INTO l_hdr_sts;
13065 
13066                                        CLOSE l_hdr_sts_csr;
13067 
13068                                        get_sts_code (NULL,
13069                                                      l_hdr_sts,
13070                                                      l_ste_code,
13071                                                      l_sts_code
13072                                                     );
13073 
13074                                        IF l_ste_code IN ('ACTIVE', 'SIGNED')
13075                                        THEN
13076                                           get_sts_code ('ENTERED',
13077                                                         NULL,
13078                                                         l_ste_code,
13079                                                         l_sts_code
13080                                                        );
13081 
13082                                           UPDATE okc_k_headers_b
13083                                              SET sts_code = l_sts_code,
13084                                                  date_approved = NULL,
13085                                                  date_signed = NULL
13086                                            WHERE ID = l_merge_chr_id;
13087 
13088                                           UPDATE okc_k_lines_b
13089                                              SET sts_code = l_sts_code
13090                                            WHERE dnz_chr_id = l_merge_chr_id;
13091 
13092                                           l_wf_attr_details.contract_id :=
13093                                                                 l_merge_chr_id;
13094                                           l_wf_attr_details.irr_flag := 'Y';
13095                                           l_wf_attr_details.process_type :=
13096                                                                       'MANUAL';
13097                                           l_wf_attr_details.negotiation_status :=
13098                                                                        'DRAFT';
13099                                           oks_wf_k_process_pvt.launch_k_process_wf
13100                                              (p_api_version        => 1,
13101                                               p_init_msg_list      => 'T',
13102                                               p_wf_attributes      => l_wf_attr_details,
13103                                               x_return_status      => x_return_status,
13104                                               x_msg_count          => x_msg_count,
13105                                               x_msg_data           => x_msg_data
13106                                              );
13107                                        END IF;
13108                                     END IF;
13109 
13110                                     launch_workflow
13111                                        (   'INSTALL BASE ACTIVITY : TRANSFER  '
13112                                         || fnd_global.local_chr (10)
13113                                         || 'Contract Number       :                     '
13114                                         || get_contract_number (l_merge_chr_id)
13115                                         || fnd_global.local_chr (10)
13116                                         || 'Service line merged in to COntract    :                     '
13117                                         || l_service_name
13118                                        );
13119                                     l_contract_merge := 'T';
13120                                  /*E7*/
13121                                  END IF;
13122                               /*E6*/
13123                               END IF;                  --If Header Merge fails
13124                            /*E5*/
13125                            END LOOP;
13126                         /*Sys trf*/
13127                         END IF;
13128 
13129                         ---If none of the existing SYstem COntracts Header merge satisfies  then
13130 
13131                         -- Create New Contract
13132                         /*8*/
13133                         IF l_contract_exist = 'F' OR l_contract_merge = 'F'
13134                         THEN
13135                            IF fnd_log.level_statement >=
13136                                               fnd_log.g_current_runtime_level
13137                            THEN
13138                               fnd_log.STRING
13139                                  (fnd_log.level_statement,
13140                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
13141                                   'Header merge failed, Create a new contract.'
13142                                  );
13143                            END IF;
13144 
13145                            -- Create New Contract.
13146                            create_contract_header
13147                                            (p_kdtl_rec           => p_kdtl_tbl
13148                                                                         (l_ctr),
13149                                             x_msg_data           => x_msg_data,
13150                                             x_chr_id             => l_chr_id,
13151                                             x_msg_count          => x_msg_count,
13152                                             x_return_status      => l_return_status
13153                                            );
13154 
13155                            IF (fnd_log.level_event >=
13156                                                fnd_log.g_current_runtime_level
13157                               )
13158                            THEN
13159                               fnd_log.STRING
13160                                  (fnd_log.level_event,
13161                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
13162                                      'Create_Contract_header(Return status = '
13163                                   || l_return_status
13164                                   || ')'
13165                                  );
13166                            END IF;
13167 
13168                            IF NOT l_return_status = okc_api.g_ret_sts_success
13169                            THEN
13170                               RAISE g_exception_halt_validation;
13171                            END IF;
13172 
13173                            ---If new Contract is created in 'Entered' status launch workflow
13174                            l_launch_wf_yn := 'N';
13175                            OPEN l_Launch_WF_csr (l_chr_id);
13176                            FETCH l_Launch_WF_csr INTO l_launch_wf_yn;
13177                            CLOSE l_Launch_WF_csr ;
13178 
13179 
13180 
13181                            IF nvl(l_launch_wf_yn,'N') = 'Y'
13182                            THEN
13183                               l_wf_attr_details.contract_id := l_chr_id;
13184                               l_wf_attr_details.irr_flag := 'Y';
13185                               l_wf_attr_details.process_type := 'MANUAL';
13186                               l_wf_attr_details.negotiation_status := 'DRAFT';
13187                               oks_wf_k_process_pvt.launch_k_process_wf
13188                                        (p_api_version        => 1,
13189                                         p_init_msg_list      => 'T',
13190                                         p_wf_attributes      => l_wf_attr_details,
13191                                         x_return_status      => x_return_status,
13192                                         x_msg_count          => x_msg_count,
13193                                         x_msg_data           => x_msg_data
13194                                        );
13195                            END IF;
13196 
13197                            create_contract_line
13198                                           (p_kdtl_rec           => p_kdtl_tbl
13199                                                                         (l_ctr),
13200                                            p_hdr_id             => l_chr_id,
13201                                            x_return_status      => l_return_status,
13202                                            x_msg_data           => x_msg_data,
13203                                            x_line_id            => l_line_id,
13204                                            x_msg_count          => x_msg_count
13205                                           );
13206 
13207                            IF (fnd_log.level_event >=
13208                                                fnd_log.g_current_runtime_level
13209                               )
13210                            THEN
13211                               fnd_log.STRING
13212                                   (fnd_log.level_event,
13213                                    g_module_current || '.CREATE_K_SYSTEM_TRF',
13214                                       'Create_Contract_line(Return status = '
13215                                    || l_return_status
13216                                    || ')'
13217                                   );
13218                            END IF;
13219 
13220                            IF NOT l_return_status = okc_api.g_ret_sts_success
13221                            THEN
13222                               RAISE g_exception_halt_validation;
13223                            END IF;
13224 
13225                            IF     p_kdtl_tbl (l_ctr).coverage_id IS NOT NULL
13226                               AND p_kdtl_tbl (l_ctr).standard_cov_yn = 'N'
13227                            THEN
13228                               oks_coverages_pub.create_adjusted_coverage
13229                                  (p_api_version                  => l_api_version,
13230                                   p_init_msg_list                => l_init_msg_list,
13231                                   x_return_status                => l_return_status,
13232                                   x_msg_count                    => x_msg_count,
13233                                   x_msg_data                     => x_msg_data,
13234                                   p_source_contract_line_id      => p_kdtl_tbl
13235                                                                         (l_ctr).service_line_id,
13236                                   p_target_contract_line_id      => l_line_id,
13237                                   x_actual_coverage_id           => l_coverage_id
13238                                  );
13239 
13240                               IF (fnd_log.level_event >=
13241                                                fnd_log.g_current_runtime_level
13242                                  )
13243                               THEN
13244                                  fnd_log.STRING
13245                                     (fnd_log.level_event,
13246                                      g_module_current
13247                                      || '.CREATE_K_SYSTEM_TRF',
13248                                         'oks_coverages_pub.create_adjusted_coverage(Return status = '
13249                                      || l_return_status
13250                                      || ')'
13251                                     );
13252                               END IF;
13253 
13254                               IF NOT l_return_status =
13255                                                      okc_api.g_ret_sts_success
13256                               THEN
13257                                  RAISE g_exception_halt_validation;
13258                               END IF;
13259 
13260                               UPDATE oks_k_lines_b
13261                                  SET coverage_id = l_coverage_id,
13262                                      standard_cov_yn = 'N'
13263                                WHERE cle_id = l_line_id;
13264                            END IF;
13265 
13266                                    oks_coverages_pvt.create_k_coverage_ext
13267                                        (p_api_version        => 1,
13268                                         p_init_msg_list      => 'T',
13269                                         p_src_line_id        => p_kdtl_tbl
13270                                                                         (l_ctr).service_line_id,
13271                                         p_tgt_line_id        => l_line_id,
13272                                         x_return_status      => l_return_status,
13273                                         x_msg_count          => x_msg_count,
13274                                         x_msg_data           => x_msg_data
13275                                        );
13276 
13277                                     IF (fnd_log.level_event >=
13278                                                fnd_log.g_current_runtime_level
13279                                        )
13280                                     THEN
13281                                        fnd_log.STRING
13282                                           (fnd_log.level_event,
13283                                               g_module_current
13284                                            || '..after_coverage_ext',
13285                                               'OKS_COVERAGES_PVT.Create_K_coverage_ext(Return status = '
13286                                            || l_return_status
13287                                            || ')'
13288                                           );
13289                                     END IF;
13290 
13291                                     IF NOT l_return_status =
13292                                                      okc_api.g_ret_sts_success
13293                                     THEN
13294                                        okc_api.set_message
13295                                              (g_app_name,
13296                                               g_required_value,
13297                                               g_col_name_token,
13298                                               'Coverage Extn creation error '
13299                                              );
13300                                        RAISE g_exception_halt_validation;
13301                                     END IF;
13302 
13303                            create_contract_subline
13304                                           (p_kdtl_rec             => p_kdtl_tbl
13305                                                                         (l_ctr),
13306                                            p_hdr_id               => l_chr_id,
13307                                            x_subline_id           => l_subline_id,
13308                                            x_update_top_line      => l_update_line,
13309                                            p_line_id              => l_line_id,
13310                                            x_return_status        => l_return_status,
13311                                            x_msg_data             => x_msg_data,
13312                                            x_msg_count            => x_msg_count
13313                                           );
13314 
13315                            IF (fnd_log.level_event >=
13316                                                fnd_log.g_current_runtime_level
13317                               )
13318                            THEN
13319                               fnd_log.STRING
13320                                  (fnd_log.level_event,
13321                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
13322                                      'create_contract_subline(Return status = '
13323                                   || l_return_status
13324                                   || ')'
13325                                  );
13326                            END IF;
13327 
13328                            IF NOT l_return_status = okc_api.g_ret_sts_success
13329                            THEN
13330                               RAISE g_exception_halt_validation;
13331                            END IF;
13332 
13333                            create_transaction_source
13334                               (p_create_opr_inst       => 'Y',
13335                                p_source_code           => 'TRANSFER',
13336                                p_target_chr_id         => l_chr_id,
13337                                p_source_line_id        => p_kdtl_tbl (l_ctr).object_line_id,
13338                                p_source_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
13339                                p_target_line_id        => l_subline_id,
13340                                x_oper_instance_id      => l_opr_instance_id,
13341                                x_return_status         => l_return_status,
13342                                x_msg_count             => x_msg_count,
13343                                x_msg_data              => x_msg_data
13344                               );
13345 
13346                            IF (fnd_log.level_event >=
13347                                                fnd_log.g_current_runtime_level
13348                               )
13349                            THEN
13350                               fnd_log.STRING
13351                                  (fnd_log.level_event,
13352                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
13353                                      'Create_transaction_source(Return status ='
13354                                   || l_return_status
13355                                   || ')'
13356                                  );
13357                            END IF;
13358 
13359                            IF NOT l_return_status = 'S'
13360                            THEN
13361                               RAISE g_exception_halt_validation;
13362                            END IF;
13363 
13364                            create_source_links
13365                               (p_create_opr_inst       => 'Y',
13366                                p_source_code           => 'TRANSFER',
13367                                p_target_chr_id         => l_chr_id,
13368                                p_line_id               => p_kdtl_tbl (l_ctr).object_line_id,
13369                                p_target_line_id        => l_subline_id,
13370                                p_txn_date              => p_kdtl_tbl (l_ctr).transfer_date,
13371                                x_oper_instance_id      => l_renewal_opr_instance_id,
13372                                x_return_status         => l_return_status,
13373                                x_msg_count             => x_msg_count,
13374                                x_msg_data              => x_msg_data
13375                               );
13376 
13377                            IF (fnd_log.level_event >=
13378                                                fnd_log.g_current_runtime_level
13379                               )
13380                            THEN
13381                               fnd_log.STRING
13382                                  (fnd_log.level_event,
13383                                   g_module_current || '.CREATE_K_SYSTEM_TRF',
13384                                      'Create_transaction_source(Return status ='
13385                                   || l_return_status
13386                                   || ')'
13387                                  );
13388                            END IF;
13389 
13390                            IF NOT l_return_status = 'S'
13391                            THEN
13392                               RAISE g_exception_halt_validation;
13393                            END IF;
13394 
13395                            l_date_terminated := NULL;
13396                            l_subline_price := NULL;
13397 
13398                            OPEN l_subline_csr (l_subline_id);
13399 
13400                            FETCH l_subline_csr
13401                             INTO l_date_terminated, l_subline_price;
13402 
13403                            CLOSE l_subline_csr;
13404 
13405                            l_inst_dtls_tbl (l_ptr).new_contract_id := l_chr_id;
13406                            l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
13407                                                                TRUNC (l_trfdt);
13408                            --p_transfer_rec.transfer_date;
13409                            l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
13410                                                    p_kdtl_tbl (l_ctr).prod_edt;
13411                            l_inst_dtls_tbl (l_ptr).new_service_line_id :=
13412                                                                      l_line_id;
13413                            l_inst_dtls_tbl (l_ptr).new_service_start_date :=
13414                                                                TRUNC (l_trfdt);
13415                            --p_transfer_rec.transfer_date;
13416                            l_inst_dtls_tbl (l_ptr).new_service_end_date :=
13417                                                    p_kdtl_tbl (l_ctr).prod_edt;
13418                            -- END IF;
13419                            l_inst_dtls_tbl (l_ptr).new_subline_id :=
13420                                                                   l_subline_id;
13421                            l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
13422                                                                TRUNC (l_trfdt);
13423                            --p_transfer_rec.transfer_date;
13424                            l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
13425                                                    p_kdtl_tbl (l_ctr).prod_edt;
13426                            l_inst_dtls_tbl (l_ptr).instance_amt_new :=
13427                                                                l_subline_price;
13428 
13429                            -- Fixed for bug 3751050
13430                            UPDATE okc_k_lines_b
13431                               SET price_negotiated =
13432                                      (SELECT NVL (SUM (NVL (price_negotiated,
13433                                                             0
13434                                                            )
13435                                                       ),
13436                                                   0
13437                                                  )
13438                                         FROM okc_k_lines_b
13439                                        WHERE cle_id = l_line_id
13440                                          AND dnz_chr_id = l_chr_id)
13441                             WHERE ID = l_line_id;
13442 
13443                            UPDATE oks_k_lines_b
13444                               SET tax_amount =
13445                                        NVL (tax_amount, 0)
13446                                      + NVL ((SELECT tax_amount
13447                                                FROM oks_k_lines_b
13448                                               WHERE cle_id = l_subline_id), 0)
13449                             WHERE cle_id = l_line_id;
13450 
13451                            UPDATE okc_k_headers_b
13452                               SET estimated_amount =
13453                                      (SELECT NVL (SUM (NVL (price_negotiated,
13454                                                             0
13455                                                            )
13456                                                       ),
13457                                                   0
13458                                                  )
13459                                         FROM okc_k_lines_b
13460                                        WHERE dnz_chr_id = l_chr_id
13461                                          AND lse_id IN (1, 19))
13462                             WHERE ID = l_chr_id;
13463 
13464                            UPDATE oks_k_headers_b
13465                               SET tax_amount =
13466                                        NVL (tax_amount, 0)
13467                                      + NVL ((SELECT tax_amount
13468                                                FROM oks_k_lines_b
13469                                               WHERE cle_id = l_subline_id), 0)
13470                             WHERE chr_id = l_chr_id;
13471 
13472                            IF p_kdtl_tbl (l_ctr).lse_id <> 18
13473                            THEN
13474                               -- Create Billing Schedule
13475                               OPEN l_srvdt_csr (l_line_id);
13476 
13477                               FETCH l_srvdt_csr
13478                                INTO l_srv_sdt, l_srv_edt;
13479 
13480                               CLOSE l_srvdt_csr;
13481 
13482                               create_billing_schedule
13483                                           (p_line_id            => l_line_id,
13484                                            p_covlvl_id          => l_subline_id,
13485                                            p_period_start       => p_kdtl_tbl(l_ctr).period_start,
13486                                            p_start_date         => l_srv_sdt,
13487                                            p_end_date           => l_srv_edt,
13488                                            p_update_line        => l_update_line,
13489                                            x_msg_data           => x_msg_data,
13490                                            x_msg_count          => x_msg_count,
13491                                            x_return_status      => l_return_status
13492                                           );
13493 
13494                               IF (fnd_log.level_event >=
13495                                                fnd_log.g_current_runtime_level
13496                                  )
13497                               THEN
13498                                  fnd_log.STRING
13499                                     (fnd_log.level_event,
13500                                      g_module_current
13501                                      || '.CREATE_K_SYSTEM_TRF',
13502                                         'Create_billing_schedule(Return status = '
13503                                      || l_return_status
13504                                      || ')'
13505                                     );
13506                               END IF;
13507 
13508                               IF NOT l_return_status =
13509                                                      okc_api.g_ret_sts_success
13510                               THEN
13511                                  RAISE g_exception_halt_validation;
13512                               END IF;
13513 
13514                               /*UPDATE okc_k_lines_b
13515                               SET price_negotiated = ( SELECT NVL( SUM(NVL( price_negotiated, 0)),0 )
13516                                                        FROM okc_k_lines_b
13517                                                        WHERE cle_id = l_line_id
13518                                                        AND dnz_chr_id = l_chr_id)
13519                               WHERE id = l_line_id;
13520 
13521                               UPDATE okc_k_headers_b
13522                               SET estimated_amount = ( SELECT  NVL( SUM( NVL(price_negotiated,0) ), 0 )
13523                                                        FROM  okc_k_lines_b
13524                                                        WHERE  dnz_chr_id = l_chr_id
13525                                                        AND  lse_id in (1,19) )
13526                               WHERE id = l_chr_id;*/
13527 
13528                               -- Check Qa
13529                               OPEN l_qa_csr (l_chr_id);
13530 
13531                               FETCH l_qa_csr
13532                                INTO l_qcl_id;
13533 
13534                               CLOSE l_qa_csr;
13535 
13536                               okc_qa_check_pub.execute_qa_check_list
13537                                           (p_api_version        => l_api_version,
13538                                            p_init_msg_list      => okc_api.g_false,
13539                                            x_return_status      => x_return_status,
13540                                            x_msg_count          => x_msg_count,
13541                                            x_msg_data           => x_msg_data,
13542                                            p_qcl_id             => l_qcl_id,
13543                                            p_chr_id             => l_chr_id,
13544                                            x_msg_tbl            => l_msg_tbl
13545                                           );
13546 
13547                               IF (fnd_log.level_event >=
13548                                                fnd_log.g_current_runtime_level
13549                                  )
13550                               THEN
13551                                  fnd_log.STRING
13552                                     (fnd_log.level_event,
13553                                      g_module_current
13554                                      || '.CREATE_K_SYSTEM_TRF',
13555                                         'okc_qa_check_pub.execute_qa_check_list(Return status = '
13556                                      || x_return_status
13557                                      || ')'
13558                                     );
13559                               END IF;
13560 
13561                               IF x_return_status <> okc_api.g_ret_sts_success
13562                               THEN
13563                                  RAISE g_exception_halt_validation;
13564                               END IF;
13565 
13566                               l_max_severity := 'I';
13567 
13568                               IF l_msg_tbl.COUNT > 0
13569                               THEN
13570                                  i := l_msg_tbl.FIRST;
13571 
13572                                  LOOP
13573                                     IF l_msg_tbl (i).error_status = 'E'
13574                                     THEN
13575                                        --'QA returned with errors. ';
13576                                        EXIT;
13577                                     END IF;
13578 
13579                                     EXIT WHEN i = l_msg_tbl.LAST;
13580                                     i := l_msg_tbl.NEXT (i);
13581                                  END LOOP;
13582                               END IF;                            --table count
13583 
13584                               IF fnd_log.level_error >=
13585                                                fnd_log.g_current_runtime_level
13586                               THEN
13587                                  fnd_log.STRING (fnd_log.level_error,
13588                                                     g_module_current
13589                                                  || '.CREATE_K_SYSTEM_TRF',
13590                                                     'qa Check list error'
13591                                                  || l_msg_tbl (i).error_status
13592                                                  || ','
13593                                                  || l_msg_tbl (i).DATA
13594                                                 );
13595                               END IF;
13596 
13597                               IF l_msg_tbl (i).error_status = 'E'
13598                               THEN
13599                                  -- Change the Contract status to QA_HOLD
13600                                  -- if the COntract is in either Signed or Active status
13601                                  OPEN l_hdr_sts_csr (l_chr_id);
13602 
13603                                  FETCH l_hdr_sts_csr
13604                                   INTO l_hdr_sts;
13605 
13606                                  CLOSE l_hdr_sts_csr;
13607 
13608                                  get_sts_code (NULL,
13609                                                l_hdr_sts,
13610                                                l_ste_code,
13611                                                l_sts_code
13612                                               );
13613 
13614                                  IF l_ste_code IN ('ACTIVE', 'SIGNED')
13615                                  THEN
13616                                     get_sts_code ('ENTERED',
13617                                                   NULL,
13618                                                   l_ste_code,
13619                                                   l_sts_code
13620                                                  );
13621 
13622                                     UPDATE okc_k_headers_b
13623                                        SET sts_code = l_sts_code,
13624                                            date_approved = NULL,
13625                                            date_signed = NULL
13626                                      WHERE ID = l_chr_id;
13627 
13628                                     UPDATE okc_k_lines_b
13629                                        SET sts_code = l_sts_code
13630                                      WHERE dnz_chr_id = l_chr_id;
13631 
13632                                     l_wf_attr_details.contract_id := l_chr_id;
13633                                     l_wf_attr_details.irr_flag := 'Y';
13634                                     l_wf_attr_details.process_type := 'MANUAL';
13635                                     l_wf_attr_details.negotiation_status :=
13636                                                                        'DRAFT';
13637                                     oks_wf_k_process_pvt.launch_k_process_wf
13638                                         (p_api_version        => 1,
13639                                          p_init_msg_list      => 'T',
13640                                          p_wf_attributes      => l_wf_attr_details,
13641                                          x_return_status      => x_return_status,
13642                                          x_msg_count          => x_msg_count,
13643                                          x_msg_data           => x_msg_data
13644                                         );
13645                                  END IF;
13646                               END IF;
13647 
13648                               launch_workflow
13649                                  (   'INSTALL BASE ACTIVITY : TRANSFER  '
13650                                   || fnd_global.local_chr (10)
13651                                   || 'Contract Number       :                     '
13652                                   || get_contract_number (l_chr_id)
13653                                   || fnd_global.local_chr (10)
13654                                   || 'New Contract Created   :                     '
13655                                   || l_service_name
13656                                  );
13657                            END IF;
13658                         /*E8*/
13659                         END IF;
13660 
13661                         --Open l_hdr_sts_csr(l_chr_id);
13662                         --Fetch l_hdr_Sts_csr into l_hdr_sts;
13663                         --Close l_hdr_sts_csr;
13664                         --Removed trunc for transatcion date as the cursor to retrieve contracts
13665                         --to merge for system transfers fails to return K. The cursor looks at the time value compnent.
13666                         l_inst_dtls_tbl (l_ptr).transaction_date :=
13667                                               (p_kdtl_tbl (l_ctr).transaction_date);
13668                         l_inst_dtls_tbl (l_ptr).transaction_type := 'TRF';
13669                         l_inst_dtls_tbl (l_ptr).system_id :=
13670                                                   p_kdtl_tbl (l_ctr).system_id;
13671                         l_inst_dtls_tbl (l_ptr).transfer_option :=
13672                                                                   l_trf_option;
13673                         l_inst_dtls_tbl (l_ptr).instance_id_new :=
13674                                                   p_kdtl_tbl (l_ctr).old_cp_id;
13675                         --l_inst_dtls_tbl(l_ptr).INSTANCE_AMT_NEW          := p_kdtl_tbl( l_ctr ).service_amount;
13676                         l_inst_dtls_tbl (l_ptr).instance_qty_new :=
13677                                                      p_kdtl_tbl (l_ctr).cp_qty;
13678                         l_inst_dtls_tbl (l_ptr).new_customer :=
13679                                              p_kdtl_tbl (l_ctr).new_account_id;
13680                         --l_inst_dtls_tbl(l_ptr).NEW_K_STATUS              := l_hdr_sts;
13681                         l_inst_dtls_tbl (l_ptr).instance_amt_old :=
13682                                              p_kdtl_tbl (l_ctr).service_amount;
13683                         l_inst_dtls_tbl (l_ptr).instance_qty_old :=
13684                                                      p_kdtl_tbl (l_ctr).cp_qty;
13685                         l_inst_dtls_tbl (l_ptr).old_contract_id :=
13686                                                      p_kdtl_tbl (l_ctr).hdr_id;
13687                         l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
13688                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
13689                         l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
13690                                                     p_kdtl_tbl (l_ctr).hdr_edt;
13691                         l_inst_dtls_tbl (l_ptr).old_service_line_id :=
13692                                             p_kdtl_tbl (l_ctr).service_line_id;
13693                         l_inst_dtls_tbl (l_ptr).old_service_start_date :=
13694                                                 p_kdtl_tbl (l_ctr).service_sdt;
13695                         l_inst_dtls_tbl (l_ptr).old_service_end_date :=
13696                                                 p_kdtl_tbl (l_ctr).service_edt;
13697                         l_inst_dtls_tbl (l_ptr).old_subline_id :=
13698                                              p_kdtl_tbl (l_ctr).object_line_id;
13699                         l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
13700                                                    p_kdtl_tbl (l_ctr).prod_sdt;
13701                         l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
13702                                                    p_kdtl_tbl (l_ctr).prod_edt;
13703                         l_inst_dtls_tbl (l_ptr).old_customer :=
13704                                              p_kdtl_tbl (l_ctr).old_account_id;
13705                         l_inst_dtls_tbl (l_ptr).old_k_status :=
13706                                                     p_kdtl_tbl (l_ctr).hdr_sts;
13707                      END IF;
13708                   /*E2*/
13709                   END IF;
13710                END IF;
13711 
13712                --errorout_n('l_inst_dtls_tbl.count'||l_inst_dtls_tbl.count);
13713                IF l_inst_dtls_tbl.COUNT <> 0
13714                THEN
13715                   IF l_old_cp_id <> p_kdtl_tbl (l_ctr).old_cp_id
13716                   THEN
13717                      OPEN l_refnum_csr (p_kdtl_tbl (l_ctr).old_cp_id);
13718 
13719                      FETCH l_refnum_csr
13720                       INTO l_ref_num;
13721 
13722                      CLOSE l_refnum_csr;
13723 
13724                      l_parameters :=
13725                            ' Old CP :'
13726                         || p_kdtl_tbl (l_ctr).old_cp_id
13727                         || ','
13728                         || 'Item Id:'
13729                         || p_kdtl_tbl (l_ctr).prod_inventory_item
13730                         || ','
13731                         || 'Old Customer :'
13732                         || p_kdtl_tbl (l_ctr).old_account_id
13733                         || ','
13734                         || 'System Id:'
13735                         || p_kdtl_tbl (l_ctr).system_id
13736                         || ','
13737                         || 'Transaction type :'
13738                         || 'TRF'
13739                         || ','
13740                         || ' Transaction date :'
13741                         || TRUNC(p_kdtl_tbl (l_ctr).transaction_date)
13742                         || ','
13743                         || 'New Customer:'
13744                         || p_kdtl_tbl (l_ctr).new_account_id;
13745                      --oks_instance_history
13746                      l_old_cp_id := p_kdtl_tbl (l_ctr).old_cp_id;
13747                      l_insthist_rec.instance_id :=
13748                                                   p_kdtl_tbl (l_ctr).old_cp_id;
13749                      l_insthist_rec.transaction_type := 'TRF';
13750                      l_insthist_rec.transaction_date :=
13751                                               (p_kdtl_tbl (l_ctr).transaction_date);
13752                      l_insthist_rec.reference_number := l_ref_num;
13753                      l_insthist_rec.PARAMETERS := l_parameters;
13754                      oks_ins_pvt.insert_row
13755                                           (p_api_version        => 1.0,
13756                                            p_init_msg_list      => 'T',
13757                                            x_return_status      => l_return_status,
13758                                            x_msg_count          => l_msg_count,
13759                                            x_msg_data           => l_msg_data,
13760                                            p_insv_rec           => l_insthist_rec,
13761                                            x_insv_rec           => x_insthist_rec
13762                                           );
13763 
13764                      IF (fnd_log.level_event >=
13765                                                fnd_log.g_current_runtime_level
13766                         )
13767                      THEN
13768                         fnd_log.STRING
13769                                 (fnd_log.level_event,
13770                                  g_module_current || '.CREATE_K_SYSTEM_TRF',
13771                                     'oks_ins_pvt.insert_row(Return status = '
13772                                  || l_return_status
13773                                  || ')'
13774                                 );
13775                      END IF;
13776 
13777                      x_return_status := l_return_status;
13778 
13779                      IF NOT l_return_status = okc_api.g_ret_sts_success
13780                      THEN
13781                         x_return_status := l_return_status;
13782                         RAISE g_exception_halt_validation;
13783                      END IF;
13784 
13785                      l_instparent_id := x_insthist_rec.ID;
13786                   END IF;
13787 
13788                   --errorout_n('in inst l_inst_dtls_tbl.count'||l_inst_dtls_tbl.count);
13789                   FOR l_ctr IN 1 .. l_inst_dtls_tbl.COUNT
13790                   LOOP
13791                      l_inst_dtls_tbl (l_ctr).ins_id := l_instparent_id;
13792 
13793                      OPEN l_hdr_sts_csr
13794                                       (l_inst_dtls_tbl (l_ctr).new_contract_id
13795                                       );
13796 
13797                      FETCH l_hdr_sts_csr
13798                       INTO l_hdr_sts;
13799 
13800                      CLOSE l_hdr_sts_csr;              -- Vigandhi 03-Feb-2004
13801 
13802                      l_inst_dtls_tbl (l_ctr).new_k_status := l_hdr_sts;
13803                   -- FIx for bug 2408704
13804                   END LOOP;
13805 
13806                   --oks_inst_history_details
13807                   oks_ihd_pvt.insert_row (p_api_version        => 1.0,
13808                                           p_init_msg_list      => 'T',
13809                                           x_return_status      => l_return_status,
13810                                           x_msg_count          => l_msg_count,
13811                                           x_msg_data           => l_msg_data,
13812                                           p_ihdv_tbl           => l_inst_dtls_tbl,
13813                                           x_ihdv_tbl           => x_inst_dtls_tbl
13814                                          );
13815 
13816                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
13817                      )
13818                   THEN
13819                      fnd_log.STRING
13820                                 (fnd_log.level_event,
13821                                  g_module_current || '.CREATE_K_SYSTEM_TRF',
13822                                     'oks_ihd_pvt.insert_row(Return status = '
13823                                  || l_return_status
13824                                  || ')'
13825                                 );
13826                   END IF;
13827 
13828                   x_return_status := l_return_status;
13829 
13830                   IF NOT l_return_status = okc_api.g_ret_sts_success
13831                   THEN
13832                      x_return_status := l_return_status;
13833                      RAISE g_exception_halt_validation;
13834                   END IF;
13835 		  If date_terminated is not null or date_cancelled is not null Then
13836 	    	      Open l_hdr_sts_csr(p_kdtl_tbl (l_ctr).hdr_id);
13837 	              Fetch l_hdr_sts_csr into l_hdr_sts;
13838 	              Close l_hdr_sts_csr;
13839 
13840 		        If p_kdtl_tbl (l_ctr).system_id Is Null Then
13841 	                  Update oks_inst_hist_details set new_k_status = l_hdr_sts
13842 		            Where ins_id = l_instparent_id and new_contract_id = p_kdtl_tbl (l_ctr).hdr_id;
13843 	              Else
13844 	                  Update oks_inst_hist_details set new_k_status = l_hdr_sts
13845 		            Where system_id = p_kdtl_tbl (l_ctr).system_id  and new_contract_id = p_kdtl_tbl (l_ctr).hdr_id
13846                         and transaction_date = p_kdtl_tbl (l_ctr).transaction_date;
13847                     End If;
13848 
13849                   End If;
13850 
13851 
13852 
13853 
13854                END IF;
13855             END IF;
13856 
13857             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
13858             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
13859          END LOOP;
13860       END IF;
13861 
13862       x_return_status := l_return_status;
13863    EXCEPTION
13864       WHEN g_exception_halt_validation
13865       THEN
13866          x_return_status := l_return_status;
13867          NULL;
13868       WHEN OTHERS
13869       THEN
13870          x_return_status := okc_api.g_ret_sts_unexp_error;
13871          okc_api.set_message (g_app_name,
13872                               g_unexpected_error,
13873                               g_sqlcode_token,
13874                               SQLCODE,
13875                               g_sqlerrm_token,
13876                               SQLERRM
13877                              );
13878    END create_k_system_transfer;
13879 
13880 -----Terminate of Customer product
13881    PROCEDURE create_contract_terminate (
13882       p_kdtl_tbl        IN              contract_tbl,
13883       x_return_status   OUT NOCOPY      VARCHAR2,
13884       x_msg_count       OUT NOCOPY      NUMBER,
13885       x_msg_data        OUT NOCOPY      VARCHAR2
13886    )
13887    IS
13888       CURSOR l_serv_csr (p_serv_id NUMBER)
13889       IS
13890          SELECT t.description NAME
13891            FROM mtl_system_items_tl t
13892           WHERE t.inventory_item_id = p_serv_id
13893             AND t.LANGUAGE = USERENV ('LANG')
13894             AND ROWNUM < 2;
13895 
13896       CURSOR l_refnum_csr (p_cp_id NUMBER)
13897       IS
13898          SELECT instance_number
13899            FROM csi_item_instances
13900           WHERE instance_id = p_cp_id;
13901 
13902 
13903       Cursor l_hdr_sts_csr(p_hdr_id Number)
13904       Is
13905       Select sts_code
13906       From Okc_k_headers_all_b
13907       WHere id = p_hdr_id;
13908 
13909       l_hdr_status               Varchar2(240);
13910 
13911       l_ref_num                  VARCHAR2 (30);
13912       x_inst_dtls_tbl            oks_ihd_pvt.ihdv_tbl_type;
13913       l_inst_dtls_tbl            oks_ihd_pvt.ihdv_tbl_type;
13914       l_instparent_id            NUMBER;
13915       l_old_cp_id                NUMBER;
13916       l_insthist_rec             oks_ins_pvt.insv_rec_type;
13917       x_insthist_rec             oks_ins_pvt.insv_rec_type;
13918       l_parameters               VARCHAR2 (2000);
13919       l_service_name             VARCHAR2 (2000);
13920       --Contract Line Table
13921       l_clev_tbl_in              okc_contract_pub.clev_tbl_type;
13922       l_clev_tbl_out             okc_contract_pub.clev_tbl_type;
13923       --SalesCredit
13924       l_salescredit_tbl_line     oks_extwarprgm_pvt.salescredit_tbl;
13925       l_salescredit_tbl_hdr      oks_extwarprgm_pvt.salescredit_tbl;
13926       l_line_rec                 k_line_service_rec_type;
13927       l_covd_rec                 k_line_covered_level_rec_type;
13928       l_available_yn             CHAR;
13929       l_return_status            VARCHAR2 (5)     := okc_api.g_ret_sts_success;
13930       l_chrid                    NUMBER                                := NULL;
13931       l_lineid                   NUMBER                                := NULL;
13932       l_days                     NUMBER                                 := 0;
13933       l_day1price                NUMBER                                 := 0;
13934       l_oldamt                   NUMBER                                 := 0;
13935       l_ctr                      NUMBER                                 := 0;
13936       l_terminate_rec            okc_terminate_pvt.terminate_in_cle_rec;
13937       l_api_version     CONSTANT NUMBER                                 := 1.0;
13938       l_init_msg_list   CONSTANT VARCHAR2 (1)               := okc_api.g_false;
13939       l_index                    VARCHAR2 (2000);
13940       l_trmdt                    DATE;
13941       l_suppress_credit          VARCHAR2 (2)                           := 'N';
13942       l_full_credit              VARCHAR2 (2)                           := 'N';
13943       l_ste_code                 VARCHAR2 (30);
13944       l_sts_code                 VARCHAR2 (30);
13945       date_terminated            DATE;
13946       date_cancelled             DATE;
13947       l_alllines_terminated      VARCHAR2 (1);
13948       l_alllines_cancelled       VARCHAR2 (1);
13949       l_chrv_tbl_in              okc_contract_pub.chrv_tbl_type;
13950       l_chrv_tbl_out             okc_contract_pub.chrv_tbl_type;
13951       l_ptr                      NUMBER;
13952       l_term_date_flag           VARCHAR2 (1);
13953       l_credit_amount            VARCHAR2 (50);
13954    BEGIN
13955       x_return_status := okc_api.g_ret_sts_success;
13956 
13957       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
13958       THEN
13959          fnd_log.STRING (fnd_log.level_event,
13960                          g_module_current || '.CREATE_CONTRACT_IBTERMINATE.',
13961                          'count = ' || p_kdtl_tbl.COUNT || ')'
13962                         );
13963       END IF;
13964 
13965       l_old_cp_id := 0;
13966 
13967       IF p_kdtl_tbl.COUNT > 0
13968       THEN
13969          l_ctr := p_kdtl_tbl.FIRST;
13970 
13971          LOOP
13972 
13973           get_sts_code (NULL,
13974                           p_kdtl_tbl (l_ctr).hdr_sts,
13975                           l_ste_code,
13976                           l_sts_code
13977                          );
13978 
13979             IF l_ste_code = 'HOLD'
13980             THEN
13981                l_return_status := okc_api.g_ret_sts_error;
13982 
13983                IF fnd_log.level_error >= fnd_log.g_current_runtime_level
13984                THEN
13985                   fnd_log.STRING (fnd_log.level_error,
13986                                      g_module_current
13987                                   || '.CREATE_CONTRACT_IBTERMINATE.ERROR',
13988                                   'Contract in QA_HOLD status'
13989                                  );
13990                END IF;
13991 
13992                okc_api.set_message (g_app_name,
13993                                     g_invalid_value,
13994                                     g_col_name_token,
13995                                        'Termination not allowed .Contract '
13996                                     || p_kdtl_tbl (l_ctr).contract_number
13997                                     || 'is in QA_HOLD status'
13998                                    );
13999                RAISE g_exception_halt_validation;
14000             END IF;
14001 
14002             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
14003             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
14004          END LOOP;
14005       END IF;
14006 
14007       IF p_kdtl_tbl.COUNT > 0
14008       THEN
14009          l_ctr := p_kdtl_tbl.FIRST;
14010 
14011          LOOP
14012             l_ptr := 1;
14013             --Fix for Bug 5406201
14014 
14015             l_clev_tbl_in.delete;
14016             l_chrv_tbl_in.delete;
14017             l_inst_dtls_tbl.DELETE;
14018 
14019 
14020             okc_context.set_okc_org_context
14021                                            (p_kdtl_tbl (l_ctr).hdr_org_id,
14022                                             p_kdtl_tbl (l_ctr).organization_id
14023                                            );
14024             get_sts_code (NULL,
14025                           p_kdtl_tbl (l_ctr).prod_sts_code,
14026                           l_ste_code,
14027                           l_sts_code
14028                          );
14029 
14030             IF l_ste_code NOT IN ('ENTERED','EXPIRED') /*Bug:7555733*/
14031             THEN
14032                l_trmdt := p_kdtl_tbl (l_ctr).termination_date;
14033 
14034                IF (TRUNC (l_trmdt) <= TRUNC (p_kdtl_tbl (l_ctr).prod_sdt))
14035                THEN
14036                   l_trmdt := p_kdtl_tbl (l_ctr).prod_sdt;
14037                END IF;
14038 
14039                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
14040                THEN
14041                   fnd_log.STRING
14042                        (fnd_log.level_statement,
14043                         g_module_current || '.CREATE_CONTRACT_IBTERMINATE',
14044                            'OKS Raise credit memo profile option value ='
14045                         || fnd_profile.VALUE
14046                                            ('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT')
14047                        );
14048                END IF;
14049 
14050                /*IF    fnd_profile.VALUE('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT') = 'YES'
14051                   OR fnd_profile.VALUE('OKS_RAISE_CREDIT_MEMO_FOR_IB_INT') IS NULL THEN
14052                     l_suppress_credit := 'N';
14053                ELSE
14054                     l_suppress_credit := 'Y';
14055                END IF;*/
14056                l_credit_amount :=
14057                   oks_ib_util_pvt.get_credit_option
14058                                            (p_kdtl_tbl (l_ctr).party_id,
14059                                             p_kdtl_tbl (l_ctr).hdr_org_id,
14060                                             p_kdtl_tbl (l_ctr).termination_date
14061                                            );
14062 
14063                IF UPPER (l_credit_amount) = 'FULL'
14064                THEN
14065                   l_full_credit := 'Y';
14066                   l_suppress_credit := 'N';
14067                   --l_trmdt := p_kdtl_tbl( l_ctr ).prod_sdt;
14068                   l_term_date_flag := 'N';
14069                ELSIF UPPER (l_credit_amount) = 'NONE'
14070                THEN
14071                   l_suppress_credit := 'Y';
14072                   l_full_credit := 'N';
14073                   l_term_date_flag := 'N';
14074                ELSIF UPPER (l_credit_amount) = 'CALCULATED'
14075                THEN
14076                   l_suppress_credit := 'N';
14077                   l_full_credit := 'N';
14078                   l_term_date_flag := 'N';
14079                END IF;
14080 
14081                IF TRUNC (p_kdtl_tbl (l_ctr).prod_edt) < TRUNC (l_trmdt)
14082                THEN
14083                   l_trmdt := p_kdtl_tbl (l_ctr).prod_edt + 1;
14084                   l_suppress_credit := 'Y';
14085                   l_full_credit := 'N';
14086                   l_term_date_flag := 'Y';
14087                END IF;
14088 
14089                oks_bill_rec_pub.pre_terminate_cp
14090                                 (p_calledfrom                => -1,
14091                                  p_cle_id                    => p_kdtl_tbl
14092                                                                         (l_ctr).object_line_id,
14093                                  p_termination_date          => TRUNC (l_trmdt),
14094                                  p_terminate_reason          => 'EXP',
14095                                  p_override_amount           => NULL,
14096                                  p_con_terminate_amount      => NULL,
14097                                  p_termination_amount        => NULL,
14098                                  p_suppress_credit           => l_suppress_credit,
14099                                  p_full_credit               => l_full_credit,
14100                                  --'N',
14101                                  p_term_date_flag            => l_term_date_flag,
14102                                  p_term_cancel_source        => 'IBTERMINATE',
14103                                  x_return_status             => l_return_status
14104                                 );
14105 
14106                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
14107                THEN
14108                   fnd_log.STRING
14109                      (fnd_log.level_event,
14110                       g_module_current || '.CREATE_CONTRACT_IBTERMINATE',
14111                          'oks_bill_rec_pub.Pre_terminate_cp(Return status = '
14112                       || l_return_status
14113                       || ')'
14114                      );
14115                END IF;
14116 
14117                IF NOT l_return_status = okc_api.g_ret_sts_success
14118                THEN
14119                   RAISE g_exception_halt_validation;
14120                END IF;
14121 
14122                l_inst_dtls_tbl (l_ptr).subline_date_terminated :=
14123                                                                TRUNC (l_trmdt);
14124                ---Terminate top line if all the sublines are terminated due to Instance termination
14125                date_terminated := NULL;
14126                oks_ib_util_pvt.check_termcancel_lines
14127                                            (p_kdtl_tbl (l_ctr).service_line_id,
14128                                             'SL',
14129                                             'T',
14130                                             date_terminated
14131                                            );
14132 
14133                IF date_terminated IS NOT NULL
14134                THEN
14135                   get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
14136 
14137                   l_clev_tbl_in (1).ID := p_kdtl_tbl (l_ctr).service_line_id;
14138                   l_clev_tbl_in (1).date_terminated := TRUNC (date_terminated);
14139                   l_clev_tbl_in (1).trn_code := 'EXP';
14140                   ---check the actual code
14141                   l_clev_tbl_in (1).term_cancel_source := 'IBTERMINATE';
14142                   If TRUNC (date_terminated)<= trunc(sysdate) Then
14143                         l_clev_tbl_in (1).sts_code := l_sts_code;
14144                   End If;
14145 
14146                   okc_contract_pub.update_contract_line
14147                                       (p_api_version            => l_api_version,
14148                                        p_init_msg_list          => l_init_msg_list,
14149                                        p_restricted_update      => okc_api.g_true,
14150                                        x_return_status          => l_return_status,
14151                                        x_msg_count              => x_msg_count,
14152                                        x_msg_data               => x_msg_data,
14153                                        p_clev_tbl               => l_clev_tbl_in,
14154                                        x_clev_tbl               => l_clev_tbl_out
14155                                       );
14156 
14157                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
14158                      )
14159                   THEN
14160                      fnd_log.STRING
14161                         (fnd_log.level_event,
14162                          g_module_current || '.CREATE_CONTRACT_IBTERMINATE',
14163                             'oks_bill_rec_pub.update_contract_line(Return status = '
14164                          || l_return_status
14165                          || ')'
14166                         );
14167                   END IF;
14168 
14169                   IF NOT l_return_status = okc_api.g_ret_sts_success
14170                   THEN
14171                      RAISE g_exception_halt_validation;
14172                   END IF;
14173                END IF;
14174 
14175                date_terminated := NULL;
14176                oks_ib_util_pvt.check_termcancel_lines
14177                                                     (p_kdtl_tbl (l_ctr).hdr_id,
14178                                                      'TL',
14179                                                      'T',
14180                                                      date_terminated
14181                                                     );
14182 
14183                IF date_terminated IS NOT NULL
14184                THEN
14185                   get_sts_code ('TERMINATED', NULL, l_ste_code, l_sts_code);
14186 
14187                   l_chrv_tbl_in (1).ID := p_kdtl_tbl (l_ctr).hdr_id;
14188                   l_chrv_tbl_in (1).date_terminated :=
14189                                                       TRUNC (date_terminated);
14190                   l_chrv_tbl_in (1).trn_code := 'EXP';
14191                   l_chrv_tbl_in (1).term_cancel_source := 'IBTERMINATE';
14192                   If TRUNC (date_terminated)<= trunc(sysdate) Then
14193                        l_chrv_tbl_in (1).sts_code := l_sts_code;
14194                   End If;
14195 
14196                   okc_contract_pub.update_contract_header
14197                                       (p_api_version            => l_api_version,
14198                                        p_init_msg_list          => l_init_msg_list,
14199                                        p_restricted_update      => okc_api.g_true,
14200                                        x_return_status          => l_return_status,
14201                                        x_msg_count              => x_msg_count,
14202                                        x_msg_data               => x_msg_data,
14203                                        p_chrv_tbl               => l_chrv_tbl_in,
14204                                        x_chrv_tbl               => l_chrv_tbl_out
14205                                       );
14206 
14207                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
14208                      )
14209                   THEN
14210                      fnd_log.STRING
14211                         (fnd_log.level_event,
14212                             g_module_current
14213                          || '.Update_Hdr_Dates.external_call.after',
14214                             'okc_contract_pub.update_contract_header(Return status = '
14215                          || l_return_status
14216                          || ')'
14217                         );
14218                   END IF;
14219 
14220                   IF NOT l_return_status = okc_api.g_ret_sts_success
14221                   THEN
14222                      RAISE g_exception_halt_validation;
14223                   END IF;
14224                END IF;
14225             ELSIF l_ste_code = 'ENTERED'
14226             THEN
14227                l_trmdt := p_kdtl_tbl (l_ctr).termination_date;
14228 
14229                IF TRUNC (p_kdtl_tbl (l_ctr).prod_edt) < TRUNC (l_trmdt)
14230                THEN
14231                   l_trmdt := p_kdtl_tbl (l_ctr).prod_edt + 1;
14232                END IF;
14233 
14234 	      -- added for the bug # 6000133
14235 	      get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
14236 
14237                oks_change_status_pvt.update_line_status
14238                            (x_return_status           => l_return_status,
14239                             x_msg_data                => x_msg_data,
14240                             x_msg_count               => x_msg_count,
14241                             p_init_msg_list           => 'F',
14242                             p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
14243                             p_cle_id                  => p_kdtl_tbl (l_ctr).object_line_id,
14244                             p_new_sts_code            => l_sts_code,
14245                             p_canc_reason_code        => 'TERMINATED',
14246                             p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
14247                             p_old_ste_code            => 'ENTERED',
14248                             p_new_ste_code            => 'CANCELLED',
14249                             p_term_cancel_source      => 'IBTERMINATE',
14250                             p_date_cancelled          => TRUNC (l_trmdt),
14251                             p_comments                => NULL,
14252                             p_validate_status         => 'N'
14253                            );
14254 
14255                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
14256                THEN
14257                   fnd_log.STRING
14258                      (fnd_log.level_event,
14259                       g_module_current || '.CREATE_CONTRACT_IBTERMINATE',
14260                          'okc_contract_pub.update_contract_line(Return status ='
14261                       || l_return_status
14262                       || ')'
14263                      );
14264                END IF;
14265 
14266                IF NOT l_return_status = okc_api.g_ret_sts_success
14267                THEN
14268                   RAISE g_exception_halt_validation;
14269                END IF;
14270 
14271                l_inst_dtls_tbl (l_ptr).date_cancelled := TRUNC (l_trmdt);
14272                date_cancelled := NULL;
14273                oks_ib_util_pvt.check_termcancel_lines
14274                                            (p_kdtl_tbl (l_ctr).service_line_id,
14275                                             'SL',
14276                                             'C',
14277                                             date_cancelled
14278                                            );
14279 
14280                IF date_cancelled IS NOT NULL
14281                THEN
14282 
14283 	          -- added for the bug # 6000133
14284 		  get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
14285 
14286                   oks_change_status_pvt.update_line_status
14287                           (x_return_status           => l_return_status,
14288                            x_msg_data                => x_msg_data,
14289                            x_msg_count               => x_msg_count,
14290                            p_init_msg_list           => 'F',
14291                            p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
14292                            p_cle_id                  => p_kdtl_tbl (l_ctr).service_line_id,
14293                            p_new_sts_code            => l_sts_code,
14294                            p_canc_reason_code        => 'TERMINATED',
14295                            p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
14296                            p_old_ste_code            => 'ENTERED',
14297                            p_new_ste_code            => 'CANCELLED',
14298                            p_term_cancel_source      => 'IBTERMINATE',
14299                            p_date_cancelled          => TRUNC (date_cancelled),
14300                            p_comments                => NULL,
14301                            p_validate_status         => 'N'
14302                           );
14303 
14304                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
14305                      )
14306                   THEN
14307                      fnd_log.STRING
14308                         (fnd_log.level_event,
14309                          g_module_current || '.CREATE_CONTRACT_IBTERMINATE',
14310                             'okc_contract_pub.update_contract_line(Return status = '
14311                          || l_return_status
14312                          || ')'
14313                         );
14314                   END IF;
14315 
14316                   IF NOT l_return_status = okc_api.g_ret_sts_success
14317                   THEN
14318                      RAISE g_exception_halt_validation;
14319                   END IF;
14320                END IF;
14321 
14322                date_cancelled := NULL;
14323                oks_ib_util_pvt.check_termcancel_lines
14324                                                     (p_kdtl_tbl (l_ctr).hdr_id,
14325                                                      'TL',
14326                                                      'C',
14327                                                      date_cancelled
14328                                                     );
14329 
14330                IF date_cancelled IS NOT NULL
14331                THEN
14332                   l_return_status := 'S';
14333 
14334 		  -- added for the bug # 6000133
14335 		  get_sts_code ('CANCELLED', NULL, l_ste_code, l_sts_code);
14336 
14337                   oks_change_status_pvt.update_header_status
14338                           (x_return_status           => l_return_status,
14339                            x_msg_data                => x_msg_data,
14340                            x_msg_count               => x_msg_count,
14341                            p_init_msg_list           => 'F',
14342                            p_id                      => p_kdtl_tbl (l_ctr).hdr_id,
14343                            p_new_sts_code            =>  l_sts_code,
14344                            p_canc_reason_code        => 'TERMINATED',
14345                            p_old_sts_code            => p_kdtl_tbl (l_ctr).prod_sts_code,
14346                            p_comments                => NULL,
14347                            p_term_cancel_source      => 'IBTERMINATE',
14348                            p_date_cancelled          => TRUNC (date_cancelled),
14349                            p_validate_status         => 'N'
14350                           );
14351 
14352                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
14353                      )
14354                   THEN
14355                      fnd_log.STRING
14356                         (fnd_log.level_event,
14357                          g_module_current || '.CREATE_CONTRACT_IBTERMINATE',
14358                             'OKS_WF_K_PROCESS_PVT.cancel_contract(Return status = '
14359                          || l_return_status
14360                          || ')'
14361                         );
14362                   END IF;
14363 
14364                   IF NOT l_return_status = okc_api.g_ret_sts_success
14365                   THEN
14366                      RAISE g_exception_halt_validation;
14367                   END IF;
14368                END IF;
14369             END IF;
14370 
14371             OPEN l_serv_csr (p_kdtl_tbl (l_ctr).service_inventory_id);
14372 
14373             FETCH l_serv_csr
14374              INTO l_service_name;
14375 
14376             CLOSE l_serv_csr;
14377 
14378             launch_workflow (   'INSTALL BASE ACTIVITY : TERMINATE  '
14379                              || fnd_global.local_chr (10)
14380                              || 'Contract Number       :         '
14381                              || get_contract_number (p_kdtl_tbl (l_ctr).hdr_id)
14382                              || fnd_global.local_chr (10)
14383                              || 'Customer product end dated    :         '
14384                              || l_service_name
14385                             );
14386            /*  get_sts_code (NULL,
14387                           p_kdtl_tbl (l_ctr).hdr_sts,
14388                           l_ste_code,
14389                           l_sts_code
14390                          );
14391 
14392             */
14393 
14394 
14395             l_inst_dtls_tbl (l_ptr).transaction_date :=
14396                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
14397             l_inst_dtls_tbl (l_ptr).transaction_type := 'TRM';
14398             l_inst_dtls_tbl (l_ptr).instance_id_new :=
14399                                                   p_kdtl_tbl (l_ctr).old_cp_id;
14400             l_inst_dtls_tbl (l_ptr).instance_qty_old :=
14401                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
14402             l_inst_dtls_tbl (l_ptr).instance_qty_new :=
14403                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
14404             l_inst_dtls_tbl (l_ptr).instance_amt_old :=
14405                                              p_kdtl_tbl (l_ctr).service_amount;
14406             l_inst_dtls_tbl (l_ptr).instance_amt_new :=
14407                                              p_kdtl_tbl (l_ctr).service_amount;
14408             l_inst_dtls_tbl (l_ptr).old_contract_id :=
14409                                                      p_kdtl_tbl (l_ctr).hdr_id;
14410             l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
14411                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
14412             l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
14413                                                     p_kdtl_tbl (l_ctr).hdr_edt;
14414             l_inst_dtls_tbl (l_ptr).new_contract_id :=
14415                                                      p_kdtl_tbl (l_ctr).hdr_id;
14416             l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
14417                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
14418             l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
14419                                                     p_kdtl_tbl (l_ctr).hdr_edt;
14420             l_inst_dtls_tbl (l_ptr).old_service_line_id :=
14421                                             p_kdtl_tbl (l_ctr).service_line_id;
14422             l_inst_dtls_tbl (l_ptr).old_service_start_date :=
14423                                                 p_kdtl_tbl (l_ctr).service_sdt;
14424             l_inst_dtls_tbl (l_ptr).old_service_end_date :=
14425                                                 p_kdtl_tbl (l_ctr).service_edt;
14426             l_inst_dtls_tbl (l_ptr).new_service_line_id :=
14427                                             p_kdtl_tbl (l_ctr).service_line_id;
14428             l_inst_dtls_tbl (l_ptr).new_service_start_date :=
14429                                                 p_kdtl_tbl (l_ctr).service_sdt;
14430             l_inst_dtls_tbl (l_ptr).new_service_end_date :=
14431                                                 p_kdtl_tbl (l_ctr).service_edt;
14432             l_inst_dtls_tbl (l_ptr).old_subline_id :=
14433                                              p_kdtl_tbl (l_ctr).object_line_id;
14434             l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
14435                                                    p_kdtl_tbl (l_ctr).prod_sdt;
14436             l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
14437                                                    p_kdtl_tbl (l_ctr).prod_edt;
14438             l_inst_dtls_tbl (l_ptr).new_subline_id :=
14439                                              p_kdtl_tbl (l_ctr).object_line_id;
14440             l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
14441                                                    p_kdtl_tbl (l_ctr).prod_sdt;
14442             l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
14443                                                    p_kdtl_tbl (l_ctr).prod_edt;
14444             l_inst_dtls_tbl (l_ptr).old_customer :=
14445                                                p_kdtl_tbl (l_ctr).cust_account;
14446             l_inst_dtls_tbl (l_ptr).new_customer :=
14447                                                p_kdtl_tbl (l_ctr).cust_account;
14448             l_inst_dtls_tbl (l_ptr).old_k_status := p_kdtl_tbl (l_ctr).hdr_sts;
14449 
14450             l_inst_dtls_tbl (l_ptr).new_k_status := p_kdtl_tbl (l_ctr).hdr_sts;
14451 
14452 
14453             IF l_inst_dtls_tbl.COUNT <> 0
14454             THEN
14455                IF l_old_cp_id <> p_kdtl_tbl (l_ctr).old_cp_id
14456                THEN
14457                   OPEN l_refnum_csr (p_kdtl_tbl (l_ctr).old_cp_id);
14458 
14459                   FETCH l_refnum_csr
14460                    INTO l_ref_num;
14461 
14462                   CLOSE l_refnum_csr;
14463 
14464                   l_parameters :=
14465                         ' Old CP :'
14466                      || p_kdtl_tbl (l_ctr).old_cp_id
14467                      || ','
14468                      || 'Item Id:'
14469                      || p_kdtl_tbl (l_ctr).prod_inventory_item
14470                      || ','
14471                      || 'Old Quantity:'
14472                      || p_kdtl_tbl (l_ctr).current_cp_quantity
14473                      || ','
14474                      || 'Transaction type :'
14475                      || 'TRM'
14476                      || ','
14477                      || ' Transaction date :'
14478                      || TRUNC(p_kdtl_tbl (l_ctr).transaction_date)
14479                      || ','
14480                      || 'New quantity:'
14481                      || p_kdtl_tbl (l_ctr).new_quantity;
14482                   --oks_instance_history
14483                   l_old_cp_id := p_kdtl_tbl (l_ctr).old_cp_id;
14484                   l_insthist_rec.instance_id := p_kdtl_tbl (l_ctr).old_cp_id;
14485                   l_insthist_rec.transaction_type := 'TRM';
14486                   l_insthist_rec.transaction_date :=
14487                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
14488                   l_insthist_rec.reference_number := l_ref_num;
14489                   l_insthist_rec.PARAMETERS := l_parameters;
14490                   oks_ins_pvt.insert_row (p_api_version        => 1.0,
14491                                           p_init_msg_list      => 'T',
14492                                           x_return_status      => l_return_status,
14493                                           x_msg_count          => x_msg_count,
14494                                           x_msg_data           => x_msg_data,
14495                                           p_insv_rec           => l_insthist_rec,
14496                                           x_insv_rec           => x_insthist_rec
14497                                          );
14498 
14499                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
14500                      )
14501                   THEN
14502                      fnd_log.STRING
14503                                 (fnd_log.level_event,
14504                                  g_module_current || '.CREATE_K_SYSTEM_TRF',
14505                                     'oks_ins_pvt.insert_row(Return status = '
14506                                  || l_return_status
14507                                  || ')'
14508                                 );
14509                   END IF;
14510 
14511                   x_return_status := l_return_status;
14512 
14513                   IF NOT l_return_status = okc_api.g_ret_sts_success
14514                   THEN
14515                      x_return_status := l_return_status;
14516                      RAISE g_exception_halt_validation;
14517                   END IF;
14518 
14519                   l_instparent_id := x_insthist_rec.ID;
14520                END IF;
14521 
14522                l_inst_dtls_tbl (l_ptr).ins_id := l_instparent_id;
14523                --oks_inst_history_details
14524                oks_ihd_pvt.insert_row (p_api_version        => 1.0,
14525                                        p_init_msg_list      => 'T',
14526                                        x_return_status      => l_return_status,
14527                                        x_msg_count          => x_msg_count,
14528                                        x_msg_data           => x_msg_data,
14529                                        p_ihdv_tbl           => l_inst_dtls_tbl,
14530                                        x_ihdv_tbl           => x_inst_dtls_tbl
14531                                       );
14532 
14533                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
14534                THEN
14535                   fnd_log.STRING
14536                                 (fnd_log.level_event,
14537                                  g_module_current || '.CREATE_IBTERMINATE',
14538                                     'oks_ihd_pvt.insert_row(Return status = '
14539                                  || l_return_status
14540                                  || ')'
14541                                 );
14542                END IF;
14543 
14544                x_return_status := l_return_status;
14545 
14546                IF NOT l_return_status = okc_api.g_ret_sts_success
14547                THEN
14548                   x_return_status := l_return_status;
14549                   RAISE g_exception_halt_validation;
14550                END IF;
14551 
14552 	       If date_terminated is not null or date_cancelled is not null Then
14553 	    	    Open l_hdr_sts_csr(p_kdtl_tbl (l_ctr).hdr_id);
14554 	            Fetch l_hdr_sts_csr into l_hdr_status;
14555 	            Close l_hdr_sts_csr;
14556 
14557 	            Update oks_inst_hist_details set new_k_status = l_hdr_status
14558 		    Where ins_id = l_instparent_id and new_contract_id = p_kdtl_tbl (l_ctr).hdr_id;
14559 
14560                End If;
14561             END IF;
14562 
14563             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
14564             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
14565          END LOOP;
14566       END IF;
14567    EXCEPTION
14568       WHEN g_exception_halt_validation
14569       THEN
14570          x_return_status := l_return_status;
14571          NULL;
14572       WHEN OTHERS
14573       THEN
14574          x_return_status := okc_api.g_ret_sts_unexp_error;
14575          okc_api.set_message (g_app_name,
14576                               g_unexpected_error,
14577                               g_sqlcode_token,
14578                               SQLCODE,
14579                               g_sqlerrm_token,
14580                               SQLERRM
14581                              );
14582    END;
14583 
14584    PROCEDURE update_contract_idc (
14585       p_kdtl_tbl        IN              contract_tbl,
14586       x_return_status   OUT NOCOPY      VARCHAR2,
14587       x_msg_count       OUT NOCOPY      NUMBER,
14588       x_msg_data        OUT NOCOPY      VARCHAR2
14589    )
14590    IS
14591       -- Cursor to check cov attribute set
14592       CURSOR l_cov_csr (p_cle_id NUMBER)
14593       IS
14594          SELECT KL.sync_date_install
14595            FROM oks_k_lines_b LN, oks_k_lines_b kl
14596           WHERE LN.cle_id = p_cle_id AND kl.cle_id = LN.coverage_id;
14597 
14598       -- Cursor to check SR logged
14599       CURSOR l_checksr_csr (
14600          p_line_id   NUMBER,
14601          p_sdt       DATE,
14602          p_edt       DATE,
14603          p_cp_id     NUMBER
14604       )
14605       IS
14606          SELECT 'X'
14607            FROM cs_incidents_all_b
14608           WHERE customer_product_id = p_cp_id
14609             AND contract_service_id = p_line_id
14610             AND (   TRUNC (creation_date) <= TRUNC (p_sdt)
14611                  OR TRUNC (creation_date) >= TRUNC (p_edt)
14612                 );
14613 
14614       -- Cursor to get start and end date of sub lines
14615       CURSOR l_subline_dates (
14616          p_topline_id   NUMBER,
14617          p_hdr_id       NUMBER,
14618          p_subline_id   NUMBER
14619       )
14620       IS
14621          SELECT MIN (start_date) sdt, MAX (end_date) edt
14622            FROM okc_k_lines_b
14623           WHERE cle_id = p_topline_id
14624             AND dnz_chr_id = p_hdr_id
14625             AND lse_id = 18
14626             AND ID <> p_subline_id;
14627 
14628       -- Cursor to get start and end date of top lines
14629       CURSOR l_topline_dates (p_hdr_id NUMBER, p_topline_id NUMBER)
14630       IS
14631          SELECT MIN (start_date) sdt, MAX (end_date) edt
14632            FROM okc_k_lines_b
14633           WHERE dnz_chr_id = p_hdr_id AND cle_id IS NULL
14634                 AND ID <> p_topline_id;
14635 
14636       -- Cursor to get the header dates and status
14637       CURSOR l_lndates_csr (p_id NUMBER)
14638       IS
14639          SELECT start_date, end_date
14640            FROM okc_k_lines_b
14641           WHERE ID = p_id;
14642 
14643       -- Cursor to get the line dates and status
14644       CURSOR l_hdrdates_csr (p_id NUMBER)
14645       IS
14646          SELECT start_date, end_date, sts_code
14647            FROM okc_k_headers_b
14648           WHERE ID = p_id;
14649 
14650 --mmadhavi bug 3761489
14651       CURSOR get_oks_line_dtls (p_id NUMBER)
14652       IS
14653          SELECT ID, object_version_number
14654            FROM oks_k_lines_b
14655           WHERE cle_id = p_id;
14656 
14657 --mmadhavi bug 3761489
14658       CURSOR l_serv_csr (p_serv_line_id NUMBER)
14659       IS
14660          SELECT t.description NAME, b.concatenated_segments description
14661            FROM mtl_system_items_b_kfv b,
14662                 mtl_system_items_tl t,
14663                 okc_k_items ki
14664           WHERE ki.cle_id = p_serv_line_id
14665             AND b.inventory_item_id = TO_CHAR (ki.object1_id1)
14666             AND t.inventory_item_id = b.inventory_item_id
14667             AND t.organization_id = b.organization_id
14668             AND t.LANGUAGE = USERENV ('LANG')
14669             AND ROWNUM < 2;
14670 
14671       CURSOR l_refnum_csr (p_cp_id NUMBER)
14672       IS
14673          SELECT instance_number
14674            FROM csi_item_instances
14675           WHERE instance_id = p_cp_id;
14676 
14677       l_ref_num                  VARCHAR2 (30);
14678       x_inst_dtls_tbl            oks_ihd_pvt.ihdv_tbl_type;
14679       l_inst_dtls_tbl            oks_ihd_pvt.ihdv_tbl_type;
14680       l_instparent_id            NUMBER;
14681       l_old_cp_id                NUMBER;
14682       l_insthist_rec             oks_ins_pvt.insv_rec_type;
14683       x_insthist_rec             oks_ins_pvt.insv_rec_type;
14684       l_parameters               VARCHAR2 (2000);
14685       l_lndates_rec              l_lndates_csr%ROWTYPE;
14686       l_hdrdates_rec             l_hdrdates_csr%ROWTYPE;
14687       l_subline_rec              l_subline_dates%ROWTYPE;
14688       l_topline_rec              l_topline_dates%ROWTYPE;
14689       l_duration                 NUMBER;
14690       l_timeunits                VARCHAR2 (25);
14691       l_api_version     CONSTANT NUMBER                             := 1.0;
14692       l_init_msg_list   CONSTANT VARCHAR2 (1)               := okc_api.g_false;
14693       l_available_yn             VARCHAR2 (2);
14694       l_index                    VARCHAR2 (2000);
14695       l_return_status            VARCHAR2 (1)                       := 'S';
14696       --l_kdtl_tbl                          oks_extwar_util_pvt.contract_tbl_type;
14697       l_salescredit_tbl_line     oks_extwarprgm_pvt.salescredit_tbl;
14698       l_salescredit_tbl_hdr      oks_extwarprgm_pvt.salescredit_tbl;
14699       l_ctr                      NUMBER                             := 0;
14700       l_cov_att                  VARCHAR2 (1);
14701       v_temp                     VARCHAR2 (1);
14702       l_sub_sdt                  DATE                               := NULL;
14703       l_sub_edt                  DATE                               := NULL;
14704       l_top_sdt                  DATE                               := NULL;
14705       l_top_edt                  DATE                               := NULL;
14706       l_hdr_sdt                  DATE                               := NULL;
14707       l_hdr_edt                  DATE                               := NULL;
14708       l_status                   VARCHAR2 (30);
14709       l_top_flag                 VARCHAR2 (1);
14710       l_hdr_flag                 VARCHAR2 (1);
14711       l_update_line              VARCHAR2 (1);
14712       l_sts_flag                 VARCHAR2 (1);
14713       l_ste_code                 VARCHAR2 (240);
14714       l_sts_code                 VARCHAR2 (240);
14715       l_obj_version_num          NUMBER;
14716       l_id                       NUMBER;
14717       l_prod_item_id             NUMBER;
14718       line_desc                  VARCHAR2 (240);
14719       line_name                  VARCHAR2 (240);
14720       l_desc                     VARCHAR2 (240);
14721       l_quantity                 NUMBER;
14722       l_invoice_text             VARCHAR2 (2000);
14723       l_klnv_tbl_in              oks_kln_pvt.klnv_tbl_type;
14724       l_klnv_tbl_out             oks_kln_pvt.klnv_tbl_type;
14725    BEGIN
14726       x_return_status := okc_api.g_ret_sts_success;
14727 
14728       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
14729       THEN
14730          fnd_log.STRING (fnd_log.level_event,
14731                          g_module_current || '.UPDATE_CONTRACT_IDC.after.',
14732                          'count = ' || p_kdtl_tbl.COUNT || ')'
14733                         );
14734       END IF;
14735 
14736       l_old_cp_id := 0;
14737 
14738       IF p_kdtl_tbl.COUNT > 0
14739       THEN
14740          l_ctr := p_kdtl_tbl.FIRST;
14741 
14742          LOOP
14743             okc_context.set_okc_org_context
14744                                            (p_kdtl_tbl (l_ctr).hdr_org_id,
14745                                             p_kdtl_tbl (l_ctr).organization_id
14746                                            );
14747 
14748             IF p_kdtl_tbl (l_ctr).installation_date IS NULL
14749             THEN
14750                l_return_status := okc_api.g_ret_sts_warning;
14751 
14752                IF fnd_log.level_error >= fnd_log.g_current_runtime_level
14753                THEN
14754                   fnd_log.STRING (fnd_log.level_error,
14755                                   g_module_current || '.IB_INTERFACE',
14756                                   'Installation date changed to null '
14757                                  );
14758                END IF;
14759 
14760                okc_api.set_message (g_app_name, 'OKS_NULL_INSTALLATION_DATE');
14761                RAISE g_exception_halt_validation;
14762             END IF;
14763 
14764             l_inst_dtls_tbl.DELETE;
14765             get_sts_code (p_kdtl_tbl (l_ctr).hdr_sts,
14766                           NULL,
14767                           l_ste_code,
14768                           l_sts_code
14769                          );
14770             -- Instance history details
14771             --x_inst_dtls_tbl(l_ctr).INST_PARENT_ID            := p_idc_rec.old_cp_id;
14772             l_inst_dtls_tbl (1).transaction_date :=
14773                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
14774             l_inst_dtls_tbl (1).transaction_type := 'IDC';
14775             l_inst_dtls_tbl (1).instance_id_new :=
14776                                                   p_kdtl_tbl (l_ctr).old_cp_id;
14777             l_inst_dtls_tbl (1).instance_qty_old :=
14778                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
14779             l_inst_dtls_tbl (1).instance_qty_new :=
14780                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
14781             l_inst_dtls_tbl (1).instance_amt_old :=
14782                                              p_kdtl_tbl (l_ctr).service_amount;
14783             l_inst_dtls_tbl (1).instance_amt_new :=
14784                                              p_kdtl_tbl (l_ctr).service_amount;
14785             l_inst_dtls_tbl (1).old_contract_id := p_kdtl_tbl (l_ctr).hdr_id;
14786             l_inst_dtls_tbl (1).old_contact_start_date :=
14787                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
14788             l_inst_dtls_tbl (1).old_contract_end_date :=
14789                                                     p_kdtl_tbl (l_ctr).hdr_edt;
14790             l_inst_dtls_tbl (1).old_service_line_id :=
14791                                             p_kdtl_tbl (l_ctr).service_line_id;
14792             l_inst_dtls_tbl (1).old_service_start_date :=
14793                                                 p_kdtl_tbl (l_ctr).service_sdt;
14794             l_inst_dtls_tbl (1).old_service_end_date :=
14795                                                 p_kdtl_tbl (l_ctr).service_edt;
14796             l_inst_dtls_tbl (1).old_subline_id :=
14797                                              p_kdtl_tbl (l_ctr).object_line_id;
14798             l_inst_dtls_tbl (1).old_subline_start_date :=
14799                                                    p_kdtl_tbl (l_ctr).prod_sdt;
14800             l_inst_dtls_tbl (1).old_subline_end_date :=
14801                                                    p_kdtl_tbl (l_ctr).prod_edt;
14802             l_inst_dtls_tbl (1).old_customer :=
14803                                                p_kdtl_tbl (l_ctr).cust_account;
14804             l_inst_dtls_tbl (1).old_k_status := l_sts_code;
14805             -- If installation date is null Contract starts with OM shipment date
14806             -- New start date for the covered line
14807             l_sub_sdt := trunc(p_kdtl_tbl (l_ctr).installation_date); --bug 5757116 added trunc.
14808             okc_time_util_pub.get_duration
14809                                   (p_start_date         => p_kdtl_tbl (l_ctr).prod_sdt,
14810                                    p_end_date           => p_kdtl_tbl (l_ctr).prod_edt,
14811                                    x_duration           => l_duration,
14812                                    x_timeunit           => l_timeunits,
14813                                    x_return_status      => l_return_status
14814                                   );
14815 
14816             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
14817             THEN
14818                fnd_log.STRING
14819                         (fnd_log.level_event,
14820                             g_module_current
14821                          || '.UPDATE_CONTRACT_IDC.after.get_k_dtls',
14822                             'Okc_time_util_pub.get_duration(Return status = '
14823                          || l_return_status
14824                          || ',Duration = '
14825                          || l_duration
14826                          || ',Time units = '
14827                          || l_timeunits
14828                          || ')'
14829                         );
14830             END IF;
14831 
14832             IF NOT l_return_status = 'S'
14833             THEN
14834                RAISE g_exception_halt_validation;
14835             END IF;
14836 
14837             -- New end date for the covered line
14838             l_sub_edt :=
14839                okc_time_util_pub.get_enddate
14840                          (p_start_date      => trunc(p_kdtl_tbl (l_ctr).installation_date),
14841                           p_duration        => l_duration,
14842                           p_timeunit        => l_timeunits
14843                          );
14844 
14845             -- Check for the coverage flag Synchronization install date
14846             -- Contract date can be updated if the flag is checked
14847             OPEN l_cov_csr (p_kdtl_tbl (l_ctr).service_line_id);
14848 
14849             FETCH l_cov_csr
14850              INTO l_cov_att;
14851 
14852             CLOSE l_cov_csr;
14853 
14854             IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
14855             THEN
14856                fnd_log.STRING (fnd_log.level_statement,
14857                                g_module_current || '.UPDATE_CONTRACT_IDC',
14858                                'Coverage attribute = ' || l_cov_att
14859                               );
14860             END IF;
14861 
14862 
14863             IF NVL (l_cov_att, 'N') = 'Y'
14864             THEN
14865                -- Check for any open service request
14866                -- Contract date wouldn't be updated only if there is a service request outside new effectivity
14867                OPEN l_checksr_csr (p_kdtl_tbl (l_ctr).service_line_id,
14868                                    l_sub_sdt,
14869                                    l_sub_edt,
14870                                    p_kdtl_tbl (l_ctr).old_cp_id
14871                                   );
14872 
14873                FETCH l_checksr_csr
14874                 INTO v_temp;
14875 
14876                IF l_checksr_csr%FOUND
14877                THEN
14878                   CLOSE l_checksr_csr;
14879 
14880                   l_return_status := okc_api.g_ret_sts_warning;
14881 
14882                   IF fnd_log.level_error >= fnd_log.g_current_runtime_level
14883                   THEN
14884                      fnd_log.STRING (fnd_log.level_error,
14885                                         g_module_current
14886                                      || '.UPDATE_CONTRACT_IDC.ERROR',
14887                                         'SR is logged '
14888                                      || ',status = '
14889                                      || l_return_status
14890                                     );
14891                   END IF;
14892 
14893                   okc_api.set_message (g_app_name, 'OKS_SR_EXISTS');
14894                   RAISE g_exception_halt_validation;
14895                ELSE
14896                   CLOSE l_checksr_csr;
14897 
14898                   OPEN l_subline_dates (p_kdtl_tbl (l_ctr).service_line_id,
14899                                         p_kdtl_tbl (l_ctr).hdr_id,
14900                                         p_kdtl_tbl (l_ctr).object_line_id
14901                                        );
14902 
14903                   FETCH l_subline_dates
14904                    INTO l_subline_rec;
14905 
14906                   IF     l_subline_dates%FOUND
14907                      AND l_subline_rec.sdt IS NOT NULL
14908                      AND l_subline_rec.edt IS NOT NULL
14909                   THEN
14910                      IF     l_subline_rec.sdt < l_sub_sdt
14911                         AND l_subline_rec.edt > l_sub_edt
14912                      THEN
14913                         l_top_flag := 'F';
14914                      ELSE
14915                         IF l_subline_rec.sdt >= l_sub_sdt
14916                         THEN
14917                            l_top_sdt := l_sub_sdt;
14918                         ELSE
14919                            l_top_sdt := l_subline_rec.sdt;
14920                         END IF;
14921 
14922                         IF l_subline_rec.edt >= l_sub_edt
14923                         THEN
14924                            l_top_edt := l_subline_rec.edt;
14925                         ELSE
14926                            l_top_edt := l_sub_edt;
14927                         END IF;
14928 
14929                         l_top_flag := 'T';
14930                      END IF;
14931                   ELSE
14932                      l_top_flag := 'T';
14933                      l_top_sdt := l_sub_sdt;
14934                      l_top_edt := l_sub_edt;
14935                   --errorout(   l_top_sdt || ': '||  l_top_edt   );
14936                   END IF;
14937 
14938                   CLOSE l_subline_dates;
14939 
14940                   IF l_top_flag = 'T'
14941                   THEN
14942                      OPEN l_topline_dates (p_kdtl_tbl (l_ctr).hdr_id,
14943                                            p_kdtl_tbl (l_ctr).service_line_id
14944                                           );
14945 
14946                      FETCH l_topline_dates
14947                       INTO l_topline_rec;
14948 
14949                      IF     l_topline_dates%FOUND
14950                         AND l_topline_rec.sdt IS NOT NULL
14951                         AND l_topline_rec.edt IS NOT NULL
14952                      THEN
14953                         IF     l_topline_rec.sdt < l_top_sdt
14954                            AND l_topline_rec.edt > l_top_edt
14955                         THEN
14956                            l_hdr_flag := 'F';
14957                         ELSE
14958                            IF l_topline_rec.sdt >= l_top_sdt
14959                            THEN
14960                               l_hdr_sdt := l_top_sdt;
14961                            ELSE
14962                               l_hdr_sdt := l_topline_rec.sdt;
14963                            END IF;
14964 
14965                            IF l_topline_rec.edt >= l_top_edt
14966                            THEN
14967                               l_hdr_edt := l_topline_rec.edt;
14968                            ELSE
14969                               l_hdr_edt := l_top_edt;
14970                            END IF;
14971 
14972                            l_hdr_flag := 'T';
14973                         END IF;
14974                      ELSE
14975                         l_hdr_flag := 'T';
14976                         l_hdr_sdt := l_top_sdt;
14977                         l_hdr_edt := l_top_edt;
14978                      END IF;
14979 
14980                      CLOSE l_topline_dates;
14981 
14982                      IF l_hdr_flag = 'T'
14983                      THEN
14984                         l_sts_flag := 'Y';
14985 
14986                         IF fnd_log.level_statement >=
14987                                               fnd_log.g_current_runtime_level
14988                         THEN
14989                            fnd_log.STRING (fnd_log.level_statement,
14990                                               g_module_current
14991                                            || '.UPDATE_CONTRACT_IDC',
14992                                               'Header start date = '
14993                                            || l_hdr_sdt
14994                                            || ',End date = '
14995                                            || l_hdr_edt
14996                                            || ',status = '
14997                                            || l_sts_flag
14998                                           );
14999                         END IF;
15000 
15001                         update_hdr_dates
15002                                         (p_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
15003                                          p_new_sdt        => l_hdr_sdt,
15004                                          p_new_edt        => l_hdr_edt,
15005                                          p_sts_flag       => l_sts_flag,
15006                                          x_status         => l_return_status,
15007                                          x_msg_count      => x_msg_count,
15008                                          x_msg_data       => x_msg_data
15009                                         );
15010 
15011                         IF (fnd_log.level_event >=
15012                                                fnd_log.g_current_runtime_level
15013                            )
15014                         THEN
15015                            fnd_log.STRING
15016                                       (fnd_log.level_event,
15017                                           g_module_current
15018                                        || '.UPDATE_CONTRACT_IDC',
15019                                           'Update_hdr_dates(Return status = '
15020                                        || l_return_status
15021                                        || ')'
15022                                       );
15023                         END IF;
15024 
15025                         IF NOT l_return_status = okc_api.g_ret_sts_success
15026                         THEN
15027                            RAISE g_exception_halt_validation;
15028                         END IF;
15029                      END IF;                                         --hdrflag
15030 
15031                      l_sts_flag := 'Y';
15032 
15033                      IF fnd_log.level_statement >=
15034                                                fnd_log.g_current_runtime_level
15035                      THEN
15036                         fnd_log.STRING (fnd_log.level_statement,
15037                                            g_module_current
15038                                         || '.UPDATE_CONTRACT_IDC',
15039                                            'Top line start date = '
15040                                         || l_top_sdt
15041                                         || ',End date = '
15042                                         || l_top_edt
15043                                         || ',status = '
15044                                         || l_sts_flag
15045                                        );
15046                      END IF;
15047 
15048                      update_line_dates
15049                                (p_cle_id             => p_kdtl_tbl (l_ctr).service_line_id,
15050                                 p_chr_id             => p_kdtl_tbl (l_ctr).hdr_id,
15051                                 p_new_sdt            => l_top_sdt,
15052                                 p_new_edt            => l_top_edt,
15053                                 p_sts_flag           => l_sts_flag,
15054                                 p_warranty_flag      => 'W',
15055                                 x_status             => l_return_status,
15056                                 x_msg_count          => x_msg_count,
15057                                 x_msg_data           => x_msg_data
15058                                );
15059 
15060                      IF (fnd_log.level_event >=
15061                                                fnd_log.g_current_runtime_level
15062                         )
15063                      THEN
15064                         fnd_log.STRING
15065                                      (fnd_log.level_event,
15066                                          g_module_current
15067                                       || '.UPDATE_CONTRACT_IDC',
15068                                          'Update_Line_dates(Return status = '
15069                                       || l_return_status
15070                                       || ')'
15071                                      );
15072                      END IF;
15073 
15074                      IF NOT l_return_status = okc_api.g_ret_sts_success
15075                      THEN
15076                         RAISE g_exception_halt_validation;
15077                      END IF;
15078 
15079                      OPEN l_serv_csr (p_kdtl_tbl (l_ctr).service_line_id);
15080 
15081                      FETCH l_serv_csr
15082                       INTO line_name, line_desc;
15083 
15084                      CLOSE l_serv_csr;
15085 
15086                      IF fnd_profile.VALUE ('OKS_ITEM_DISPLAY_PREFERENCE') =
15087                                                                 'DISPLAY_NAME'
15088                      THEN
15089                         l_desc := line_name;
15090                      ELSE
15091                         l_desc := line_desc;
15092                      END IF;
15093 
15094                      l_invoice_text :=
15095                              l_desc || ':' || to_char(l_top_sdt,'DD-MON-YYYY')
15096 			     || ':' || to_char(l_top_edt,'DD-MON-YYYY');
15097 
15098                      OPEN get_oks_line_dtls (p_kdtl_tbl (l_ctr).service_line_id
15099                                             );
15100 
15101                      FETCH get_oks_line_dtls
15102                       INTO l_id, l_obj_version_num;
15103 
15104                      CLOSE get_oks_line_dtls;
15105 
15106                      l_klnv_tbl_in (1).ID := l_id;
15107                      l_klnv_tbl_in (1).invoice_text := l_invoice_text;
15108                      l_klnv_tbl_in (1).object_version_number :=
15109                                                              l_obj_version_num;
15110                      oks_contract_line_pub.update_line
15111                                           (p_api_version        => l_api_version,
15112                                            p_init_msg_list      => l_init_msg_list,
15113                                            x_return_status      => l_return_status,
15114                                            x_msg_count          => x_msg_count,
15115                                            x_msg_data           => x_msg_data,
15116                                            p_klnv_tbl           => l_klnv_tbl_in,
15117                                            x_klnv_tbl           => l_klnv_tbl_out,
15118                                            p_validate_yn        => 'N'
15119                                           );
15120 
15121                      IF (fnd_log.level_event >=
15122                                                fnd_log.g_current_runtime_level
15123                         )
15124                      THEN
15125                         fnd_log.STRING
15126                            (fnd_log.level_event,
15127                             g_module_current || '.UPDATE_CONTRACT_IDC',
15128                                'oks_contract_line_pub.update_line(Return status = '
15129                             || l_return_status
15130                             || ')'
15131                            );
15132                      END IF;
15133 
15134                      IF NOT l_return_status = 'S'
15135                      THEN
15136                         okc_api.set_message (g_app_name,
15137                                              g_required_value,
15138                                              g_col_name_token,
15139                                              'OKS Contract COV LINE'
15140                                             );
15141                         RAISE g_exception_halt_validation;
15142                      END IF;
15143 
15144                      --mmadhavi end bug 3761489
15145                      oks_coverages_pub.update_cov_eff
15146                         (p_api_version          => 1.0,
15147                          p_init_msg_list        => 'T',
15148                          x_return_status        => l_return_status,
15149                          x_msg_count            => x_msg_count,
15150                          x_msg_data             => x_msg_data,
15151                          p_service_line_id      => p_kdtl_tbl (l_ctr).service_line_id,
15152                          p_new_start_date       => l_top_sdt,
15153                          p_new_end_date         => l_top_edt
15154                         );
15155 
15156                      IF (fnd_log.level_event >=
15157                                                fnd_log.g_current_runtime_level
15158                         )
15159                      THEN
15160                         fnd_log.STRING
15161                            (fnd_log.level_event,
15162                             g_module_current || '.UPDATE_CONTRACT_IDC',
15163                                'oks_coverages_pub.update_cov_eff(Return status = '
15164                             || l_return_status
15165                             || ')'
15166                            );
15167                      END IF;
15168 
15169                      IF NOT l_return_status = okc_api.g_ret_sts_success
15170                      THEN
15171                         RAISE g_exception_halt_validation;
15172                      END IF;
15173 
15174                      oks_pm_programs_pvt.adjust_pm_program_schedule
15175                         (p_api_version           => 1.0,
15176                          p_init_msg_list         => 'F',
15177                          p_contract_line_id      => p_kdtl_tbl (l_ctr).service_line_id,
15178                          p_new_start_date        => l_top_sdt,
15179                          p_new_end_date          => l_top_edt,
15180                          x_return_status         => l_return_status,
15181                          x_msg_count             => x_msg_count,
15182                          x_msg_data              => x_msg_data
15183                         );
15184 
15185                      IF (fnd_log.level_event >=
15186                                                fnd_log.g_current_runtime_level
15187                         )
15188                      THEN
15189                         fnd_log.STRING
15190                            (fnd_log.level_event,
15191                             g_module_current || '.UPDATE_CONTRACT_IDC',
15192                                'oks_pm_programs_pvt.ADJUST_PM_PROGRAM_SCHEDULE(Return status = '
15193                             || l_return_status
15194                             || ')'
15195                            );
15196                      END IF;
15197 
15198                      IF NOT l_return_status = okc_api.g_ret_sts_success
15199                      THEN
15200                         RAISE g_exception_halt_validation;
15201                      END IF;
15202                   END IF;                                            --topflag
15203 
15204                   IF fnd_log.level_statement >=
15205                                                fnd_log.g_current_runtime_level
15206                   THEN
15207                      fnd_log.STRING (fnd_log.level_statement,
15208                                      g_module_current
15209                                      || '.UPDATE_CONTRACT_IDC',
15210                                         'sub line start date = '
15211                                      || l_sub_sdt
15212                                      || ',End date'
15213                                      || l_sub_edt
15214                                     );
15215                   END IF;
15216 
15217                   update_line_dates
15218                                 (p_cle_id             => p_kdtl_tbl (l_ctr).object_line_id,
15219                                  p_chr_id             => p_kdtl_tbl (l_ctr).hdr_id,
15220                                  p_new_sdt            => l_sub_sdt,
15221                                  p_new_edt            => l_sub_edt,
15222                                  p_sts_flag           => 'Y',
15223                                  p_warranty_flag      => 'W',
15224                                  x_status             => l_return_status,
15225                                  x_msg_count          => x_msg_count,
15226                                  x_msg_data           => x_msg_data
15227                                 );
15228 
15229                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
15230                      )
15231                   THEN
15232                      fnd_log.STRING (fnd_log.level_event,
15233                                      g_module_current
15234                                      || '.UPDATE_CONTRACT_IDC',
15235                                         'Update_line_dates(Return status = '
15236                                      || l_return_status
15237                                      || ')'
15238                                     );
15239                   END IF;
15240 
15241                   IF NOT l_return_status = okc_api.g_ret_sts_success
15242                   THEN
15243                      RAISE g_exception_halt_validation;
15244                   END IF;
15245 
15246                   --mmadhavi start bug 3761489
15247                   l_prod_item_id := p_kdtl_tbl (l_ctr).prod_inventory_item;
15248 
15249                   OPEN get_oks_line_dtls (p_kdtl_tbl (l_ctr).object_line_id);
15250 
15251                   FETCH get_oks_line_dtls
15252                    INTO l_id, l_obj_version_num;
15253 
15254                   CLOSE get_oks_line_dtls;
15255 
15256                   l_quantity := p_kdtl_tbl (l_ctr).old_cp_quantity;
15257                   l_invoice_text :=
15258                      getformattedinvoicetext (l_prod_item_id,
15259                                               l_sub_sdt,
15260                                               l_sub_edt,
15261                                               line_desc,
15262                                               l_quantity
15263                                              );
15264                   l_klnv_tbl_in (1).ID := l_id;
15265                   l_klnv_tbl_in (1).invoice_text := l_invoice_text;
15266                   l_klnv_tbl_in (1).object_version_number := l_obj_version_num;
15267                   oks_contract_line_pub.update_line
15268                                           (p_api_version        => l_api_version,
15269                                            p_init_msg_list      => l_init_msg_list,
15270                                            x_return_status      => l_return_status,
15271                                            x_msg_count          => x_msg_count,
15272                                            x_msg_data           => x_msg_data,
15273                                            p_klnv_tbl           => l_klnv_tbl_in,
15274                                            x_klnv_tbl           => l_klnv_tbl_out,
15275                                            p_validate_yn        => 'N'
15276                                           );
15277 
15278                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
15279                      )
15280                   THEN
15281                      fnd_log.STRING
15282                         (fnd_log.level_event,
15283                          g_module_current || '.UPDATE_CONTRACT_IDC',
15284                             'oks_contract_line_pub.update_line(Return status = '
15285                          || l_return_status
15286                          || ')'
15287                         );
15288                   END IF;
15289 
15290                   IF NOT l_return_status = 'S'
15291                   THEN
15292                      okc_api.set_message (g_app_name,
15293                                           g_required_value,
15294                                           g_col_name_token,
15295                                           'OKS Contract COV LINE'
15296                                          );
15297                      RAISE g_exception_halt_validation;
15298                   END IF;
15299 
15300                   -- mmadhavi end bug 3761489
15301                   OPEN l_lndates_csr (p_kdtl_tbl (l_ctr).service_line_id);
15302 
15303                   FETCH l_lndates_csr
15304                    INTO l_lndates_rec;
15305 
15306                   CLOSE l_lndates_csr;
15307 
15308                   OPEN l_hdrdates_csr (p_kdtl_tbl (l_ctr).hdr_id);
15309 
15310                   FETCH l_hdrdates_csr
15311                    INTO l_hdrdates_rec;
15312 
15313                   CLOSE l_hdrdates_csr;
15314 
15315                   l_sts_code := NULL;
15316                   get_sts_code (l_hdrdates_rec.sts_code,
15317                                 NULL,
15318                                 l_ste_code,
15319                                 l_sts_code
15320                                );
15321                   l_inst_dtls_tbl (1).new_contract_id :=
15322                                                      p_kdtl_tbl (l_ctr).hdr_id;
15323                   l_inst_dtls_tbl (1).new_contact_start_date :=
15324                                                      l_hdrdates_rec.start_date;
15325                   l_inst_dtls_tbl (1).new_contract_end_date :=
15326                                                        l_hdrdates_rec.end_date;
15327                   l_inst_dtls_tbl (1).new_service_line_id :=
15328                                             p_kdtl_tbl (l_ctr).service_line_id;
15329                   l_inst_dtls_tbl (1).new_service_start_date :=
15330                                                       l_lndates_rec.start_date;
15331                   l_inst_dtls_tbl (1).new_service_end_date :=
15332                                                         l_lndates_rec.end_date;
15333                   l_inst_dtls_tbl (1).new_subline_id :=
15334                                              p_kdtl_tbl (l_ctr).object_line_id;
15335                   l_inst_dtls_tbl (1).new_subline_start_date :=
15336                                   NVL (l_sub_sdt, p_kdtl_tbl (l_ctr).prod_sdt);
15337                   l_inst_dtls_tbl (1).new_subline_end_date :=
15338                                   NVL (l_sub_edt, p_kdtl_tbl (l_ctr).prod_edt);
15339                   l_inst_dtls_tbl (1).subline_date_terminated := NULL;
15340                   l_inst_dtls_tbl (1).new_k_status := l_sts_code;
15341                   l_inst_dtls_tbl (1).new_customer :=
15342                                                p_kdtl_tbl (l_ctr).cust_account;
15343                END IF;                                             --SR logged
15344             ELSE
15345                IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
15346                THEN
15347                   fnd_log.STRING (fnd_log.level_statement,
15348                                   g_module_current || '.UPDATE_CONTRACT_IDC',
15349                                   'coverage attribute not set'
15350                                  );
15351                END IF;
15352             END IF;                                       --coverage attribute
15353 
15354             IF l_inst_dtls_tbl.COUNT <> 0
15355             THEN
15356                IF l_old_cp_id <> p_kdtl_tbl (l_ctr).old_cp_id
15357                THEN
15358                   OPEN l_refnum_csr (p_kdtl_tbl (l_ctr).old_cp_id);
15359 
15360                   FETCH l_refnum_csr
15361                    INTO l_ref_num;
15362 
15363                   CLOSE l_refnum_csr;
15364 
15365                   l_parameters :=
15366                         ' Old CP :'
15367                      || p_kdtl_tbl (l_ctr).old_cp_id
15368                      || ','
15369                      || 'Item Id:'
15370                      || p_kdtl_tbl (l_ctr).prod_inventory_item
15371                      || ','
15372                      || 'Old Quantity:'
15373                      || p_kdtl_tbl (l_ctr).current_cp_quantity
15374                      || ','
15375                      || 'Transaction type :'
15376                      || 'IDC'
15377                      || ','
15378                      || ' Transaction date :'
15379                      || TRUNC(p_kdtl_tbl (l_ctr).transaction_date)
15380                      || ','
15381                      || 'Installation Date:'
15382                      || trunc(p_kdtl_tbl (l_ctr).installation_date);
15383                   --oks_instance_history
15384                   l_old_cp_id := p_kdtl_tbl (l_ctr).old_cp_id;
15385                   l_insthist_rec.instance_id := p_kdtl_tbl (l_ctr).old_cp_id;
15386                   l_insthist_rec.transaction_type := 'IDC';
15387                   l_insthist_rec.transaction_date :=
15388                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
15389                   l_insthist_rec.reference_number := l_ref_num;
15390                   l_insthist_rec.PARAMETERS := l_parameters;
15391                   oks_ins_pvt.insert_row (p_api_version        => 1.0,
15392                                           p_init_msg_list      => 'T',
15393                                           x_return_status      => l_return_status,
15394                                           x_msg_count          => x_msg_count,
15395                                           x_msg_data           => x_msg_data,
15396                                           p_insv_rec           => l_insthist_rec,
15397                                           x_insv_rec           => x_insthist_rec
15398                                          );
15399 
15400                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
15401                      )
15402                   THEN
15403                      fnd_log.STRING
15404                                 (fnd_log.level_event,
15405                                  g_module_current || '.UPDATE_CONTRACT_IDC',
15406                                     'oks_ins_pvt.insert_row(Return status = '
15407                                  || l_return_status
15408                                  || ')'
15409                                 );
15410                   END IF;
15411 
15412                   x_return_status := l_return_status;
15413 
15414                   IF NOT l_return_status = okc_api.g_ret_sts_success
15415                   THEN
15416                      x_return_status := l_return_status;
15417                      RAISE g_exception_halt_validation;
15418                   END IF;
15419 
15420                   l_instparent_id := x_insthist_rec.ID;
15421                END IF;
15422 
15423                l_inst_dtls_tbl (1).ins_id := l_instparent_id;
15424                --oks_inst_history_details
15425                oks_ihd_pvt.insert_row (p_api_version        => 1.0,
15426                                        p_init_msg_list      => 'T',
15427                                        x_return_status      => l_return_status,
15428                                        x_msg_count          => x_msg_count,
15429                                        x_msg_data           => x_msg_data,
15430                                        p_ihdv_tbl           => l_inst_dtls_tbl,
15431                                        x_ihdv_tbl           => x_inst_dtls_tbl
15432                                       );
15433 
15434                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
15435                THEN
15436                   fnd_log.STRING
15437                                 (fnd_log.level_event,
15438                                  g_module_current || '.UPDATE_CONTRACT_IDC',
15439                                     'oks_ihd_pvt.insert_row(Return status = '
15440                                  || l_return_status
15441                                  || ')'
15442                                 );
15443                END IF;
15444 
15445                x_return_status := l_return_status;
15446 
15447                IF NOT l_return_status = okc_api.g_ret_sts_success
15448                THEN
15449                   x_return_status := l_return_status;
15450                   RAISE g_exception_halt_validation;
15451                END IF;
15452             END IF;
15453 
15454             launch_workflow
15455                        (   'INSTALL BASE ACTIVITY : INSTALLTION DATE CHANGE  '
15456                         || fnd_global.local_chr (10)
15457                         || 'Contract Number       :         '
15458                         || get_contract_number (p_kdtl_tbl (l_ctr).hdr_id)
15459                         || fnd_global.local_chr (10)
15460                         || 'Inatallation date changed to    :         '
15461                         || trunc(p_kdtl_tbl (l_ctr).installation_date)
15462                        );
15463             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
15464             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
15465             l_hdr_sdt := NULL;
15466             l_hdr_edt := NULL;
15467             l_top_sdt := NULL;
15468             l_top_edt := NULL;
15469             l_sub_sdt := NULL;
15470             l_sub_edt := NULL;
15471          END LOOP;
15472       END IF;
15473    EXCEPTION
15474       WHEN g_exception_halt_validation
15475       THEN
15476          x_return_status := l_return_status;
15477          NULL;
15478       WHEN OTHERS
15479       THEN
15480          x_return_status := okc_api.g_ret_sts_unexp_error;
15481          okc_api.set_message (g_app_name,
15482                               g_unexpected_error,
15483                               g_sqlcode_token,
15484                               SQLCODE,
15485                               g_sqlerrm_token,
15486                               SQLERRM
15487                              );
15488    END;
15489 
15490    PROCEDURE create_contract_ibupdate (
15491       p_kdtl_tbl        IN              contract_tbl,
15492       x_return_status   OUT NOCOPY      VARCHAR2,
15493       x_msg_count       OUT NOCOPY      NUMBER,
15494       x_msg_data        OUT NOCOPY      VARCHAR2
15495    )
15496    IS
15497       CURSOR l_cust_csr (p_inventory_item_id NUMBER)
15498       IS
15499          SELECT mtl.NAME, mtl.description
15500            FROM okx_system_items_v mtl
15501           WHERE mtl.inventory_item_id = p_inventory_item_id
15502             AND mtl.organization_id = okc_context.get_okc_organization_id;
15503 
15504       CURSOR l_bill_csr (p_cle_id NUMBER)
15505       IS
15506          SELECT SUM (amount)
15507            FROM oks_bill_sub_lines_v
15508           WHERE cle_id = p_cle_id;
15509 
15510       CURSOR l_serv_csr (p_serv_id NUMBER)
15511       IS
15512          SELECT b.concatenated_segments description
15513            FROM mtl_system_items_b_kfv b
15514           WHERE b.inventory_item_id = p_serv_id AND ROWNUM < 2;
15515 
15516       CURSOR l_refnum_csr (p_cp_id NUMBER)
15517       IS
15518          SELECT instance_number
15519            FROM csi_item_instances
15520           WHERE instance_id = p_cp_id;
15521 
15522       l_ref_num                   VARCHAR2 (30);
15523       l_parameters                VARCHAR2 (2000);
15524       l_renewal_id                NUMBER;
15525       --Contract Line Table
15526       l_clev_tbl_in               okc_contract_pub.clev_tbl_type;
15527       l_clev_tbl_out              okc_contract_pub.clev_tbl_type;
15528       --SalesCredit
15529       l_salescredit_tbl_line      oks_extwarprgm_pvt.salescredit_tbl;
15530       l_salescredit_tbl_hdr       oks_extwarprgm_pvt.salescredit_tbl;
15531       l_line_rec                  k_line_service_rec_type;
15532       l_covd_rec                  k_line_covered_level_rec_type;
15533       -- l_kdtl_tbl                              OKS_EXTWAR_UTIL_PVT.Contract_tbl_type;
15534       l_available_yn              VARCHAR2 (1);
15535       l_return_status             VARCHAR2 (5)    := okc_api.g_ret_sts_success;
15536       l_chrid                     NUMBER                               := NULL;
15537       l_lineid                    NUMBER                               := NULL;
15538       l_cust_rec                  l_cust_csr%ROWTYPE;
15539       l_terminate_rec             okc_terminate_pvt.terminate_in_cle_rec;
15540       l_api_version      CONSTANT NUMBER                                := 1.0;
15541       l_init_msg_list    CONSTANT VARCHAR2 (1)              := okc_api.g_false;
15542       l_ste_code                  VARCHAR2 (40);
15543       l_sts_code                  VARCHAR2 (40);
15544       l_billed_amount             NUMBER;
15545       l_update_top_line           VARCHAR2 (1);
15546       l_msg_count                 NUMBER;
15547       l_msg_data                  VARCHAR2 (2000);
15548       l_covlvl_id                 NUMBER;
15549       l_amount                    NUMBER;
15550       l_subline_amount            NUMBER;
15551       l_srvc_stdt                 DATE;
15552       l_bill_schd_yn              VARCHAR2 (1);
15553       l_dur                       NUMBER;
15554       l_time                      VARCHAR2 (25);
15555       l_sll_tbl                   oks_bill_sch.streamlvl_tbl;
15556       l_bil_sch_out               oks_bill_sch.itembillsch_tbl;
15557       l_strmlvl_id                NUMBER                               := NULL;
15558       l_contact_tbl_in            oks_extwarprgm_pvt.contact_tbl;
15559       l_price_attribs_in          oks_extwarprgm_pvt.pricing_attributes_type;
15560       l_ctr                       NUMBER;
15561       l_temp                      VARCHAR2 (2000);
15562       l_suppress_credit           VARCHAR2 (10);
15563 
15564       CURSOR l_amount_csr (p_cle_id NUMBER)
15565       IS
15566          SELECT price_negotiated
15567            FROM okc_k_lines_b
15568           WHERE ID = p_cle_id;
15569 
15570       l_cov_tbl                   oks_bill_rec_pub.covered_tbl;
15571       l_ptr                       NUMBER                                  := 0;
15572       l_input_details             oks_qp_pkg.input_details;
15573       l_output_details            oks_qp_pkg.price_details;
15574       l_modif_details             qp_preq_grp.line_detail_tbl_type;
15575       l_pb_details                oks_qp_pkg.g_price_break_tbl_type;
15576       l_warranty_flag             VARCHAR2 (2);
15577       l_inst_dtls_tbl             oks_ihd_pvt.ihdv_tbl_type;
15578       x_inst_dtls_tbl             oks_ihd_pvt.ihdv_tbl_type;
15579       l_instparent_id             NUMBER;
15580       l_old_cp_id                 NUMBER;
15581       l_insthist_rec              oks_ins_pvt.insv_rec_type;
15582       x_insthist_rec              oks_ins_pvt.insv_rec_type;
15583       l_target_chr_id             NUMBER;
15584       l_opr_instance_id           NUMBER;
15585       l_renewal_opr_instance_id   NUMBER;
15586       l_update_id                 NUMBER;
15587       l_source_line_id            NUMBER;
15588       l_create_oper_instance      VARCHAR2 (1);
15589    BEGIN
15590       x_return_status := okc_api.g_ret_sts_success;
15591       l_old_cp_id := 0;
15592       l_target_chr_id := 0;
15593 
15594       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
15595       THEN
15596          fnd_log.STRING (fnd_log.level_event,
15597                          g_module_current || '.CREATE_CONTRACT_IBUPDATE.',
15598                          'count = ' || p_kdtl_tbl.COUNT || ')'
15599                         );
15600       END IF;
15601 
15602       IF p_kdtl_tbl.COUNT > 0
15603       THEN
15604          l_ctr := p_kdtl_tbl.FIRST;
15605 
15606          LOOP
15607             l_ptr := 1;
15608             l_inst_dtls_tbl.DELETE;
15609             okc_context.set_okc_org_context
15610                                            (p_kdtl_tbl (l_ctr).hdr_org_id,
15611                                             p_kdtl_tbl (l_ctr).organization_id
15612                                            );
15613 
15614             --  If status = 'ENTERED' then just update the qty and reprice and update billing schedule.
15615             --  else check if line is already billed.
15616             -- If partially billed or unbilled update the qty and reprice and update billing schedule.
15617             -- If line fully billed Then
15618             -- update qty of subline.
15619             -- create new top line and subline with updated qty and create one time billing schedule.
15620             -- the amount will be the diff.
15621 
15622             --If the qty decrement is due to return for repair ignore, only manual increments to the qty from IB is honored.
15623             IF p_kdtl_tbl (l_ctr).return_reason_code = 'REGULAR'
15624             THEN
15625                IF p_kdtl_tbl (l_ctr).new_quantity >
15626                                            p_kdtl_tbl (l_ctr).old_cp_quantity
15627                THEN
15628                   get_sts_code (NULL,
15629                                 p_kdtl_tbl (l_ctr).prod_sts_code,
15630                                 l_ste_code,
15631                                 l_sts_code
15632                                );
15633 
15634                   IF fnd_log.level_statement >=
15635                                                fnd_log.g_current_runtime_level
15636                   THEN
15637                      fnd_log.STRING (fnd_log.level_statement,
15638                                         g_module_current
15639                                      || '.CREATE_CONTRACT_IBUPDATE',
15640                                      'lse_id= ' || p_kdtl_tbl (l_ctr).lse_id
15641                                     );
15642                   END IF;
15643 
15644                   --errorout_n('in update lse_id'||p_kdtl_tbl(l_ctr).lse_id);
15645                   -- For Warranty lines instance qty is updated, no repricing done.
15646                   IF p_kdtl_tbl (l_ctr).lse_id = 18
15647                   THEN                                              --Warranty
15648                      UPDATE okc_k_items
15649                         SET number_of_items = p_kdtl_tbl (l_ctr).new_quantity
15650                       WHERE cle_id = p_kdtl_tbl (l_ctr).object_line_id;
15651 
15652                      l_inst_dtls_tbl (l_ptr).transaction_date :=
15653                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
15654                      l_inst_dtls_tbl (l_ptr).transaction_type := 'UPD';
15655                      l_inst_dtls_tbl (l_ptr).instance_amt_old :=
15656                                              p_kdtl_tbl (l_ctr).service_amount;
15657                      l_inst_dtls_tbl (l_ptr).instance_qty_old :=
15658                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
15659                      l_inst_dtls_tbl (l_ptr).old_contract_id :=
15660                                                      p_kdtl_tbl (l_ctr).hdr_id;
15661                      l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
15662                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
15663                      l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
15664                                                     p_kdtl_tbl (l_ctr).hdr_edt;
15665                      l_inst_dtls_tbl (l_ptr).old_service_line_id :=
15666                                             p_kdtl_tbl (l_ctr).service_line_id;
15667                      l_inst_dtls_tbl (l_ptr).old_service_start_date :=
15668                                                 p_kdtl_tbl (l_ctr).service_sdt;
15669                      l_inst_dtls_tbl (l_ptr).old_service_end_date :=
15670                                                 p_kdtl_tbl (l_ctr).service_edt;
15671                      l_inst_dtls_tbl (l_ptr).old_subline_id :=
15672                                              p_kdtl_tbl (l_ctr).object_line_id;
15673                      l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
15674                                                    p_kdtl_tbl (l_ctr).prod_sdt;
15675                      l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
15676                                                    p_kdtl_tbl (l_ctr).prod_edt;
15677                      l_inst_dtls_tbl (l_ptr).old_customer :=
15678                                                p_kdtl_tbl (l_ctr).cust_account;
15679                      l_inst_dtls_tbl (l_ptr).old_k_status :=
15680                                                     p_kdtl_tbl (l_ctr).hdr_sts;
15681                      l_inst_dtls_tbl (l_ptr).instance_id_new :=
15682                                                   p_kdtl_tbl (l_ctr).new_cp_id;
15683                      l_inst_dtls_tbl (l_ptr).instance_amt_new := NULL;
15684                      l_inst_dtls_tbl (l_ptr).instance_qty_new :=
15685                                                p_kdtl_tbl (l_ctr).new_quantity;
15686                      l_inst_dtls_tbl (l_ptr).new_contract_id :=
15687                                                      p_kdtl_tbl (l_ctr).hdr_id;
15688                      l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
15689                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
15690                      l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
15691                                                     p_kdtl_tbl (l_ctr).hdr_edt;
15692                      l_inst_dtls_tbl (l_ptr).new_service_line_id :=
15693                                             p_kdtl_tbl (l_ctr).service_line_id;
15694                      l_inst_dtls_tbl (l_ptr).new_service_start_date :=
15695                                                 p_kdtl_tbl (l_ctr).service_sdt;
15696                      l_inst_dtls_tbl (l_ptr).new_service_end_date :=
15697                                                 p_kdtl_tbl (l_ctr).service_edt;
15698                      l_inst_dtls_tbl (l_ptr).new_subline_id :=
15699                                              p_kdtl_tbl (l_ctr).object_line_id;
15700                      l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
15701                                                    p_kdtl_tbl (l_ctr).prod_sdt;
15702                      l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
15703                                                    p_kdtl_tbl (l_ctr).prod_edt;
15704                      l_inst_dtls_tbl (l_ptr).new_customer :=
15705                                                p_kdtl_tbl (l_ctr).cust_account;
15706                      l_inst_dtls_tbl (l_ptr).new_k_status :=
15707                                                     p_kdtl_tbl (l_ctr).hdr_sts;
15708                   ELSE                 --lse_id = 18
15709                                        -- For service/ Ext.Warranty line types
15710                      l_billed_amount := NULL;
15711 
15712                      OPEN l_bill_csr (p_kdtl_tbl (l_ctr).object_line_id);
15713 
15714                      FETCH l_bill_csr
15715                       INTO l_billed_amount;
15716 
15717                      CLOSE l_bill_csr;
15718 
15719                      IF fnd_log.level_statement >=
15720                                               fnd_log.g_current_runtime_level
15721                      THEN
15722                         fnd_log.STRING (fnd_log.level_statement,
15723                                            g_module_current
15724                                         || '.CREATE_CONTRACT_IBUPDATE',
15725                                            'Billed amount = '
15726                                         || l_billed_amount
15727                                         || ',Service amount = '
15728                                         || p_kdtl_tbl (l_ctr).service_amount
15729                                        );
15730                      END IF;
15731 
15732                      --If amount billed is null, update instance qty and reprice.
15733                      IF l_billed_amount IS NULL
15734                      THEN
15735                         UPDATE okc_k_items
15736                            SET number_of_items =
15737                                                p_kdtl_tbl (l_ctr).new_quantity
15738                          WHERE cle_id = p_kdtl_tbl (l_ctr).object_line_id;
15739 
15740                         --calling reprice
15741                         l_input_details.line_id :=
15742                                             p_kdtl_tbl (l_ctr).service_line_id;
15743                         l_input_details.subline_id :=
15744                                              p_kdtl_tbl (l_ctr).object_line_id;
15745                         l_input_details.intent := 'SP';
15746                         oks_qp_int_pvt.compute_price
15747                                        (p_api_version              => 1.0,
15748                                         p_init_msg_list            => 'T',
15749                                         p_detail_rec               => l_input_details,
15750                                         x_price_details            => l_output_details,
15751                                         x_modifier_details         => l_modif_details,
15752                                         x_price_break_details      => l_pb_details,
15753                                         x_return_status            => l_return_status,
15754                                         x_msg_count                => x_msg_count,
15755                                         x_msg_data                 => x_msg_data
15756                                        );
15757 
15758                         IF (fnd_log.level_event >=
15759                                                fnd_log.g_current_runtime_level
15760                            )
15761                         THEN
15762                            fnd_log.STRING
15763                               (fnd_log.level_event,
15764                                g_module_current || '.CREATE_CONTRACT_IBUPDATE',
15765                                   'oks_qp_int_pvt.compute_price(Return status = '
15766                                || l_return_status
15767                                || ',Repriced amount = '
15768                                || l_amount
15769                                || ')'
15770                               );
15771                         END IF;
15772 
15773                         IF l_return_status <> okc_api.g_ret_sts_success
15774                         THEN
15775                            RAISE g_exception_halt_validation;
15776                         END IF;
15777 
15778                         ---update billing schedule
15779                         oks_bill_sch.create_bill_sch_cp
15780                            (p_top_line_id        => p_kdtl_tbl (l_ctr).service_line_id,
15781                             p_cp_line_id         => p_kdtl_tbl (l_ctr).object_line_id,
15782                             p_cp_new             => 'N',
15783                             x_return_status      => l_return_status,
15784                             x_msg_count          => x_msg_count,
15785                             x_msg_data           => x_msg_data
15786                            );
15787 
15788                         IF (fnd_log.level_event >=
15789                                                fnd_log.g_current_runtime_level
15790                            )
15791                         THEN
15792                            fnd_log.STRING
15793                               (fnd_log.level_event,
15794                                g_module_current || '.CREATE_CONTRACT_IBUPDATE',
15795                                   'Oks_bill_sch.Create_Bill_Sch_CP(Return status = '
15796                                || l_return_status
15797                                || ')'
15798                               );
15799                         END IF;
15800 
15801                         IF l_return_status <> okc_api.g_ret_sts_success
15802                         THEN
15803                            okc_api.set_message (g_app_name,
15804                                                 g_required_value,
15805                                                 g_col_name_token,
15806                                                 'Sched Billing Rule (LINE)'
15807                                                );
15808                            RAISE g_exception_halt_validation;
15809                         END IF;
15810 
15811                         l_subline_amount := NULL;
15812 
15813                         OPEN l_amount_csr (p_kdtl_tbl (l_ctr).object_line_id);
15814 
15815                         FETCH l_amount_csr
15816                          INTO l_subline_amount;
15817 
15818                         CLOSE l_amount_csr;
15819 
15820                         UPDATE okc_k_lines_b
15821                            SET price_negotiated =
15822                                   (SELECT NVL (SUM (NVL (price_negotiated, 0)),0)
15823                                      FROM okc_k_lines_b
15824                                     WHERE cle_id = p_kdtl_tbl (l_ctr).service_line_id
15825                                       AND dnz_chr_id = p_kdtl_tbl (l_ctr).hdr_id
15826 				      and date_cancelled is null)
15827                          WHERE ID = p_kdtl_tbl (l_ctr).service_line_id;
15828 
15829                          UPDATE oks_k_lines_b
15830                             SET tax_amount =
15831                             (SELECT (NVL (SUM (NVL(tax_amount,0)),0))
15832                                FROM oks_k_lines_b
15833                               WHERE cle_id IN ( SELECT id
15834                                                   FROM okc_k_lines_b
15835                                                  WHERE cle_id =  p_kdtl_tbl (l_ctr).service_line_id
15836                                                    AND lse_id IN (9,25)
15837                                                    AND date_cancelled IS NULL ))
15838                         WHERE cle_id =p_kdtl_tbl (l_ctr).service_line_id;
15839 
15840                         UPDATE okc_k_headers_b
15841                            SET estimated_amount =
15842                                   (SELECT NVL (SUM (NVL (price_negotiated, 0)), 0 )
15843                                      FROM okc_k_lines_b
15844                                     WHERE dnz_chr_id = p_kdtl_tbl (l_ctr).hdr_id
15845                                       AND lse_id IN (1, 19)
15846 				      AND date_cancelled IS NULL )
15847                          WHERE ID = p_kdtl_tbl (l_ctr).hdr_id;
15848 
15849 
15850                          UPDATE oks_k_headers_b
15851                             SET tax_amount = ( SELECT (NVL (SUM (NVL(tax_amount,0)),0))
15852                                                  FROM oks_k_lines_b
15853                                                 WHERE cle_id IN (SELECT id
15854                                                                    FROM okc_k_lineS_b
15855                                                                   WHERE dnz_chr_id = p_kdtl_tbl (l_ctr).hdr_id
15856                                                                     AND date_cancelled IS NULL
15857                                                                     AND lse_id IN (1,19)))
15858                          WHERE chr_id = p_kdtl_tbl (l_ctr).hdr_id;
15859 
15860                         l_inst_dtls_tbl (l_ptr).transaction_date :=
15861                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
15862                         l_inst_dtls_tbl (l_ptr).transaction_type := 'UPD';
15863                         l_inst_dtls_tbl (l_ptr).instance_amt_old :=
15864                                              p_kdtl_tbl (l_ctr).service_amount;
15865                         l_inst_dtls_tbl (l_ptr).instance_qty_old :=
15866                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
15867                         l_inst_dtls_tbl (l_ptr).old_contract_id :=
15868                                                      p_kdtl_tbl (l_ctr).hdr_id;
15869                         l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
15870                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
15871                         l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
15872                                                     p_kdtl_tbl (l_ctr).hdr_edt;
15873                         l_inst_dtls_tbl (l_ptr).old_service_line_id :=
15874                                             p_kdtl_tbl (l_ctr).service_line_id;
15875                         l_inst_dtls_tbl (l_ptr).old_service_start_date :=
15876                                                 p_kdtl_tbl (l_ctr).service_sdt;
15877                         l_inst_dtls_tbl (l_ptr).old_service_end_date :=
15878                                                 p_kdtl_tbl (l_ctr).service_edt;
15879                         l_inst_dtls_tbl (l_ptr).old_subline_id :=
15880                                              p_kdtl_tbl (l_ctr).object_line_id;
15881                         l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
15882                                                    p_kdtl_tbl (l_ctr).prod_sdt;
15883                         l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
15884                                                    p_kdtl_tbl (l_ctr).prod_edt;
15885                         l_inst_dtls_tbl (l_ptr).old_customer :=
15886                                                p_kdtl_tbl (l_ctr).cust_account;
15887                         l_inst_dtls_tbl (l_ptr).old_k_status :=
15888                                                     p_kdtl_tbl (l_ctr).hdr_sts;
15889                         l_inst_dtls_tbl (l_ptr).instance_id_new :=
15890                                                   p_kdtl_tbl (l_ctr).old_cp_id;
15891                         l_inst_dtls_tbl (l_ptr).instance_amt_new :=
15892                                                               l_subline_amount;
15893                         l_inst_dtls_tbl (l_ptr).instance_qty_new :=
15894                                                p_kdtl_tbl (l_ctr).new_quantity;
15895                         l_inst_dtls_tbl (l_ptr).new_contract_id :=
15896                                                      p_kdtl_tbl (l_ctr).hdr_id;
15897                         l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
15898                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
15899                         l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
15900                                                     p_kdtl_tbl (l_ctr).hdr_edt;
15901                         l_inst_dtls_tbl (l_ptr).new_service_line_id :=
15902                                             p_kdtl_tbl (l_ctr).service_line_id;
15903                         l_inst_dtls_tbl (l_ptr).new_service_start_date :=
15904                                                 p_kdtl_tbl (l_ctr).service_sdt;
15905                         l_inst_dtls_tbl (l_ptr).new_service_end_date :=
15906                                                 p_kdtl_tbl (l_ctr).service_edt;
15907                         l_inst_dtls_tbl (l_ptr).new_subline_id :=
15908                                              p_kdtl_tbl (l_ctr).object_line_id;
15909                         l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
15910                                                    p_kdtl_tbl (l_ctr).prod_sdt;
15911                         l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
15912                                                    p_kdtl_tbl (l_ctr).prod_edt;
15913                         l_inst_dtls_tbl (l_ptr).new_customer :=
15914                                                p_kdtl_tbl (l_ctr).cust_account;
15915                         l_inst_dtls_tbl (l_ptr).new_k_status :=
15916                                                     p_kdtl_tbl (l_ctr).hdr_sts;
15917                      ELSE                          --billed_amount is not null
15918                            --errorout_n('in update l_billed_amount2'||l_billed_amount);
15919                         -- If line is fully billed , terminate the subline, issue credit and create a new subline with the updated qty
15920                         IF l_billed_amount =
15921                                             p_kdtl_tbl (l_ctr).service_amount
15922                         THEN
15923                            -- Terminate the subline and create a New Subline with the update qty
15924                            IF fnd_log.level_statement >=
15925                                               fnd_log.g_current_runtime_level
15926                            THEN
15927                               fnd_log.STRING (fnd_log.level_statement,
15928                                                  g_module_current
15929                                               || '.CREATE_CONTRACT_IBUPDATE',
15930                                               'The Line is fully billed'
15931                                              );
15932                            END IF;
15933 
15934                            get_sts_code (NULL,
15935                                          p_kdtl_tbl (l_ctr).hdr_sts,
15936                                          l_ste_code,
15937                                          l_sts_code
15938                                         );
15939 
15940                            IF l_ste_code = 'HOLD'
15941                            THEN
15942                               l_return_status := okc_api.g_ret_sts_error;
15943 
15944                               IF fnd_log.level_error >=
15945                                               fnd_log.g_current_runtime_level
15946                               THEN
15947                                  fnd_log.STRING
15948                                           (fnd_log.level_error,
15949                                               g_module_current
15950                                            || '.CREATE_CONTRACT_IBUPDATE.ERROR',
15951                                            ' Contract in QA_HOLD status'
15952                                           );
15953                               END IF;
15954 
15955                               okc_api.set_message
15956                                   (g_app_name,
15957                                    g_invalid_value,
15958                                    g_col_name_token,
15959                                       'Quantity Update not allowed. Contract '
15960                                    || p_kdtl_tbl (l_ctr).contract_number
15961                                    || ' is in QA_HOLD status'
15962                                   );
15963                               RAISE g_exception_halt_validation;
15964                            END IF;
15965 
15966                            ---to pass the term_cancel source.....
15967                            oks_bill_rec_pub.pre_terminate_cp
15968                               (p_calledfrom                => -1,
15969                                p_cle_id                    => p_kdtl_tbl
15970                                                                         (l_ctr).object_line_id,
15971                                p_termination_date          => TRUNC
15972                                                                  (p_kdtl_tbl
15973                                                                         (l_ctr).prod_sdt
15974                                                                  ),
15975                                p_terminate_reason          => 'UPD',
15976                                p_override_amount           => NULL,
15977                                p_con_terminate_amount      => NULL,
15978                                p_termination_amount        => NULL,
15979                                p_suppress_credit           => 'N',
15980                                p_full_credit               => 'Y',
15981                                p_term_date_flag            => 'N',
15982                                p_term_cancel_source        => 'IBUPDATE',
15983                                x_return_status             => l_return_status
15984                               );
15985 
15986                            IF (fnd_log.level_event >=
15987                                                fnd_log.g_current_runtime_level
15988                               )
15989                            THEN
15990                               fnd_log.STRING
15991                                  (fnd_log.level_event,
15992                                      g_module_current
15993                                   || '.CREATE_CONTRACT_IBUPDATE',
15994                                      ' oks_bill_rec_pub.Pre_terminate_cp(Retun status = '
15995                                   || l_return_status
15996                                   || ')'
15997                                  );
15998                            END IF;
15999 
16000                            IF NOT l_return_status = okc_api.g_ret_sts_success
16001                            THEN
16002                               RAISE g_exception_halt_validation;
16003                            END IF;
16004 
16005                            l_inst_dtls_tbl (l_ptr).transaction_date :=
16006                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
16007                            l_inst_dtls_tbl (l_ptr).transaction_type := 'UPD';
16008                            l_inst_dtls_tbl (l_ptr).instance_amt_old :=
16009                                              p_kdtl_tbl (l_ctr).service_amount;
16010                            l_inst_dtls_tbl (l_ptr).instance_qty_old :=
16011                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
16012                            l_inst_dtls_tbl (l_ptr).old_contract_id :=
16013                                                      p_kdtl_tbl (l_ctr).hdr_id;
16014                            l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
16015                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
16016                            l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
16017                                                     p_kdtl_tbl (l_ctr).hdr_edt;
16018                            l_inst_dtls_tbl (l_ptr).old_service_line_id :=
16019                                             p_kdtl_tbl (l_ctr).service_line_id;
16020                            l_inst_dtls_tbl (l_ptr).old_service_start_date :=
16021                                                 p_kdtl_tbl (l_ctr).service_sdt;
16022                            l_inst_dtls_tbl (l_ptr).old_service_end_date :=
16023                                                 p_kdtl_tbl (l_ctr).service_edt;
16024                            l_inst_dtls_tbl (l_ptr).old_subline_id :=
16025                                              p_kdtl_tbl (l_ctr).object_line_id;
16026                            l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
16027                                                    p_kdtl_tbl (l_ctr).prod_sdt;
16028                            l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
16029                                                    p_kdtl_tbl (l_ctr).prod_edt;
16030                            l_inst_dtls_tbl (l_ptr).old_customer :=
16031                                                p_kdtl_tbl (l_ctr).cust_account;
16032                            l_inst_dtls_tbl (l_ptr).old_k_status :=
16033                                                     p_kdtl_tbl (l_ctr).hdr_sts;
16034                            l_inst_dtls_tbl (l_ptr).instance_id_new :=
16035                                                   p_kdtl_tbl (l_ctr).old_cp_id;
16036                            l_inst_dtls_tbl (l_ptr).instance_amt_new :=
16037                                              p_kdtl_tbl (l_ctr).service_amount;
16038                            l_inst_dtls_tbl (l_ptr).instance_qty_new :=
16039                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
16040                            l_inst_dtls_tbl (l_ptr).new_contract_id :=
16041                                                      p_kdtl_tbl (l_ctr).hdr_id;
16042                            l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
16043                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
16044                            l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
16045                                                     p_kdtl_tbl (l_ctr).hdr_edt;
16046                            l_inst_dtls_tbl (l_ptr).new_service_line_id :=
16047                                             p_kdtl_tbl (l_ctr).service_line_id;
16048                            l_inst_dtls_tbl (l_ptr).new_service_start_date :=
16049                                                 p_kdtl_tbl (l_ctr).service_sdt;
16050                            l_inst_dtls_tbl (l_ptr).new_service_end_date :=
16051                                                 p_kdtl_tbl (l_ctr).service_edt;
16052                            l_inst_dtls_tbl (l_ptr).new_subline_id :=
16053                                              p_kdtl_tbl (l_ctr).object_line_id;
16054                            l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
16055                                                    p_kdtl_tbl (l_ctr).prod_sdt;
16056                            l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
16057                                                    p_kdtl_tbl (l_ctr).prod_edt;
16058                            l_inst_dtls_tbl (l_ptr).new_customer :=
16059                                                p_kdtl_tbl (l_ctr).cust_account;
16060                            l_inst_dtls_tbl (l_ptr).new_k_status :=
16061                                                     p_kdtl_tbl (l_ctr).hdr_sts;
16062                            l_inst_dtls_tbl (l_ptr).subline_date_terminated :=
16063                                                    p_kdtl_tbl (l_ctr).prod_sdt;
16064                            l_ptr := l_ptr + 1;
16065                            l_covd_rec.k_id := p_kdtl_tbl (l_ctr).hdr_id;
16066                            l_covd_rec.attach_2_line_id :=
16067                                             p_kdtl_tbl (l_ctr).service_line_id;
16068                            l_covd_rec.line_number := 1;
16069                            l_covd_rec.customer_product_id :=
16070                                                   p_kdtl_tbl (l_ctr).old_cp_id;
16071                            l_covd_rec.product_start_date :=
16072                                                    p_kdtl_tbl (l_ctr).prod_sdt;
16073                            l_covd_rec.product_end_date :=
16074                                                    p_kdtl_tbl (l_ctr).prod_edt;
16075                            l_covd_rec.quantity :=
16076                                                p_kdtl_tbl (l_ctr).new_quantity;
16077 
16078                            IF p_kdtl_tbl (l_ctr).lse_id = 25
16079                            THEN
16080                               l_warranty_flag := 'E';
16081                            ELSIF     p_kdtl_tbl (l_ctr).lse_id = 9
16082                                  AND p_kdtl_tbl (l_ctr).scs_code = 'SERVICE'
16083                            THEN
16084                               l_warranty_flag := 'S';
16085                            ELSIF p_kdtl_tbl (l_ctr).lse_id = 18
16086                            THEN
16087                               l_warranty_flag := 'W';
16088                            ELSIF     p_kdtl_tbl (l_ctr).lse_id = 9
16089                                  AND p_kdtl_tbl (l_ctr).scs_code =
16090                                                                 'SUBSCRIPTION'
16091                            THEN
16092                               l_warranty_flag := 'SU';
16093                            END IF;
16094 
16095                            l_covd_rec.warranty_flag := l_warranty_flag;
16096                            l_covd_rec.uom_code := p_kdtl_tbl (l_ctr).uom_code;
16097                            l_covd_rec.currency_code :=
16098                                            p_kdtl_tbl (l_ctr).service_currency;
16099                            l_covd_rec.product_sts_code :=
16100                                               p_kdtl_tbl (l_ctr).prod_sts_code;
16101 
16102                            OPEN l_serv_csr
16103                                        (p_kdtl_tbl (l_ctr).service_inventory_id
16104                                        );
16105 
16106                            FETCH l_serv_csr
16107                             INTO l_covd_rec.attach_2_line_desc;
16108 
16109                            CLOSE l_serv_csr;
16110 
16111                            l_covd_rec.line_renewal_type :=
16112                                      p_kdtl_tbl (l_ctr).prod_line_renewal_type;
16113                            l_covd_rec.list_price := 0;
16114                            l_covd_rec.negotiated_amount := 0;
16115                            l_covd_rec.prod_item_id :=
16116                                         p_kdtl_tbl (l_ctr).prod_inventory_item;
16117                            l_covd_rec.price_uom :=
16118                                              p_kdtl_tbl (l_ctr).price_uom_code;
16119                            l_covd_rec.toplvl_uom_code :=
16120                                             p_kdtl_tbl (l_ctr).toplvl_uom_code;
16121                            --mchoudha added for bug#5233956
16122                            l_covd_rec.toplvl_price_qty :=
16123                                             p_kdtl_tbl (l_ctr).toplvl_price_qty;
16124                            oks_extwarprgm_pvt.create_k_covered_levels
16125                                        (p_k_covd_rec         => l_covd_rec,
16126                                         p_price_attribs      => l_price_attribs_in,
16127                                         p_caller             => 'IB',
16128                                         x_order_error        => l_temp,
16129                                         x_covlvl_id          => l_covlvl_id,
16130                                         x_update_line        => l_update_top_line,
16131                                         x_return_status      => l_return_status,
16132                                         x_msg_count          => x_msg_count,
16133                                         x_msg_data           => x_msg_data
16134                                        );
16135 
16136                            --errorout_n('in update Create_K_Covered_Levels l_return_status'||l_return_status);
16137                            IF (fnd_log.level_event >=
16138                                                fnd_log.g_current_runtime_level
16139                               )
16140                            THEN
16141                               fnd_log.STRING
16142                                  (fnd_log.level_event,
16143                                      g_module_current
16144                                   || '.CREATE_CONTRACT_IBUPDATE',
16145                                      'oks_extwarprgm_pvt.create_k_covered_levels(Retun status = '
16146                                   || l_return_status
16147                                   || ')'
16148                                  );
16149                            END IF;
16150 
16151                            IF NOT l_return_status = 'S'
16152                            THEN
16153                               RAISE g_exception_halt_validation;
16154                            END IF;
16155 
16156                            l_create_oper_instance := 'N';
16157 
16158                            IF    l_opr_instance_id IS NULL
16159                               OR l_target_chr_id <> p_kdtl_tbl (l_ctr).hdr_id
16160                            THEN
16161                               l_target_chr_id := p_kdtl_tbl (l_ctr).hdr_id;
16162                               l_create_oper_instance := 'Y';
16163                            END IF;
16164 
16165                            create_transaction_source
16166                               (p_create_opr_inst       => 'Y',
16167                                p_source_code           => 'IBUPDATE',
16168                                p_target_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
16169                                p_source_line_id        => p_kdtl_tbl (l_ctr).object_line_id,
16170                                p_source_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
16171                                p_target_line_id        => l_covlvl_id,
16172                                x_oper_instance_id      => l_opr_instance_id,
16173                                x_return_status         => l_return_status,
16174                                x_msg_count             => x_msg_count,
16175                                x_msg_data              => x_msg_data
16176                               );
16177 
16178                            IF (fnd_log.level_event >=
16179                                                fnd_log.g_current_runtime_level
16180                               )
16181                            THEN
16182                               fnd_log.STRING
16183                                  (fnd_log.level_event,
16184                                      g_module_current
16185                                   || '.CREATE_CONTRACT_IBUPDATE',
16186                                      'Create_transaction_source(Retun status = '
16187                                   || l_return_status
16188                                   || ')'
16189                                  );
16190                            END IF;
16191 
16192                            IF NOT l_return_status = 'S'
16193                            THEN
16194                               RAISE g_exception_halt_validation;
16195                            END IF;
16196 
16197                            IF    l_renewal_opr_instance_id IS NULL
16198                               OR l_target_chr_id <> p_kdtl_tbl (l_ctr).hdr_id
16199                            THEN
16200                               l_create_oper_instance := 'Y';
16201                            ELSE
16202                               l_create_oper_instance := 'N';
16203                            END IF;
16204 
16205                            create_source_links
16206                               (p_create_opr_inst       => l_create_oper_instance,
16207                                p_source_code           => 'IBUPDATE',
16208                                p_target_chr_id         => p_kdtl_tbl (l_ctr).hdr_id,
16209                                p_line_id               => p_kdtl_tbl (l_ctr).object_line_id,
16210                                p_target_line_id        => l_covlvl_id,
16211                                p_txn_date              => p_kdtl_tbl (l_ctr).transaction_date,
16212                                x_oper_instance_id      => l_renewal_opr_instance_id,
16213                                x_return_status         => l_return_status,
16214                                x_msg_count             => x_msg_count,
16215                                x_msg_data              => x_msg_data
16216                               );
16217 
16218                            IF NOT l_return_status = 'S'
16219                            THEN
16220                               RAISE g_exception_halt_validation;
16221                            END IF;
16222 
16223                            IF (fnd_log.level_event >=
16224                                                fnd_log.g_current_runtime_level
16225                               )
16226                            THEN
16227                               fnd_log.STRING
16228                                     (fnd_log.level_event,
16229                                         g_module_current
16230                                      || '.CREATE_CONTRACT_IBUPDATE',
16231                                         'Create_source_links(Retun status = '
16232                                      || l_return_status
16233                                      || ')'
16234                                     );
16235                            END IF;
16236 
16237                            l_input_details.line_id :=
16238                                             p_kdtl_tbl (l_ctr).service_line_id;
16239                            l_input_details.subline_id := l_covlvl_id;
16240                            l_input_details.intent := 'SP';
16241                            oks_qp_int_pvt.compute_price
16242                                        (p_api_version              => 1.0,
16243                                         p_init_msg_list            => 'T',
16244                                         p_detail_rec               => l_input_details,
16245                                         x_price_details            => l_output_details,
16246                                         x_modifier_details         => l_modif_details,
16247                                         x_price_break_details      => l_pb_details,
16248                                         x_return_status            => l_return_status,
16249                                         x_msg_count                => l_msg_count,
16250                                         x_msg_data                 => l_msg_data
16251                                        );
16252 
16253                            IF (fnd_log.level_event >=
16254                                                fnd_log.g_current_runtime_level
16255                               )
16256                            THEN
16257                               fnd_log.STRING
16258                                  (fnd_log.level_event,
16259                                      g_module_current
16260                                   || '.CREATE_CONTRACT_IBUPDATE',
16261                                      'oks_qp_int_pvt.compute_price(Retun status = '
16262                                   || l_return_status
16263                                   || ',Repriced amount = '
16264                                   || l_output_details.serv_ext_amount
16265                                   || ')'
16266                                  );
16267                            END IF;
16268 
16269                            IF l_return_status <> okc_api.g_ret_sts_success
16270                            THEN
16271                               RAISE g_exception_halt_validation;
16272                            END IF;
16273 
16274                            l_subline_amount := NULL;
16275 
16276                            OPEN l_amount_csr (l_covlvl_id);
16277 
16278                            FETCH l_amount_csr
16279                             INTO l_subline_amount;
16280 
16281                            CLOSE l_amount_csr;
16282 
16283                            IF fnd_log.level_statement >=
16284                                                fnd_log.g_current_runtime_level
16285                            THEN
16286                               fnd_log.STRING (fnd_log.level_statement,
16287                                                  g_module_current
16288                                               || '.CREATE_CONTRACT_IBUPDATE',
16289                                                  'Subline Amount = '
16290                                               || l_subline_amount
16291                                              );
16292                            END IF;
16293 
16294                            UPDATE okc_k_lines_b
16295                               SET price_negotiated =
16296                                      (SELECT NVL (SUM (NVL (price_negotiated,0 ) ), 0 )
16297                                         FROM okc_k_lines_b
16298                                        WHERE cle_id = p_kdtl_tbl (l_ctr).service_line_id
16299                                          AND dnz_chr_id = p_kdtl_tbl (l_ctr).hdr_id
16300 					 AND date_cancelled is NULL)
16301                             WHERE ID = p_kdtl_tbl (l_ctr).service_line_id;
16302 
16303                             UPDATE oks_k_lines_b
16304                                SET tax_amount =
16305                                (SELECT (NVL (SUM (NVL(tax_amount,0)),0))
16306                         	  FROM oks_k_lines_b
16307                         	 WHERE cle_id IN ( SELECT id
16308                                                      FROM okc_k_lines_b
16309                                                     WHERE cle_id =  p_kdtl_tbl (l_ctr).service_line_id
16310                                                       AND lse_id IN (9,25)
16311                                                       AND date_cancelled IS NULL ))
16312                 	    WHERE cle_id =p_kdtl_tbl (l_ctr).service_line_id;
16313 
16314                            UPDATE okc_k_headers_b
16315                               SET estimated_amount =
16316                                      (SELECT NVL (SUM (NVL (price_negotiated,
16317                                                             0
16318                                                            )
16319                                                       ),
16320                                                   0
16321                                                  )
16322                                         FROM okc_k_lines_b
16323                                        WHERE dnz_chr_id =
16324                                                      p_kdtl_tbl (l_ctr).hdr_id
16325                                          AND lse_id IN (1, 19)
16326 					 AND date_cancelled IS NULL)
16327                             WHERE ID = p_kdtl_tbl (l_ctr).hdr_id;
16328 
16329                             UPDATE oks_k_headers_b
16330                                SET tax_amount = ( SELECT (NVL (SUM (NVL(tax_amount,0)),0))
16331                                                     FROM oks_k_lines_b
16332                                                    WHERE cle_id IN (SELECT id
16333                                                                       FROM okc_k_lineS_b
16334                                                                      WHERE dnz_chr_id = p_kdtl_tbl (l_ctr).hdr_id
16335                                                                        AND date_cancelled IS NULL
16336                                                                        AND lse_id IN (1,19)))
16337                             WHERE chr_id = p_kdtl_tbl (l_ctr).hdr_id;
16338 
16339 			   l_inst_dtls_tbl (l_ptr).transaction_date :=
16340                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
16341                            l_inst_dtls_tbl (l_ptr).transaction_type := 'UPD';
16342                            l_inst_dtls_tbl (l_ptr).instance_amt_old :=
16343                                              p_kdtl_tbl (l_ctr).service_amount;
16344                            l_inst_dtls_tbl (l_ptr).instance_qty_old :=
16345                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
16346                            l_inst_dtls_tbl (l_ptr).old_contract_id :=
16347                                                      p_kdtl_tbl (l_ctr).hdr_id;
16348                            l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
16349                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
16350                            l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
16351                                                     p_kdtl_tbl (l_ctr).hdr_edt;
16352                            l_inst_dtls_tbl (l_ptr).old_service_line_id :=
16353                                             p_kdtl_tbl (l_ctr).service_line_id;
16354                            l_inst_dtls_tbl (l_ptr).old_service_start_date :=
16355                                                 p_kdtl_tbl (l_ctr).service_sdt;
16356                            l_inst_dtls_tbl (l_ptr).old_service_end_date :=
16357                                                 p_kdtl_tbl (l_ctr).service_edt;
16358                            l_inst_dtls_tbl (l_ptr).old_subline_id :=
16359                                              p_kdtl_tbl (l_ctr).object_line_id;
16360                            l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
16361                                                    p_kdtl_tbl (l_ctr).prod_sdt;
16362                            l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
16363                                                    p_kdtl_tbl (l_ctr).prod_edt;
16364                            l_inst_dtls_tbl (l_ptr).old_customer :=
16365                                                p_kdtl_tbl (l_ctr).cust_account;
16366                            l_inst_dtls_tbl (l_ptr).old_k_status :=
16367                                                     p_kdtl_tbl (l_ctr).hdr_sts;
16368                            l_inst_dtls_tbl (l_ptr).instance_id_new :=
16369                                                   p_kdtl_tbl (l_ctr).old_cp_id;
16370                            l_inst_dtls_tbl (l_ptr).instance_amt_new :=
16371                                                               l_subline_amount;
16372                            l_inst_dtls_tbl (l_ptr).instance_qty_new :=
16373                                                p_kdtl_tbl (l_ctr).new_quantity;
16374                            l_inst_dtls_tbl (l_ptr).new_contract_id :=
16375                                                      p_kdtl_tbl (l_ctr).hdr_id;
16376                            l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
16377                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
16378                            l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
16379                                                     p_kdtl_tbl (l_ctr).hdr_edt;
16380                            l_inst_dtls_tbl (l_ptr).new_service_line_id :=
16381                                             p_kdtl_tbl (l_ctr).service_line_id;
16382                            l_inst_dtls_tbl (l_ptr).new_service_start_date :=
16383                                                 p_kdtl_tbl (l_ctr).service_sdt;
16384                            l_inst_dtls_tbl (l_ptr).new_service_end_date :=
16385                                                 p_kdtl_tbl (l_ctr).service_edt;
16386                            l_inst_dtls_tbl (l_ptr).new_subline_id :=
16387                                                                    l_covlvl_id;
16388                            l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
16389                                                    p_kdtl_tbl (l_ctr).prod_sdt;
16390                            l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
16391                                                    p_kdtl_tbl (l_ctr).prod_edt;
16392                            l_inst_dtls_tbl (l_ptr).new_customer :=
16393                                                p_kdtl_tbl (l_ctr).cust_account;
16394                            l_inst_dtls_tbl (l_ptr).new_k_status :=
16395                                                     p_kdtl_tbl (l_ctr).hdr_sts;
16396 
16397                            --x_inst_dtls_tbl(l_ptr).subline_date_terminated   := p_kdtl_tbl( l_ctr ).prod_sdt;
16398                            ---update billing schedule
16399                            IF check_lvlelements_exists
16400                                             (p_kdtl_tbl (l_ctr).service_line_id
16401                                             )
16402                            THEN
16403                               oks_bill_sch.create_bill_sch_cp
16404                                  (p_top_line_id        => p_kdtl_tbl (l_ctr).service_line_id,
16405                                   p_cp_line_id         => l_covlvl_id,
16406                                   p_cp_new             => 'Y',
16407                                   x_return_status      => l_return_status,
16408                                   x_msg_count          => l_msg_count,
16409                                   x_msg_data           => l_msg_data
16410                                  );
16411 
16412                               IF (fnd_log.level_event >=
16413                                                fnd_log.g_current_runtime_level
16414                                  )
16415                               THEN
16416                                  fnd_log.STRING
16417                                     (fnd_log.level_event,
16418                                         g_module_current
16419                                      || '.CREATE_CONTRACT_IBUPDATE',
16420                                         'oks_bill_sch.create_bill_sch_cp(Retun status = '
16421                                      || l_return_status
16422                                      || ')'
16423                                     );
16424                               END IF;
16425 
16426                               IF l_return_status <> okc_api.g_ret_sts_success
16427                               THEN
16428                                  okc_api.set_message
16429                                                  (g_app_name,
16430                                                   g_required_value,
16431                                                   g_col_name_token,
16432                                                   'Sched Billing Rule (LINE)'
16433                                                  );
16434                                  RAISE g_exception_halt_validation;
16435                               END IF;
16436                            END IF;
16437                         ELSE       --Billed amount is less than service amount
16438                            UPDATE okc_k_items
16439                               SET number_of_items =
16440                                                p_kdtl_tbl (l_ctr).new_quantity
16441                             WHERE cle_id = p_kdtl_tbl (l_ctr).object_line_id;
16442 
16443                            l_input_details.line_id :=
16444                                             p_kdtl_tbl (l_ctr).service_line_id;
16445                            l_input_details.subline_id :=
16446                                              p_kdtl_tbl (l_ctr).object_line_id;
16447                            l_input_details.intent := 'SP';
16448                            oks_qp_int_pvt.compute_price
16449                                        (p_api_version              => 1.0,
16450                                         p_init_msg_list            => 'T',
16451                                         p_detail_rec               => l_input_details,
16452                                         x_price_details            => l_output_details,
16453                                         x_modifier_details         => l_modif_details,
16454                                         x_price_break_details      => l_pb_details,
16455                                         x_return_status            => l_return_status,
16456                                         x_msg_count                => l_msg_count,
16457                                         x_msg_data                 => l_msg_data
16458                                        );
16459 
16460                            IF (fnd_log.level_event >=
16461                                                fnd_log.g_current_runtime_level
16462                               )
16463                            THEN
16464                               fnd_log.STRING
16465                                  (fnd_log.level_event,
16466                                      g_module_current
16467                                   || '.CREATE_CONTRACT_IBUPDATE',
16468                                      'oks_qp_int_pvt.compute_price(Retun status = '
16469                                   || l_return_status
16470                                   || ',Repriced amount = '
16471                                   || l_output_details.serv_ext_amount
16472                                   || ')'
16473                                  );
16474                            END IF;
16475 
16476                            IF l_return_status <> okc_api.g_ret_sts_success
16477                            THEN
16478                               RAISE g_exception_halt_validation;
16479                            END IF;
16480 
16481                            l_amount := l_output_details.serv_ext_amount;
16482 
16483                            IF l_amount <= l_billed_amount
16484                            THEN
16485                               UPDATE okc_k_lines_b
16486                                  SET price_negotiated = l_billed_amount
16487                                WHERE ID = p_kdtl_tbl (l_ctr).object_line_id;
16488                            END IF;
16489 
16490                            l_subline_amount := NULL;
16491 
16492                            OPEN l_amount_csr (p_kdtl_tbl (l_ctr).object_line_id
16493                                              );
16494 
16495                            FETCH l_amount_csr
16496                             INTO l_subline_amount;
16497 
16498                            CLOSE l_amount_csr;
16499 
16500                            UPDATE okc_k_lines_b
16501                               SET price_negotiated =
16502                                      (SELECT NVL (SUM (NVL (price_negotiated,
16503                                                             0
16504                                                            )
16505                                                       ),
16506                                                   0
16507                                                  )
16508                                         FROM okc_k_lines_b
16509                                        WHERE cle_id =
16510                                                 p_kdtl_tbl (l_ctr).service_line_id
16511                                          AND dnz_chr_id =
16512                                                      p_kdtl_tbl (l_ctr).hdr_id
16513 					 AND date_cancelled IS NULL)
16514                             WHERE ID = p_kdtl_tbl (l_ctr).service_line_id;
16515 
16516                             UPDATE oks_k_lines_b
16517                                SET tax_amount =
16518                                (SELECT (NVL (SUM (NVL(tax_amount,0)),0))
16519                         	  FROM oks_k_lines_b
16520                         	 WHERE cle_id IN ( SELECT id
16521                                                      FROM okc_k_lines_b
16522                                                     WHERE cle_id =  p_kdtl_tbl (l_ctr).service_line_id
16523                                                       AND lse_id IN (9,25)
16524                                                       AND date_cancelled IS NULL ))
16525                             WHERE cle_id =p_kdtl_tbl (l_ctr).service_line_id;
16526 
16527                            UPDATE okc_k_headers_b
16528                               SET estimated_amount =
16529                                      (SELECT NVL (SUM (NVL (price_negotiated,
16530                                                             0
16531                                                            )
16532                                                       ),
16533                                                   0
16534                                                  )
16535                                         FROM okc_k_lines_b
16536                                        WHERE dnz_chr_id =
16537                                                      p_kdtl_tbl (l_ctr).hdr_id
16538                                          AND lse_id IN (1, 19)
16539 					 AND date_cancelled IS NULL)
16540                             WHERE ID = p_kdtl_tbl (l_ctr).hdr_id;
16541 
16542 
16543                             UPDATE oks_k_headers_b
16544                                SET tax_amount = ( SELECT (NVL (SUM (NVL(tax_amount,0)),0))
16545                                                     FROM oks_k_lines_b
16546                                                    WHERE cle_id IN (SELECT id
16547                                                                       FROM okc_k_lineS_b
16548                                                                      WHERE dnz_chr_id = p_kdtl_tbl (l_ctr).hdr_id
16549                                                                        AND date_cancelled IS NULL
16550                                                                        AND lse_id IN (1,19)))
16551                             WHERE chr_id = p_kdtl_tbl (l_ctr).hdr_id;
16552 
16553                            ---update billing schedule
16554                            IF check_lvlelements_exists
16555                                             (p_kdtl_tbl (l_ctr).service_line_id
16556                                             )
16557                            THEN
16558                               oks_bill_sch.create_bill_sch_cp
16559                                  (p_top_line_id        => p_kdtl_tbl (l_ctr).service_line_id,
16560                                   p_cp_line_id         => p_kdtl_tbl (l_ctr).object_line_id,
16561                                   p_cp_new             => 'N',
16562                                   x_return_status      => l_return_status,
16563                                   x_msg_count          => l_msg_count,
16564                                   x_msg_data           => l_msg_data
16565                                  );
16566 
16567                               IF (fnd_log.level_event >=
16568                                                fnd_log.g_current_runtime_level
16569                                  )
16570                               THEN
16571                                  fnd_log.STRING
16572                                     (fnd_log.level_event,
16573                                         g_module_current
16574                                      || '.CREATE_CONTRACT_IBUPDATE',
16575                                         'oks_bill_sch.create_bill_sch_cp(Retun status = '
16576                                      || l_return_status
16577                                      || ')'
16578                                     );
16579                               END IF;
16580 
16581                               IF l_return_status <> okc_api.g_ret_sts_success
16582                               THEN
16583                                  okc_api.set_message
16584                                                  (g_app_name,
16585                                                   g_required_value,
16586                                                   g_col_name_token,
16587                                                   'Sched Billing Rule (LINE)'
16588                                                  );
16589                                  RAISE g_exception_halt_validation;
16590                               END IF;
16591                            END IF;
16592 
16593                            l_inst_dtls_tbl (l_ptr).transaction_date :=
16594                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
16595                            l_inst_dtls_tbl (l_ptr).transaction_type := 'UPD';
16596                            l_inst_dtls_tbl (l_ptr).instance_amt_old :=
16597                                              p_kdtl_tbl (l_ctr).service_amount;
16598                            l_inst_dtls_tbl (l_ptr).instance_qty_old :=
16599                                             p_kdtl_tbl (l_ctr).old_cp_quantity;
16600                            l_inst_dtls_tbl (l_ptr).old_contract_id :=
16601                                                      p_kdtl_tbl (l_ctr).hdr_id;
16602                            l_inst_dtls_tbl (l_ptr).old_contact_start_date :=
16603                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
16604                            l_inst_dtls_tbl (l_ptr).old_contract_end_date :=
16605                                                     p_kdtl_tbl (l_ctr).hdr_edt;
16606                            l_inst_dtls_tbl (l_ptr).old_service_line_id :=
16607                                             p_kdtl_tbl (l_ctr).service_line_id;
16608                            l_inst_dtls_tbl (l_ptr).old_service_start_date :=
16609                                                 p_kdtl_tbl (l_ctr).service_sdt;
16610                            l_inst_dtls_tbl (l_ptr).old_service_end_date :=
16611                                                 p_kdtl_tbl (l_ctr).service_edt;
16612                            l_inst_dtls_tbl (l_ptr).old_subline_id :=
16613                                              p_kdtl_tbl (l_ctr).object_line_id;
16614                            l_inst_dtls_tbl (l_ptr).old_subline_start_date :=
16615                                                    p_kdtl_tbl (l_ctr).prod_sdt;
16616                            l_inst_dtls_tbl (l_ptr).old_subline_end_date :=
16617                                                    p_kdtl_tbl (l_ctr).prod_edt;
16618                            l_inst_dtls_tbl (l_ptr).old_customer :=
16619                                                p_kdtl_tbl (l_ctr).cust_account;
16620                            l_inst_dtls_tbl (l_ptr).old_k_status :=
16621                                                     p_kdtl_tbl (l_ctr).hdr_sts;
16622                            l_inst_dtls_tbl (l_ptr).instance_id_new :=
16623                                                   p_kdtl_tbl (l_ctr).old_cp_id;
16624                            l_inst_dtls_tbl (l_ptr).instance_amt_new :=
16625                                                               l_subline_amount;
16626                            l_inst_dtls_tbl (l_ptr).instance_qty_new :=
16627                                                p_kdtl_tbl (l_ctr).new_quantity;
16628                            l_inst_dtls_tbl (l_ptr).new_contract_id :=
16629                                                      p_kdtl_tbl (l_ctr).hdr_id;
16630                            l_inst_dtls_tbl (l_ptr).new_contact_start_date :=
16631                                                     p_kdtl_tbl (l_ctr).hdr_sdt;
16632                            l_inst_dtls_tbl (l_ptr).new_contract_end_date :=
16633                                                     p_kdtl_tbl (l_ctr).hdr_edt;
16634                            l_inst_dtls_tbl (l_ptr).new_service_line_id :=
16635                                             p_kdtl_tbl (l_ctr).service_line_id;
16636                            l_inst_dtls_tbl (l_ptr).new_service_start_date :=
16637                                                 p_kdtl_tbl (l_ctr).service_sdt;
16638                            l_inst_dtls_tbl (l_ptr).new_service_end_date :=
16639                                                 p_kdtl_tbl (l_ctr).service_edt;
16640                            l_inst_dtls_tbl (l_ptr).new_subline_id :=
16641                                              p_kdtl_tbl (l_ctr).object_line_id;
16642                            l_inst_dtls_tbl (l_ptr).new_subline_start_date :=
16643                                                    p_kdtl_tbl (l_ctr).prod_sdt;
16644                            l_inst_dtls_tbl (l_ptr).new_subline_end_date :=
16645                                                    p_kdtl_tbl (l_ctr).prod_edt;
16646                            l_inst_dtls_tbl (l_ptr).new_customer :=
16647                                                p_kdtl_tbl (l_ctr).cust_account;
16648                            l_inst_dtls_tbl (l_ptr).new_k_status :=
16649                                                     p_kdtl_tbl (l_ctr).hdr_sts;
16650                         END IF;
16651                      END IF;                         -- Billed amt is not null
16652                   END IF;                                       -- if Warranty
16653                END IF;
16654 
16655                --errorout_n('l_inst_dtls_tbl.count'||l_inst_dtls_tbl.count);
16656                IF l_inst_dtls_tbl.COUNT <> 0
16657                THEN
16658                   IF l_old_cp_id <> p_kdtl_tbl (l_ctr).old_cp_id
16659                   THEN
16660                      OPEN l_refnum_csr (p_kdtl_tbl (l_ctr).old_cp_id);
16661 
16662                      FETCH l_refnum_csr
16663                       INTO l_ref_num;
16664 
16665                      CLOSE l_refnum_csr;
16666 
16667                      l_parameters :=
16668                            ' Old CP :'
16669                         || p_kdtl_tbl (l_ctr).old_cp_id
16670                         || ','
16671                         || 'Item Id:'
16672                         || p_kdtl_tbl (l_ctr).prod_inventory_item
16673                         || ','
16674                         || 'Old Quantity:'
16675                         || p_kdtl_tbl (l_ctr).old_cp_quantity
16676                         || ','
16677                         || 'Transaction type :'
16678                         || 'UPD'
16679                         || ','
16680                         || ' Transaction date :'
16681                         || TRUNC(p_kdtl_tbl (l_ctr).transaction_date)
16682                         || ','
16683                         || 'New quantity:'
16684                         || p_kdtl_tbl (l_ctr).new_quantity;
16685                      --oks_instance_history
16686                      l_old_cp_id := p_kdtl_tbl (l_ctr).old_cp_id;
16687                      l_insthist_rec.instance_id :=
16688                                                   p_kdtl_tbl (l_ctr).old_cp_id;
16689                      l_insthist_rec.transaction_type := 'UPD';
16690                      l_insthist_rec.transaction_date :=
16691                                            TRUNC(p_kdtl_tbl (l_ctr).transaction_date);
16692                      l_insthist_rec.reference_number := l_ref_num;
16693                      l_insthist_rec.PARAMETERS := l_parameters;
16694                      oks_ins_pvt.insert_row
16695                                           (p_api_version        => 1.0,
16696                                            p_init_msg_list      => 'T',
16697                                            x_return_status      => l_return_status,
16698                                            x_msg_count          => l_msg_count,
16699                                            x_msg_data           => l_msg_data,
16700                                            p_insv_rec           => l_insthist_rec,
16701                                            x_insv_rec           => x_insthist_rec
16702                                           );
16703 
16704                      IF (fnd_log.level_event >=
16705                                                fnd_log.g_current_runtime_level
16706                         )
16707                      THEN
16708                         fnd_log.STRING
16709                                 (fnd_log.level_event,
16710                                     g_module_current
16711                                  || '.CREATE_CONTRACT_IBUPDATE',
16712                                     'oks_ins_pvt.insert_row(Return status = '
16713                                  || l_return_status
16714                                  || ')'
16715                                 );
16716                      END IF;
16717 
16718                      x_return_status := l_return_status;
16719 
16720                      IF NOT l_return_status = okc_api.g_ret_sts_success
16721                      THEN
16722                         x_return_status := l_return_status;
16723                         RAISE g_exception_halt_validation;
16724                      END IF;
16725 
16726                      l_instparent_id := x_insthist_rec.ID;
16727                   END IF;
16728 
16729                   FOR i IN l_inst_dtls_tbl.FIRST .. l_inst_dtls_tbl.LAST
16730                   LOOP
16731                      l_inst_dtls_tbl (i).ins_id := l_instparent_id;
16732                   END LOOP;
16733 
16734                   --oks_inst_history_details
16735                   oks_ihd_pvt.insert_row (p_api_version        => 1.0,
16736                                           p_init_msg_list      => 'T',
16737                                           x_return_status      => l_return_status,
16738                                           x_msg_count          => l_msg_count,
16739                                           x_msg_data           => l_msg_data,
16740                                           p_ihdv_tbl           => l_inst_dtls_tbl,
16741                                           x_ihdv_tbl           => x_inst_dtls_tbl
16742                                          );
16743 
16744                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level
16745                      )
16746                   THEN
16747                      fnd_log.STRING
16748                                 (fnd_log.level_event,
16749                                     g_module_current
16750                                  || '.CREATE_CONTRACT_IBUPDATE',
16751                                     'oks_ihd_pvt.insert_row(Return status = '
16752                                  || l_return_status
16753                                  || ')'
16754                                 );
16755                   END IF;
16756 
16757                   x_return_status := l_return_status;
16758 
16759                   IF NOT l_return_status = okc_api.g_ret_sts_success
16760                   THEN
16761                      x_return_status := l_return_status;
16762                      RAISE g_exception_halt_validation;
16763                   END IF;
16764                END IF;
16765             END IF;
16766 
16767             EXIT WHEN l_ctr = p_kdtl_tbl.LAST;
16768             l_ctr := p_kdtl_tbl.NEXT (l_ctr);
16769          END LOOP;
16770       END IF;
16771 
16772       x_return_status := l_return_status;
16773    EXCEPTION
16774       WHEN g_exception_halt_validation
16775       THEN
16776          x_return_status := l_return_status;
16777          NULL;
16778       WHEN OTHERS
16779       THEN
16780          x_return_status := okc_api.g_ret_sts_unexp_error;
16781          okc_api.set_message (g_app_name,
16782                               g_unexpected_error,
16783                               g_sqlcode_token,
16784                               SQLCODE,
16785                               g_sqlerrm_token,
16786                               SQLERRM
16787                              );
16788    END;
16789 
16790    PROCEDURE get_jtf_resource (
16791       p_authorg_id                   NUMBER,
16792       p_party_id                     NUMBER,
16793       x_winners_rec     OUT NOCOPY   jtf_terr_assign_pub.bulk_winners_rec_type,
16794       x_msg_count       OUT NOCOPY   NUMBER,
16795       x_msg_data        OUT NOCOPY   VARCHAR2,
16796       x_return_status   OUT NOCOPY   VARCHAR2
16797    )
16798    IS
16799 -- Fix for bug 4142999
16800       CURSOR get_vendor_details
16801       IS
16802          SELECT a.party_name, b.country, b.region_2
16803            FROM hr_locations b, hr_all_organization_units c, hz_parties a
16804           WHERE b.location_id = c.location_id
16805             AND c.organization_id = p_authorg_id
16806             AND a.party_id = p_party_id;
16807 
16808       CURSOR get_party_details
16809       IS
16810          SELECT hz.party_name, hzl.country, hzl.state
16811            FROM hz_parties hz, hz_party_sites hzs, hz_locations hzl
16812           WHERE hz.party_id = p_party_id
16813             AND hzs.party_id = hz.party_id
16814             AND hzs.identifying_address_flag = 'Y'
16815             AND hzl.location_id = hzs.location_id;
16816 
16817       l_gen_bulk_rec     jtf_terr_assign_pub.bulk_trans_rec_type;
16818       l_gen_return_rec   jtf_terr_assign_pub.bulk_winners_rec_type;
16819       l_party_name       VARCHAR2 (360);
16820       l_country_code     VARCHAR2 (60);
16821       l_state_code       VARCHAR2 (120);
16822       l_use_type         VARCHAR2 (30);
16823       l_msg_count        NUMBER;
16824       l_msg_data         VARCHAR2 (200);
16825       l_return_status    VARCHAR2 (3);
16826    BEGIN
16827 -- Fix for bug 4142999
16828       IF NVL (fnd_profile.VALUE ('OKS_SRC_TERR_QUALFIERS'), 'V') = 'V'
16829       THEN
16830          OPEN get_vendor_details;
16831 
16832          FETCH get_vendor_details
16833           INTO l_party_name, l_country_code, l_state_code;
16834 
16835          CLOSE get_vendor_details;
16836       ELSE
16837          OPEN get_party_details;
16838 
16839          FETCH get_party_details
16840           INTO l_party_name, l_country_code, l_state_code;
16841 
16842          CLOSE get_party_details;
16843       END IF;
16844 
16845       l_gen_bulk_rec.trans_object_id.EXTEND;
16846       l_gen_bulk_rec.trans_detail_object_id.EXTEND;
16847       l_gen_bulk_rec.squal_char01.EXTEND;
16848       l_gen_bulk_rec.squal_char04.EXTEND;
16849       l_gen_bulk_rec.squal_char07.EXTEND;
16850       l_gen_bulk_rec.squal_num01.EXTEND;
16851 
16852       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
16853       THEN
16854          fnd_log.STRING (fnd_log.level_statement,
16855                          g_module_current,
16856                             'Values passed to JTF API : '
16857                          || ' Party ID '
16858                          || p_party_id
16859                          || ' Party Name'
16860                          || l_party_name
16861                          || ' State Code'
16862                          || l_state_code
16863                          || ' Country Code'
16864                          || l_country_code
16865                          || ' Territory Qualifier profile '
16866                          || fnd_profile.VALUE ('OKS_SRC_TERR_QUALFIERS')
16867                         );
16868       END IF;
16869 
16870       l_gen_bulk_rec.trans_object_id (1) := 100;
16871       l_gen_bulk_rec.trans_detail_object_id (1) := 1000;
16872       l_gen_bulk_rec.squal_char01 (1) := l_party_name;
16873       l_gen_bulk_rec.squal_char04 (1) := l_state_code;
16874       l_gen_bulk_rec.squal_char07 (1) := l_country_code;
16875       l_gen_bulk_rec.squal_num01 (1) := p_party_id;
16876       l_use_type := 'RESOURCE';
16877 
16878       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
16879       THEN
16880          fnd_log.STRING (fnd_log.level_statement,
16881                          g_module_current
16882                          || '.JTF_TERR_ASSIGN_PUB.get_winners',
16883                          'Before JTF API call '
16884                         );
16885       END IF;
16886 
16887       jtf_terr_assign_pub.get_winners
16888                                    (p_api_version_number      => 1.0,
16889                                     p_init_msg_list           => okc_api.g_false,
16890                                     p_use_type                => l_use_type,
16891                                     p_source_id               => -1500,
16892                                     p_trans_id                => -1501,
16893                                     p_trans_rec               => l_gen_bulk_rec,
16894                                     p_resource_type           => fnd_api.g_miss_char,
16895                                     p_role                    => fnd_api.g_miss_char,
16896                                     p_top_level_terr_id       => fnd_api.g_miss_num,
16897                                     p_num_winners             => fnd_api.g_miss_num,
16898                                     x_return_status           => l_return_status,
16899                                     x_msg_count               => l_msg_count,
16900                                     x_msg_data                => l_msg_data,
16901                                     x_winners_rec             => l_gen_return_rec
16902                                    );
16903       x_winners_rec := l_gen_return_rec;
16904 
16905       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
16906       THEN
16907          fnd_log.STRING (fnd_log.level_statement,
16908                          g_module_current
16909                          || '.JTF_TERR_ASSIGN_PUB.get_winners',
16910                          'After JTF call '
16911                         );
16912       END IF;
16913    END get_jtf_resource;
16914 
16915    PROCEDURE send_notification (
16916       p_order_id      IN   NUMBER,
16917       p_contract_id        NUMBER,
16918       p_type          IN   VARCHAR2
16919    )
16920    IS
16921       CURSOR l_fnd_csr (p_user_id NUMBER)
16922       IS
16923          SELECT user_name
16924            FROM fnd_user
16925           WHERE user_id = p_user_id;
16926 
16927       CURSOR get_order_number
16928       IS
16929          SELECT order_number
16930            FROM oe_order_headers_all
16931           WHERE header_id = p_order_id;
16932 
16933       CURSOR get_contract_number
16934       IS
16935          SELECT contract_number || ' ' || contract_number_modifier
16936            FROM okc_k_headers_all_b
16937           WHERE ID = p_contract_id;
16938 
16939       l_return_status          VARCHAR2 (10);
16940       l_msg_data               VARCHAR2 (2000);
16941       l_msg_count              NUMBER;
16942       l_terr_admin_id          NUMBER;
16943       l_order_number           NUMBER          := 0;
16944       l_contract_number        VARCHAR2 (2000);
16945       l_contract_admin_id      NUMBER;
16946       l_contract_approver_id   NUMBER;
16947       l_subj                   VARCHAR2 (1000);
16948       l_msg                    VARCHAR2 (1000);
16949       l_user_name              VARCHAR2 (100);
16950       l_order_num_prompt       VARCHAR2 (100);
16951    BEGIN
16952       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
16953       THEN
16954          fnd_log.STRING (fnd_log.level_statement,
16955                          g_module_current,
16956                          'Inside  SEND_NOTIFICATION : '
16957                         );
16958       END IF;
16959 
16960       l_subj := fnd_message.get_string ('OKS', 'OKS_TERR_SETUP_ERR_SUB');
16961       l_terr_admin_id := fnd_profile.VALUE ('OKS_TERR_ADMIN_ID');
16962 
16963       IF (l_terr_admin_id IS NULL)
16964       THEN
16965          l_contract_admin_id := fnd_profile.VALUE ('OKS_CONTRACT_ADMIN_ID');
16966       END IF;
16967 
16968       IF l_terr_admin_id IS NOT NULL
16969       THEN
16970          OPEN l_fnd_csr (l_terr_admin_id);
16971 
16972          FETCH l_fnd_csr
16973           INTO l_user_name;
16974 
16975          CLOSE l_fnd_csr;
16976 
16977          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
16978          THEN
16979             fnd_log.STRING (fnd_log.level_statement,
16980                             g_module_current,
16981                             'Territory Admin is not null  - ' || l_user_name
16982                            );
16983          END IF;
16984       ELSIF l_contract_admin_id IS NOT NULL
16985       THEN
16986          OPEN l_fnd_csr (l_contract_admin_id);
16987 
16988          FETCH l_fnd_csr
16989           INTO l_user_name;
16990 
16991          CLOSE l_fnd_csr;
16992 
16993          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
16994          THEN
16995             fnd_log.STRING (fnd_log.level_statement,
16996                             g_module_current,
16997                             'Contract Admin is not null  - ' || l_user_name
16998                            );
16999          END IF;
17000       ELSE
17001          l_user_name := fnd_profile.VALUE ('OKC_K_APPROVER');
17002 
17003          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
17004          THEN
17005             fnd_log.STRING (fnd_log.level_statement,
17006                             g_module_current,
17007                             'Contract Approver is not null  - ' || l_user_name
17008                            );
17009          END IF;
17010       END IF;
17011 
17012       IF p_order_id IS NOT NULL
17013       THEN
17014          OPEN get_order_number;
17015 
17016          FETCH get_order_number
17017           INTO l_order_number;
17018 
17019          CLOSE get_order_number;
17020 
17021          l_order_num_prompt :=
17022                            fnd_message.get_string ('OKS', 'OKS_ORDER_NUMBER');
17023          l_subj :=
17024                l_subj || ' ' || l_order_num_prompt || ' - ' || l_order_number;
17025       ELSE
17026          OPEN get_contract_number;
17027 
17028          FETCH get_contract_number
17029           INTO l_contract_number;
17030 
17031          CLOSE get_contract_number;
17032 
17033          l_subj :=
17034                l_subj
17035             || ' '
17036             || fnd_message.get_string ('OKS', 'OKS_CONTRACT_NUMBER')
17037             || ' - '
17038             || l_contract_number;
17039       END IF;
17040 
17041       IF (p_type = 'NRS')
17042       THEN
17043          l_msg := fnd_message.get_string ('OKS', 'OKS_NO_TERR_RESOURCES');
17044       ELSIF (p_type = 'ISP')
17045       THEN
17046          l_msg := fnd_message.get_string ('OKS', 'OKS_INVALID_SALES_PERSON');
17047       ELSE
17048          l_msg := fnd_message.get_string ('OKS', 'OKS_TERR_SETUP_ERR_SUB');
17049       END IF;
17050 
17051       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
17052       THEN
17053          fnd_log.STRING (fnd_log.level_statement,
17054                          g_module_current,
17055                             'p_recipient is '
17056                          || l_user_name
17057                          || ' Order no is  '
17058                          || l_order_number
17059                          || 'Contract Number Is  '
17060                          || l_contract_number
17061                         );
17062       END IF;
17063 
17064       okc_async_pub.msg_call (p_api_version        => 1,
17065                               x_return_status      => l_return_status,
17066                               x_msg_count          => l_msg_count,
17067                               x_msg_data           => l_msg_data,
17068                               p_recipient          => l_user_name,
17069                               p_msg_body           => l_msg,
17070                               p_msg_subj           => l_subj,
17071                               p_contract_id        => NVL (l_order_number,
17072                                                            p_contract_id
17073                                                           )
17074                              );
17075 
17076       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level
17077       THEN
17078          fnd_log.STRING (fnd_log.level_statement,
17079                          g_module_current,
17080                          'Exiting Send_notification ' || l_return_status
17081                         );
17082       END IF;
17083    END send_notification;
17084 END oks_extwarprgm_pvt;