DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKS_MASS_UPDATE_PVT

Source


1 PACKAGE BODY OKS_MASS_UPDATE_PVT AS
2 /* $Header: OKSRMUPB.pls 120.66.12020000.2 2013/02/05 17:15:47 ansraj ship $ */
3 
4     --+---------------------------------+---+---+---+---+---+----------------------+
5     --| OBJECT                          |SEL|INS|UPD|DEL|CRE|OTHER                 |
6     --+---------------------------------+---+---+---+---+---+----------------------+
7     --| OKC_CLASS_OPERATIONS            | X |   |   |   |   |                      |
8     --+---------------------------------+---+---+---+---+---+----------------------+
9     --| OKC_SUBCLASSES_B                | X |   |   |   |   |                      |
10     --+---------------------------------+---+---+---+---+---+----------------------+
11     --| OKC_OPER_INST_PVT               |   |   |   |   |   |X                     |
12     --+---------------------------------+---+---+---+---+---+----------------------+
13     --| OKS_STREAM_LEVELS_V             | X |   |   |   |   |                      |
14     --+---------------------------------+---+---+---+---+---+----------------------+
15     --| HZ_CUST_ACCOUNTS                | X |   |   |   |   |                      |
16     --+---------------------------------+---+---+---+---+---+----------------------+
17     --| MTL_SYSTEM_ITEMS_TL             | X |   |   |   |   |                      |
18     --+---------------------------------+---+---+---+---+---+----------------------+
19     --| MTL_SYSTEM_ITEMS_B_KFV          | X |   |   |   |   |                      |
20     --+---------------------------------+---+---+---+---+---+----------------------+
21     --| OKC_K_ITEMS                     | X | X |   |   |   |X                     |
22     --+---------------------------------+---+---+---+---+---+----------------------+
23     --| OKS_RENEW_UTIL_PVT              |   |   |   |   |   |X                     |
24     --+---------------------------------+---+---+---+---+---+----------------------+
25     --| OKC_K_VERS_NUMBERS              | X |   | X |   |   |                      |
26     --+---------------------------------+---+---+---+---+---+----------------------+
27     --| FND_ATTACHED_DOCUMENTS          |   |   |   |   |   |X                     |
28     --+---------------------------------+---+---+---+---+---+----------------------+
29     --| okc_k_headers_all_b                 | X |   | X |   |   |                      |
30     --+---------------------------------+---+---+---+---+---+----------------------+
31     --| JTF_NOTES_PUB                   |   |   |   |   |   |X                     |
32     --+---------------------------------+---+---+---+---+---+----------------------+
33     --| JTF_NOTES_VL                    | X |   |   |   |   |                      |
34     --+---------------------------------+---+---+---+---+---+----------------------+
35     --| HZ_PARTIES                      | X |   |   |   |   |                      |
36     --+---------------------------------+---+---+---+---+---+----------------------+
37     --| HZ_CUST_ACCT_RELATE_ALL         | X |   |   |   |   |                      |
38     --+---------------------------------+---+---+---+---+---+----------------------+
39     --| DUAL                            | X |   |   |   |   |                      |
40     --+---------------------------------+---+---+---+---+---+----------------------+
41     --| OKC_K_GROUPS_B                  | X |   |   |   |   |                      |
42     --+---------------------------------+---+---+---+---+---+----------------------+
43     --| HZ_RELATIONSHIPS                | X |   |   |   |   |                      |
44     --+---------------------------------+---+---+---+---+---+----------------------+
45     --| HZ_ORG_CONTACTS                 | X |   |   |   |   |                      |
46     --+---------------------------------+---+---+---+---+---+----------------------+
47     --| HZ_CUST_SITE_USES_ALL           | X |   |   |   |   |                      |
48     --+---------------------------------+---+---+---+---+---+----------------------+
49     --| HZ_CUST_ACCT_SITES_ALL          | X |   |   |   |   |                      |
50     --+---------------------------------+---+---+---+---+---+----------------------+
51     --| OKS_INSTANCE_K_DTLS_TEMP        | X | X |   |   |   |                      |
52     --+---------------------------------+---+---+---+---+---+----------------------+
53     --| OKS_K_SALES_CREDITS_V           | X |   |   |   |   |                      |
54     --+---------------------------------+---+---+---+---+---+----------------------+
55     --| OKC_K_ACCESSES_V                | X |   |   |   |   |                      |
56     --+---------------------------------+---+---+---+---+---+----------------------+
57     --| OKC_CLASSES_B                   | X |   |   |   |   |                      |
58     --+---------------------------------+---+---+---+---+---+----------------------+
59     --| OKC_DATATYPES                   |   |   |   |   |   |X                     |
60     --+---------------------------------+---+---+---+---+---+----------------------+
61     --| OKS_KHR_PVT                     |   |   |   |   |   |X                     |
62     --+---------------------------------+---+---+---+---+---+----------------------+
63     --| OKC_CHR_PVT                     |   |   |   |   |   |X                     |
64     --+---------------------------------+---+---+---+---+---+----------------------+
65     --| OKC_GVE_PVT                     |   |   |   |   |   |X                     |
66     --+---------------------------------+---+---+---+---+---+----------------------+
67     --| OKC_CPL_PVT                     |   |   |   |   |   |X                     |
68     --+---------------------------------+---+---+---+---+---+----------------------+
69     --| OKX_CUST_SITE_USES_V            | X |   |   |   |   |                      |
70     --+---------------------------------+---+---+---+---+---+----------------------+
71     --| OKS_K_HEADERS_B                 | X | X |   |   |   |                      |
72     --+---------------------------------+---+---+---+---+---+----------------------+
73     --| OKC_K_ACCESSES                  |   | X |   |   |   |                      |
74     --+---------------------------------+---+---+---+---+---+----------------------+
75     --| OKS_K_SALES_CREDITS             |   | X |   |   |   |                      |
76     --+---------------------------------+---+---+---+---+---+----------------------+
77     --| CS_CTR_ASSOCIATIONS             | X |   |   |   |   |                      |
78     --+---------------------------------+---+---+---+---+---+----------------------+
79     --| OKS_COVERAGES_PUB               |   |   |   |   |   |X                     |
80     --+---------------------------------+---+---+---+---+---+----------------------+
81     --| OKC_INST_CND_PUB                |   |   |   |   |   |X                     |
82     --+---------------------------------+---+---+---+---+---+----------------------+
83     --| OKC_K_LINES_B                   | X | X | X |   |   |                      |
84     --+---------------------------------+---+---+---+---+---+----------------------+
85     --| OKC_K_LINES_TL                  |   | X |   |   |   |                      |
86     --+---------------------------------+---+---+---+---+---+----------------------+
87     --| OKS_K_LINES_B                   | X | X |   |   |   |                      |
88     --+---------------------------------+---+---+---+---+---+----------------------+
89     --| OKS_K_LINES_TL                  |   | X |   |   |   |                      |
90     --+---------------------------------+---+---+---+---+---+----------------------+
91     --| OKS_BILLING_PROFILES_B          | X |   |   |   |   |                      |
92     --+---------------------------------+---+---+---+---+---+----------------------+
93     --| OKS_BILL_SCH                    |   |   |   |   |   |X                     |
94     --+---------------------------------+---+---+---+---+---+----------------------+
95     --| OKC_K_HEADERS_B_S               | X |   |   |   |   |                      |
96     --+---------------------------------+---+---+---+---+---+----------------------+
97     --| OKC_OPERATION_LINES             | X |   |   |   |   |                      |
98     --+---------------------------------+---+---+---+---+---+----------------------+
99     --| OKC_OPERATION_INSTANCES         | X |   |   |   |   |                      |
100     --+---------------------------------+---+---+---+---+---+----------------------+
101     --| OKC_K_ITEMS_V                   | X |   |   |   |   |                      |
102     --+---------------------------------+---+---+---+---+---+----------------------+
103     --| OKC_K_LINES_V                   | X |   |   |   |   |                      |
104     --+---------------------------------+---+---+---+---+---+----------------------+
105     --| OKC_K_PARTY_ROLES_B             | X |   |   |   |   |                      |
106     --+---------------------------------+---+---+---+---+---+----------------------+
107     --| OKS_INSTANCE_TEMP               | X |   |   |   |   |                      |
108     --+---------------------------------+---+---+---+---+---+----------------------+
109     --| OKC_STATUSES_V                  | X |   |   |   |   |                      |
110     --+---------------------------------+---+---+---+---+---+----------------------+
111     --| OKC_STATUSES_B                  | X |   |   |   |   |                      |
112     --+---------------------------------+---+---+---+---+---+----------------------+
113     --| CS_COUNTERS                     | X |   |   |   |   |                      |
114     --+---------------------------------+---+---+---+---+---+----------------------+
115     --| CS_COUNTER_GROUPS               | X |   |   |   |   |                      |
116     --+---------------------------------+---+---+---+---+---+----------------------+
117     --| CS_INCIDENTS_ALL_B              | X |   |   |   |   |                      |
118     --+---------------------------------+---+---+---+---+---+----------------------+
119     --| OKS_BATCH_RULES                 | X |   |   |   |   |                      |
120     --+---------------------------------+---+---+---+---+---+----------------------+
121     --| CSI_MASS_EDIT_ENTRIES_TL        | X |   |   |   |   |                      |
122     --+---------------------------------+---+---+---+---+---+----------------------+
123     --| OKS_INSTANCE_HISTORY            | X | X |   |   |   |                      |
124     --+---------------------------------+---+---+---+---+---+----------------------+
125     --| OKC_QA_CHECK_PUB                |   |   |   |   |   |X                     |
126     --+---------------------------------+---+---+---+---+---+----------------------+
127     --| OKC_CONTRACT_PUB                |   |   |   |   |   |X                     |
128     --+---------------------------------+---+---+---+---+---+----------------------+
129     --| OKS_WF_K_PROCESS_PVT            |   |   |   |   |   |X                     |
130     --+---------------------------------+---+---+---+---+---+----------------------+
131     --| OKS_IHD_PVT                     |   |   |   |   |   |X                     |
132     --+---------------------------------+---+---+---+---+---+----------------------+
133     --| OKS_INS_PVT                     |   |   |   |   |   |X                     |
134     --+---------------------------------+---+---+---+---+---+----------------------+
135     --| CSI_ITEM_INSTANCES              | X |   |   |   |   |                      |
136     --+---------------------------------+---+---+---+---+---+----------------------+
137     --| OKS_INST_HIST_DETAILS           |   | X |   |   |   |                      |
138     --+---------------------------------+---+---+---+---+---+----------------------+
139 
140    l_hdr_id       NUMBER;
141    l_line_id      NUMBER;
142    l_lineno_new   NUMBER := 0;
143    l_Tlineno_new   NUMBER := 0;
144    l_gl_dummy     NUMBER := 0;
145     TYPE Var2000TabTyp IS TABLE OF Varchar2(2000)
146      INDEX BY BINARY_INTEGER;
147     ------*  Procedure create_transaction_source *-------
148     -- Procedure to create transaction souce in operation
149     -- instance and opeatiopn lines.
150     -- One line per contract will be created in operation
151     -- instance and one line for each new subline will be
152     -- created in operation lines.
153     -----------------------------------------------------
154 
155 
156    PROCEDURE create_transaction_source (
157       p_batch_id                          NUMBER,
158       p_source_line_id                    NUMBER,
159       p_target_line_id                    NUMBER,
160       p_source_chr_id                     NUMBER,
161       p_target_chr_id                     NUMBER,
162       p_transaction                       VARCHAR2,
163       x_return_status            OUT NOCOPY     VARCHAR2,
164       x_msg_count                OUT NOCOPY     NUMBER,
165       x_msg_data                 OUT NOCOPY     VARCHAR2
166    )
167    IS
168       CURSOR cop_csr (
169          p_opn_code                          VARCHAR2
170       )
171       IS
172          SELECT ID
173            FROM okc_class_operations
174           WHERE cls_code = (SELECT cls_code
175                               FROM okc_subclasses_b
176                              WHERE code = 'SERVICE')
177             AND opn_code = p_opn_code;
178 
179 
180       CURSOR check_oper_inst_csr (
181          p_cop_id                          NUMBER,
182          p_chr_id                          NUMBER,
183          p_batch_id                        NUMBER
184       )
185       IS
186          SELECT ID
187            FROM okc_operation_instances
188           WHERE cop_id        = p_cop_id
189             AND target_chr_id = p_chr_id
190             AND batch_id      = p_batch_id
191             AND status_code   = 'PROCESSED';
192 
193          Cursor check_rec_exists(P_Id Number) Is
194             Select 'X'
195             From   Okc_operation_lines ol
196                   ,okc_operation_instances Ins
197             Where  ol.subject_chr_id = P_target_chr_id
198             And    ol.object_chr_id = p_source_chr_id
199             And    ol.subject_cle_id Is Null
200             And    ol.object_cle_id Is Null
201             And    ins.id = p_id;
202 
203       l_cop_id                   NUMBER;
204       l_api_version     CONSTANT NUMBER                          := 1.0;
205       l_init_msg_list   CONSTANT VARCHAR2 (1)                    := 'F';
206       l_return_status            VARCHAR2 (1)                    := 'S';
207       l_oiev_tbl_in              okc_oper_inst_pvt.oiev_tbl_type;
208       l_oiev_tbl_out             okc_oper_inst_pvt.oiev_tbl_type;
209       l_olev_tbl_in              okc_oper_inst_pvt.olev_tbl_type;
210       l_olev_tbl_out             okc_oper_inst_pvt.olev_tbl_type;
211       l_oie_id                   NUMBER;
212       l_oper_instance_id         NUMBER;
213       l_exists                   Varchar2(1);
214    BEGIN
215       x_return_status := l_return_status;
216 
217       -- get class operation id
218       OPEN cop_csr (p_transaction);
219       FETCH cop_csr  INTO l_cop_id;
220       CLOSE cop_csr;
221 
222 
223 
224     OPEN check_oper_inst_csr(l_cop_id, p_target_chr_id,p_batch_id);
225     FETCH check_oper_inst_csr INTO l_oie_id;
226 
227     IF check_oper_inst_csr%FOUND
228     THEN
229          l_return_status           := 'S';
230          l_oper_instance_id        := l_oie_id;
231 
232     ELSE
233         l_oper_instance_id := okc_p_util.raw_to_number (SYS_GUID ());
234         INSERT INTO OKC_OPERATION_INSTANCES(
235         id,
236         cop_id,
237         status_code,
238         object_version_number,
239         created_by,
240         creation_date,
241         last_updated_by,
242         last_update_date,
243         last_update_login,
244         name,
245         target_chr_id,
246 	    request_id,
247 	    program_application_id,
248 	    program_id,
249 	    program_update_date,
250          jtot_object1_code,
251          object1_id1,
252          object1_id2,
253          batch_id
254 
255        )
256       VALUES (
257          l_oper_instance_id,
258         l_cop_id,
259         'PROCESSED',
260         1,
261         fnd_global.user_id,
262         sysdate,
263         fnd_global.user_id,
264         sysdate,
265         fnd_global.user_id,
266         null,
267         p_target_chr_id,
268         decode(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_REQUEST_ID),
269         decode(FND_GLOBAL.PROG_APPL_ID,-1,NULL,FND_GLOBAL.PROG_APPL_ID),
270         decode(FND_GLOBAL.CONC_PROGRAM_ID,-1,NULL,FND_GLOBAL.CONC_PROGRAM_ID),
271         decode(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,SYSDATE),
272         null,
273         null,
274         null,
275         p_batch_id
276        );
277           IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
278              fnd_log.string(FND_LOG.LEVEL_STATEMENT,G_MODULE_CURRENT||'.OKS_IB_UTIL_UB.Create_transaction_source',
279                                       '.Create_Operation_Instance(Return status = '||l_return_status ||')'  );
280          END IF;
281 
282       End If;
283       CLOSE check_oper_inst_csr;
284 
285       INSERT INTO OKC_OPERATION_LINES(
286         id,
287         select_yn,
288         process_flag,
289         active_yn,
290         oie_id,
291 	   parent_ole_id,
292         subject_chr_id,
293         object_chr_id,
294         subject_cle_id,
295         object_cle_id,
296         object_version_number,
297         created_by,
298         creation_date,
299         last_updated_by,
300         last_update_date,
301         last_update_login,
302         request_id,
303         program_application_id,
304         program_id,
305         program_update_date,
306         message_code)
307       VALUES (
308         okc_p_util.raw_to_number (SYS_GUID ()),
309         null,
310         'P',
311         'Y',
312         l_oper_instance_id,
313 	    null,
314         p_target_chr_id,
315         p_source_chr_id,
316         p_target_line_id,
317         p_source_line_id,
318         1,
319         fnd_global.user_id,
320         sysdate,
321         fnd_global.user_id,
322         sysdate,
323         fnd_global.user_id,
324 	   decode(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_REQUEST_ID),
325 	   decode(FND_GLOBAL.PROG_APPL_ID,-1,NULL,FND_GLOBAL.PROG_APPL_ID),
326 	   decode(FND_GLOBAL.CONC_PROGRAM_ID,-1,NULL,FND_GLOBAL.CONC_PROGRAM_ID),
327 	   decode(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,SYSDATE),
328         null);
329 
330 
331           IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
332                  fnd_log.string(FND_LOG.LEVEL_STATEMENT,G_MODULE_CURRENT||'.OKS_IB_UTIL_UB.Create_transaction_source',
333                 'OKC_OPER_INST_PUB.Create_Operation_Line(Return status = '||l_return_status ||')'  );
334           END IF;
335 If p_transaction = 'RENEWAL' Then
336       Open check_rec_exists(l_oper_instance_id);
337       Fetch check_rec_exists into l_exists ;
338       Close check_rec_exists;
339       If l_exists is  Null Then
340         INSERT INTO OKC_OPERATION_LINES(
341         id,
342         select_yn,
343         process_flag,
344         active_yn,
345         oie_id,
346 	   parent_ole_id,
347         subject_chr_id,
348         object_chr_id,
349         subject_cle_id,
350         object_cle_id,
351         object_version_number,
352         created_by,
353         creation_date,
354         last_updated_by,
355         last_update_date,
356         last_update_login,
357         request_id,
358         program_application_id,
359         program_id,
360         program_update_date,
361         message_code)
362       VALUES (
363         okc_p_util.raw_to_number (SYS_GUID ()),
364         null,
365         'P',
366         'Y',
367         l_oper_instance_id,
368 	    null,
369         p_target_chr_id,
370         p_source_chr_id,
371         Null,
372         Null,
373         1,
374         fnd_global.user_id,
375         sysdate,
376         fnd_global.user_id,
377         sysdate,
378         fnd_global.user_id,
379 	   decode(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_REQUEST_ID),
380 	   decode(FND_GLOBAL.PROG_APPL_ID,-1,NULL,FND_GLOBAL.PROG_APPL_ID),
381 	   decode(FND_GLOBAL.CONC_PROGRAM_ID,-1,NULL,FND_GLOBAL.CONC_PROGRAM_ID),
382 	   decode(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,SYSDATE),
383         null);
384 
385 
386           IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
387                  fnd_log.string(FND_LOG.LEVEL_STATEMENT,G_MODULE_CURRENT||'.OKS_IB_UTIL_UB.Create_transaction_source',
388                 'OKC_OPER_INST_PUB.Create_Operation_Line(Return status = '||l_return_status ||')'  );
389           END IF;
390      End If;
391 
392   End If;
393       x_return_status := l_return_status;
394    EXCEPTION
395       WHEN g_exception_halt_validation
396       THEN
397          x_return_status := l_return_status;
398          fnd_file.put_line(fnd_file.log,' Error while creating the transaction sourec : '
399          || SQLCODE||':'|| SQLERRM );
400           IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
401                  fnd_log.string(FND_LOG.LEVEL_STATEMENT,G_MODULE_CURRENT||'.OKS_IB_UTIL_UB.Create_transaction_source',
402                 'Error while creating the transaction sourec :( sqlcode = '||SQLCODE
403                 ||') sqlerrm = ( '|| SQLERRM || ')' );
404           END IF;
405 
406          NULL;
407       WHEN OTHERS
408       THEN
409          x_return_status := okc_api.g_ret_sts_unexp_error;
410          fnd_file.put_line(fnd_file.log,' Error while creating the transaction sourec : '
411          || SQLCODE||':'|| SQLERRM );
412          okc_api.set_message (g_app_name,
413                               g_unexpected_error,
414                               g_sqlcode_token,
415                               SQLCODE,
416                               g_sqlerrm_token,
417                               SQLERRM
418                              );
419    END;
420 
421 
422 
423 
424    Function get_ste_code(p_sts_code Varchar2) return Varchar2
425    Is
426     CUrsor l_ste_csr Is
427     Select ste_code
428     From   Okc_statuses_b
429     Where code = p_sts_code;
430     l_ste_code Varchar2(30);
431     Begin
432           Open l_ste_csr;
433           Fetch l_ste_csr into l_ste_code;
434           Close l_ste_csr;
435           return(l_ste_code);
436     End;
437 
438 
439 Function Negotiated_amount
440         (P_start_date IN Date
441         ,P_end_date IN Date
442         ,P_price_uom IN Varchar2
443         ,P_period_type IN Varchar2
444         ,P_period_start  IN Varchar2
445         ,P_new_start_date  IN Date
446         ,P_amount  IN  Number
447         ,P_Currency  IN  Varchar2)  Return Number Is
448 l_duration_xfer Number;
449 l_duration_total Number;
450 l_amount  Number;
451 l_price_uom Varchar2(30);
452 price_uom_trf  Varchar2(30);
453 
454 Begin
455 
456        If P_price_uom is Null Then
457            l_price_uom := Oks_misc_util_web.duration_unit
458                           (
459                             P_start_Date,
460                             P_end_date);
461 
462        Else
463            l_price_uom := p_price_uom;
464 
465        End If;
466 
467        l_duration_xfer :=  OKS_TIME_MEASURES_PUB.get_quantity
468                                 (trunc(P_new_start_date ) ,
469                                  trunc(P_end_date),
470                                  l_price_uom ,
471                                  P_period_type ,
472                                  P_period_Start );
473 
474 
475 
476       l_duration_total  := OKS_TIME_MEASURES_PUB.get_quantity
477                                 (trunc(P_Start_date) ,
478                                  trunc(P_end_date),
479                                  l_price_uom,
480                                  P_period_type ,
481                                  P_period_Start );
482 
483 
484      l_amount := oks_extwar_util_pvt.round_currency_amt(P_amount * l_duration_xfer/l_duration_total,P_currency);
485 
486      return (nvl(l_amount,0));
487 
488 
489 End;
490 
491 Function get_line_status(p_lse_id Number,P_start_date date, p_end_date Date, P_line_status varchar2,p_batch_status Varchar2) return Varchar2 Is
492 l_sts_code Varchar2(50);
493 begin
494          If p_lse_id in (14,18) Then
495               IF trunc(p_start_date) > trunc(SYSDATE)
496               THEN
497                    l_sts_code := get_status_code('SIGNED');
498 
499               ELSIF  trunc(p_start_date) <= trunc(SYSDATE)  AND p_end_date >= trunc(SYSDATE)
500               THEN
501                   l_sts_code := get_status_code('ACTIVE');
502 
503               END IF;
504 
505          Else
506               If p_line_status = 'ENTERED' Then
507                   l_sts_code := get_status_code('ENTERED');
508               Else
509                   If get_ste_code(p_batch_status) = 'ACTIVE' Then
510                     IF trunc(p_start_date) > trunc(SYSDATE)
511                     THEN
512                          l_sts_code := get_status_code('SIGNED');
513 
514                     ELSIF  trunc(p_start_date) <= trunc(SYSDATE)  AND trunc(p_end_date) >= trunc(SYSDATE)
515                     THEN
516                          l_sts_code := get_status_code('ACTIVE');
517 
518                     END IF;
519                   Else
520                     l_sts_code := p_batch_status;
521                   End if;
522                End If;
523 
524 
525          End If;
526 return(l_sts_code);
527 End;
528 
529 
530    Function get_status_code(p_ste_code Varchar2) return Varchar2
531    Is
532     CUrsor l_sts_csr Is
533     Select code
534     From   Okc_statuses_b
535     Where ste_code = p_ste_code
536     And default_yn = 'Y';
537     l_sts_code Varchar2(30);
538     Begin
539           Open l_sts_csr;
540           Fetch l_sts_csr into l_sts_code;
541           Close l_sts_csr;
542           return(l_sts_code);
543     End;
544 
545 
546    -----------*  Procedure get_sts_code *--------------
547    -- Procedure to get the default sts code and ste code.
548 
549    -----------------------------------------------------
550 
551    PROCEDURE get_sts_code(
552           p_ste_code                          VARCHAR2,
553           p_sts_code                          VARCHAR2,
554           x_ste_code               OUT NOCOPY VARCHAR2,
555           x_sts_code               OUT NOCOPY VARCHAR2
556       ) IS
557           CURSOR l_ste_csr IS
558                SELECT code
559                  FROM okc_statuses_b
560                 WHERE ste_code = p_ste_code
561                   AND default_yn = 'Y';
562 
563           CURSOR l_sts_csr IS
564                SELECT a.code, a.ste_code
565                  FROM okc_statuses_b a, okc_statuses_b b
566                 WHERE b.code = p_sts_code
567                   AND b.ste_code = a.ste_code
568                   AND a.default_yn = 'Y';
569 
570           l_sts_code                    VARCHAR2( 30 );
571      BEGIN
572           IF p_sts_code IS NULL THEN
573                OPEN l_ste_csr;
574                FETCH l_ste_csr INTO x_sts_code;
575                CLOSE l_ste_csr;
576                x_ste_code := p_ste_code;
577           ELSE
578                OPEN l_sts_csr;
579                FETCH l_sts_csr INTO x_sts_code, x_ste_code;
580                CLOSE l_sts_csr;
581           END IF;
582      EXCEPTION
583           WHEN OTHERS THEN
584                OKC_API.SET_MESSAGE(
585                     g_app_name,
586                     g_unexpected_error,
587                     g_sqlcode_token,
588                     SQLCODE,
589                     g_sqlerrm_token,
590                     SQLERRM
591                 );
592    END;
593 
594    --------*  Procedure initialize_okc_hdr_tbl *--------
595    -- Procedure to initialize okc_hdr plsql table before
596    -- assigning values
597    -----------------------------------------------------
598 
599    PROCEDURE initialize_okc_hdr_tbl (
600       x_okc_hdr_tbl              OUT NOCOPY okc_chr_pvt.chrv_tbl_type,
601       p_index                             NUMBER DEFAULT g_num_one
602    )
603    IS
604    BEGIN
605       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
606       THEN
607          fnd_log.STRING (fnd_log.level_event,
608                          g_module_current || 'oks_mass_update.initialize_okc_tbl',
609                          'Begin'
610                         );
611       END IF;
612 
613       x_okc_hdr_tbl (p_index).ID                    := okc_api.g_miss_num;
614       x_okc_hdr_tbl (p_index).object_version_number := okc_api.g_miss_num;
615       x_okc_hdr_tbl (p_index).sfwt_flag             := okc_api.g_miss_char;
616       x_okc_hdr_tbl (p_index).chr_id_response       := okc_api.g_miss_num;
617       x_okc_hdr_tbl (p_index).chr_id_award          := okc_api.g_miss_num;
618       x_okc_hdr_tbl (p_index).chr_id_renewed        := okc_api.g_miss_num;
619       x_okc_hdr_tbl (p_index).inv_organization_id   := okc_api.g_miss_num;
620       x_okc_hdr_tbl (p_index).sts_code              := okc_api.g_miss_char;
621       x_okc_hdr_tbl (p_index).qcl_id                := okc_api.g_miss_num;
622       x_okc_hdr_tbl (p_index).scs_code              := okc_api.g_miss_char;
623       x_okc_hdr_tbl (p_index).contract_number       := okc_api.g_miss_char;
624       x_okc_hdr_tbl (p_index).currency_code         := okc_api.g_miss_char;
625       x_okc_hdr_tbl (p_index).contract_number_modifier := okc_api.g_miss_char;
626       x_okc_hdr_tbl (p_index).archived_yn           := okc_api.g_miss_char;
627       x_okc_hdr_tbl (p_index).deleted_yn            := okc_api.g_miss_char;
628       x_okc_hdr_tbl (p_index).cust_po_number_req_yn := okc_api.g_miss_char;
629       x_okc_hdr_tbl (p_index).pre_pay_req_yn        := okc_api.g_miss_char;
630       x_okc_hdr_tbl (p_index).cust_po_number        := okc_api.g_miss_char;
631       x_okc_hdr_tbl (p_index).short_description     := okc_api.g_miss_char;
632       x_okc_hdr_tbl (p_index).comments              := okc_api.g_miss_char;
633       x_okc_hdr_tbl (p_index).description           := okc_api.g_miss_char;
634       x_okc_hdr_tbl (p_index).dpas_rating           := okc_api.g_miss_char;
635       x_okc_hdr_tbl (p_index).cognomen              := okc_api.g_miss_char;
636       x_okc_hdr_tbl (p_index).template_yn           := okc_api.g_miss_char;
637       x_okc_hdr_tbl (p_index).template_used         := okc_api.g_miss_char;
638       x_okc_hdr_tbl (p_index).date_approved         := okc_api.g_miss_date;
639       x_okc_hdr_tbl (p_index).datetime_cancelled    := okc_api.g_miss_date;
640       x_okc_hdr_tbl (p_index).auto_renew_days       := okc_api.g_miss_num;
641       x_okc_hdr_tbl (p_index).date_issued           := okc_api.g_miss_date;
642       x_okc_hdr_tbl (p_index).datetime_responded    := okc_api.g_miss_date;
643       x_okc_hdr_tbl (p_index).non_response_reason   := okc_api.g_miss_char;
644       x_okc_hdr_tbl (p_index).non_response_explain  := okc_api.g_miss_char;
645       x_okc_hdr_tbl (p_index).rfp_type              := okc_api.g_miss_char;
646       x_okc_hdr_tbl (p_index).chr_type              := okc_api.g_miss_char;
647       x_okc_hdr_tbl (p_index).keep_on_mail_list     := okc_api.g_miss_char;
648       x_okc_hdr_tbl (p_index).set_aside_reason      := okc_api.g_miss_char;
649       x_okc_hdr_tbl (p_index).set_aside_percent     := okc_api.g_miss_num;
650       x_okc_hdr_tbl (p_index).response_copies_req   := okc_api.g_miss_num;
651       x_okc_hdr_tbl (p_index).date_close_projected  := okc_api.g_miss_date;
652       x_okc_hdr_tbl (p_index).datetime_proposed     := okc_api.g_miss_date;
653       x_okc_hdr_tbl (p_index).date_signed           := okc_api.g_miss_date;
654       x_okc_hdr_tbl (p_index).date_terminated       := okc_api.g_miss_date;
655       x_okc_hdr_tbl (p_index).date_renewed          := okc_api.g_miss_date;
656       x_okc_hdr_tbl (p_index).trn_code              := okc_api.g_miss_char;
657       x_okc_hdr_tbl (p_index).start_date            := okc_api.g_miss_date;
658       x_okc_hdr_tbl (p_index).end_date              := okc_api.g_miss_date;
659       x_okc_hdr_tbl (p_index).org_id                := okc_api.g_miss_num;
660       x_okc_hdr_tbl (p_index).buy_or_sell           := okc_api.g_miss_char;
661       x_okc_hdr_tbl (p_index).issue_or_receive      := okc_api.g_miss_char;
662       x_okc_hdr_tbl (p_index).estimated_amount      := okc_api.g_miss_num;
663       x_okc_hdr_tbl (p_index).chr_id_renewed_to     := okc_api.g_miss_num;
664       x_okc_hdr_tbl (p_index).estimated_amount_renewed
665                                                     := okc_api.g_miss_num;
666       x_okc_hdr_tbl (p_index).currency_code_renewed := okc_api.g_miss_char;
667       x_okc_hdr_tbl (p_index).upg_orig_system_ref   := okc_api.g_miss_char;
668       x_okc_hdr_tbl (p_index).upg_orig_system_ref_id
669                                                     := okc_api.g_miss_num;
670       x_okc_hdr_tbl (p_index).application_id        := okc_api.g_miss_num;
671       x_okc_hdr_tbl (p_index).orig_system_source_code
672                                                     := okc_api.g_miss_char;
673       x_okc_hdr_tbl (p_index).orig_system_id1       := okc_api.g_miss_num;
674       x_okc_hdr_tbl (p_index).orig_system_reference1
675                                                     := okc_api.g_miss_char;
676       x_okc_hdr_tbl (p_index).program_id            := okc_api.g_miss_num;
677       x_okc_hdr_tbl (p_index).request_id            := okc_api.g_miss_num;
678       x_okc_hdr_tbl (p_index).price_list_id         := okc_api.g_miss_num;
679       x_okc_hdr_tbl (p_index).pricing_date          := okc_api.g_miss_date;
680       x_okc_hdr_tbl (p_index).sign_by_date          := okc_api.g_miss_date;
681       x_okc_hdr_tbl (p_index).program_update_date   := okc_api.g_miss_date;
682       x_okc_hdr_tbl (p_index).total_line_list_price := okc_api.g_miss_num;
683       x_okc_hdr_tbl (p_index).program_application_id
684                                                     := okc_api.g_miss_num;
685       x_okc_hdr_tbl (p_index).user_estimated_amount := okc_api.g_miss_num;
686       x_okc_hdr_tbl (p_index).governing_contract_yn := okc_api.g_miss_char;
687       x_okc_hdr_tbl (p_index).attribute_category    := okc_api.g_miss_char;
688       x_okc_hdr_tbl (p_index).attribute1            := okc_api.g_miss_char;
689       x_okc_hdr_tbl (p_index).attribute2            := okc_api.g_miss_char;
690       x_okc_hdr_tbl (p_index).attribute3            := okc_api.g_miss_char;
691       x_okc_hdr_tbl (p_index).attribute4            := okc_api.g_miss_char;
692       x_okc_hdr_tbl (p_index).attribute5            := okc_api.g_miss_char;
693       x_okc_hdr_tbl (p_index).attribute6            := okc_api.g_miss_char;
694       x_okc_hdr_tbl (p_index).attribute7            := okc_api.g_miss_char;
695       x_okc_hdr_tbl (p_index).attribute8            := okc_api.g_miss_char;
696       x_okc_hdr_tbl (p_index).attribute9            := okc_api.g_miss_char;
697       x_okc_hdr_tbl (p_index).attribute10           := okc_api.g_miss_char;
698       x_okc_hdr_tbl (p_index).attribute11           := okc_api.g_miss_char;
699       x_okc_hdr_tbl (p_index).attribute12           := okc_api.g_miss_char;
700       x_okc_hdr_tbl (p_index).attribute13           := okc_api.g_miss_char;
701       x_okc_hdr_tbl (p_index).attribute14           := okc_api.g_miss_char;
702       x_okc_hdr_tbl (p_index).attribute15           := okc_api.g_miss_char;
703       x_okc_hdr_tbl (p_index).created_by            := okc_api.g_miss_num;
704       x_okc_hdr_tbl (p_index).creation_date         := okc_api.g_miss_date;
705       x_okc_hdr_tbl (p_index).last_updated_by       := okc_api.g_miss_num;
706       x_okc_hdr_tbl (p_index).last_update_date      := okc_api.g_miss_date;
707       x_okc_hdr_tbl (p_index).last_update_login     := okc_api.g_miss_num;
708       x_okc_hdr_tbl (p_index).old_sts_code          := okc_api.g_miss_char;
709       x_okc_hdr_tbl (p_index).new_sts_code          := okc_api.g_miss_char;
710       x_okc_hdr_tbl (p_index).old_ste_code          := okc_api.g_miss_char;
711       x_okc_hdr_tbl (p_index).new_ste_code          := okc_api.g_miss_char;
712       --new columns to replace rules
713       x_okc_hdr_tbl (p_index).conversion_type       := okc_api.g_miss_char;
714       x_okc_hdr_tbl (p_index).payment_instruction_type := okc_api.g_miss_char;
715 
716       x_okc_hdr_tbl (p_index).conversion_rate       := okc_api.g_miss_num;
717       x_okc_hdr_tbl (p_index).conversion_rate_date  := okc_api.g_miss_date;
718       x_okc_hdr_tbl (p_index).conversion_euro_rate  := okc_api.g_miss_num;
719       x_okc_hdr_tbl (p_index).cust_acct_id          := okc_api.g_miss_num;
720       x_okc_hdr_tbl (p_index).bill_to_site_use_id   := okc_api.g_miss_num;
721       x_okc_hdr_tbl (p_index).inv_rule_id           := okc_api.g_miss_num;
722       x_okc_hdr_tbl (p_index).renewal_type_code     := okc_api.g_miss_char;
723       x_okc_hdr_tbl (p_index).renewal_notify_to     := okc_api.g_miss_num;
724       x_okc_hdr_tbl (p_index).renewal_end_date      := okc_api.g_miss_date;
725       x_okc_hdr_tbl (p_index).ship_to_site_use_id   := okc_api.g_miss_num;
726       x_okc_hdr_tbl (p_index).payment_term_id       := okc_api.g_miss_num;
727    END initialize_okc_hdr_tbl;
728 
729    --------*  Procedure initialize_oks_hdr_tbl *--------
730    -- Procedure to initialize oks_hdr plsql table before
731    -- assigning values
732    -----------------------------------------------------
733 
734    PROCEDURE initialize_oks_hdr_tbl (
735       x_oks_hdr_tbl              OUT NOCOPY oks_khr_pvt.khrv_tbl_type,
736       p_index                             NUMBER DEFAULT g_num_one
737    )
738    IS
739    BEGIN
740       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
741       THEN
742          fnd_log.STRING (fnd_log.level_event,
743                          g_module_current || 'oks_mass_update.initialize_oks_tbl',
744                          'Begin'
745                         );
746       END IF;
747 
748       x_oks_hdr_tbl (p_index).ID                     := okc_api.g_miss_num;
749       x_oks_hdr_tbl (p_index).chr_id                 := okc_api.g_miss_num;
750       x_oks_hdr_tbl (p_index).acct_rule_id           := okc_api.g_miss_num;
751       x_oks_hdr_tbl (p_index).payment_type           := okc_api.g_miss_char;
752       x_oks_hdr_tbl (p_index).cc_no                  := okc_api.g_miss_char;
753       x_oks_hdr_tbl (p_index).cc_expiry_date         := okc_api.g_miss_date;
754       x_oks_hdr_tbl (p_index).cc_bank_acct_id        := okc_api.g_miss_num;
755       x_oks_hdr_tbl (p_index).cc_auth_code           := okc_api.g_miss_char;
756       x_oks_hdr_tbl (p_index).commitment_id          := okc_api.g_miss_num;
757       x_oks_hdr_tbl (p_index).grace_duration         := okc_api.g_miss_num;
758       x_oks_hdr_tbl (p_index).grace_period           := okc_api.g_miss_char;
759       x_oks_hdr_tbl (p_index).est_rev_percent        := okc_api.g_miss_num;
760       x_oks_hdr_tbl (p_index).est_rev_date           := okc_api.g_miss_date;
761       x_oks_hdr_tbl (p_index).tax_amount             := okc_api.g_miss_num;
762       x_oks_hdr_tbl (p_index).tax_status             := okc_api.g_miss_char;
763       x_oks_hdr_tbl (p_index).tax_code               := okc_api.g_miss_num;
764       x_oks_hdr_tbl (p_index).tax_exemption_id       := okc_api.g_miss_num;
765       x_oks_hdr_tbl (p_index).billing_profile_id     := okc_api.g_miss_num;
766       x_oks_hdr_tbl (p_index).renewal_status         := okc_api.g_miss_char;
767       x_oks_hdr_tbl (p_index).electronic_renewal_flag := okc_api.g_miss_char;
768       x_oks_hdr_tbl (p_index).quote_to_contact_id    := okc_api.g_miss_num;
769       x_oks_hdr_tbl (p_index).quote_to_site_id       := okc_api.g_miss_num;
770       x_oks_hdr_tbl (p_index).quote_to_email_id      := okc_api.g_miss_num;
771       x_oks_hdr_tbl (p_index).quote_to_phone_id      := okc_api.g_miss_num;
772       x_oks_hdr_tbl (p_index).quote_to_fax_id        := okc_api.g_miss_num;
773       x_oks_hdr_tbl (p_index).renewal_po_required    := okc_api.g_miss_char;
774       x_oks_hdr_tbl (p_index).renewal_po_number      := okc_api.g_miss_char;
775       x_oks_hdr_tbl (p_index).renewal_price_list     := okc_api.g_miss_num;
776       x_oks_hdr_tbl (p_index).renewal_pricing_type   := okc_api.g_miss_char;
777       x_oks_hdr_tbl (p_index).renewal_markup_percent := okc_api.g_miss_num;
778       x_oks_hdr_tbl (p_index).renewal_grace_duration := okc_api.g_miss_num;
779       x_oks_hdr_tbl (p_index).renewal_grace_period   := okc_api.g_miss_char;
780       x_oks_hdr_tbl (p_index).renewal_est_rev_percent := okc_api.g_miss_num;
781       x_oks_hdr_tbl (p_index).renewal_est_rev_duration
782                                                      := okc_api.g_miss_num;
783       x_oks_hdr_tbl (p_index).renewal_est_rev_period := okc_api.g_miss_char;
784       x_oks_hdr_tbl (p_index).renewal_price_list_used := okc_api.g_miss_num;
785       x_oks_hdr_tbl (p_index).renewal_type_used      := okc_api.g_miss_char;
786       x_oks_hdr_tbl (p_index).renewal_notification_to := okc_api.g_miss_num;
787       x_oks_hdr_tbl (p_index).renewal_po_used        := okc_api.g_miss_char;
788       x_oks_hdr_tbl (p_index).renewal_pricing_type_used
789                                                      := okc_api.g_miss_char;
790       x_oks_hdr_tbl (p_index).renewal_markup_percent_used
791                                                      := okc_api.g_miss_num;
792       x_oks_hdr_tbl (p_index).rev_est_percent_used   := okc_api.g_miss_num;
793       x_oks_hdr_tbl (p_index).rev_est_duration_used  := okc_api.g_miss_num;
794       x_oks_hdr_tbl (p_index).rev_est_period_used    := okc_api.g_miss_char;
795       x_oks_hdr_tbl (p_index).billing_profile_used   := okc_api.g_miss_num;
796       x_oks_hdr_tbl (p_index).ern_flag_used_yn       := okc_api.g_miss_char;
797       x_oks_hdr_tbl (p_index).evn_threshold_amt      := okc_api.g_miss_num;
798       x_oks_hdr_tbl (p_index).evn_threshold_cur      := okc_api.g_miss_char;
799       x_oks_hdr_tbl (p_index).ern_threshold_amt      := okc_api.g_miss_num;
800       x_oks_hdr_tbl (p_index).ern_threshold_cur      := okc_api.g_miss_char;
801       x_oks_hdr_tbl (p_index).renewal_grace_duration_used
802                                                      := okc_api.g_miss_num;
803       x_oks_hdr_tbl (p_index).renewal_grace_period_used
804                                                      := okc_api.g_miss_char;
805       x_oks_hdr_tbl (p_index).inv_trx_type           := okc_api.g_miss_char;
806       x_oks_hdr_tbl (p_index).inv_print_profile      := okc_api.g_miss_char;
807       x_oks_hdr_tbl (p_index).ar_interface_yn        := okc_api.g_miss_char;
808       x_oks_hdr_tbl (p_index).hold_billing           := okc_api.g_miss_char;
809       x_oks_hdr_tbl (p_index).summary_trx_yn         := okc_api.g_miss_char;
810       x_oks_hdr_tbl (p_index).service_po_number      := okc_api.g_miss_char;
811       x_oks_hdr_tbl (p_index).service_po_required    := okc_api.g_miss_char;
812       x_oks_hdr_tbl (p_index).object_version_number  := okc_api.g_miss_num;
813       x_oks_hdr_tbl (p_index).security_group_id      := okc_api.g_miss_num;
814       x_oks_hdr_tbl (p_index).request_id             := okc_api.g_miss_num;
815       x_oks_hdr_tbl (p_index).created_by             := okc_api.g_miss_num;
816       x_oks_hdr_tbl (p_index).creation_date          := okc_api.g_miss_date;
817       x_oks_hdr_tbl (p_index).last_updated_by        := okc_api.g_miss_num;
818       x_oks_hdr_tbl (p_index).last_update_date       := okc_api.g_miss_date;
819       x_oks_hdr_tbl (p_index).last_update_login      := okc_api.g_miss_num;
820      /*Email Quote Added for ER  13869562 spingali*/
821       x_oks_hdr_tbl (p_index).cc_email_address      := okc_api.g_miss_char;
822      /*Email Quote Added for ER 13869562 spingali*/
823 
824    END initialize_oks_hdr_tbl;
825 
826    ----------*  Function check_strmlvl_exists *---------
827    -- function to check if billing schedule exists for a
828    -- service line.
829    -----------------------------------------------------
830 
831    FUNCTION check_strmlvl_exists (
832       p_cle_id                   IN       NUMBER
833    )
834       RETURN BOOLEAN
835    IS
836       CURSOR l_billsch_csr (
837          p_cle_id                   IN       NUMBER
838       )
839       IS
840          SELECT ID
841            FROM oks_stream_levels_v
842           WHERE cle_id = p_cle_id;
843 
844       l_strmlvl_id   NUMBER;
845    BEGIN
846       IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
847              fnd_log.string(FND_LOG.LEVEL_STATEMENT,G_MODULE_CURRENT||'oks_mass_update.check_strmlvl_exists',
848                                       'Begin' );
849       END IF;
850 
851       OPEN l_billsch_csr (p_cle_id);
852       FETCH l_billsch_csr INTO l_strmlvl_id;
853 
854       IF (l_billsch_csr%FOUND)
855       THEN
856          RETURN (FALSE);
857       ELSE
858          RETURN (TRUE);
859       END IF;
860 
861       CLOSE l_billsch_csr;
862    EXCEPTION
863       WHEN NO_DATA_FOUND
864       THEN
865          RETURN (TRUE);
866    END check_strmlvl_exists;
867 
868    -------------*  Procedure get_party_id *-------------
869    -- Procedure to get party_id for a given account
870    -----------------------------------------------------
871 
872    PROCEDURE get_party_id (
873       p_cust_id                  IN       NUMBER,
874       x_party_id                 OUT NOCOPY NUMBER
875    )
876    IS
877       CURSOR l_party_csr
878       IS
879          SELECT party_id
880            FROM hz_cust_accounts
881           WHERE cust_account_id = p_cust_id;
882    BEGIN
883       OPEN l_party_csr;
884 
885       FETCH l_party_csr
886        INTO x_party_id;
887 
888       CLOSE l_party_csr;
889    END get_party_id;
890 
891    -------------*  Procedure get_invoice_text *-------------
892    -- Procedure to get format the invoice text
893    -----------------------------------------------------
894 
895    FUNCTION get_invoice_text (
896       p_product_item             IN       NUMBER,
897       p_start_date               IN       DATE,
898       p_end_date                 IN       DATE
899    )
900       RETURN VARCHAR2
901    IS
902       CURSOR l_inv_csr (
903          p_product_item                      NUMBER
904       )
905       IS
906          SELECT t.description NAME,
907                 b.concatenated_segments description
908            FROM mtl_system_items_b_kfv b,
909                 mtl_system_items_tl t
910           WHERE b.inventory_item_id = t.inventory_item_id
911             AND b.organization_id = t.organization_id
912             AND t.LANGUAGE = USERENV ('LANG')
913             AND b.inventory_item_id = p_product_item
914             AND ROWNUM < 2;
915 
916       l_object_code              okc_k_items.jtot_object1_code%TYPE;
917       l_object1_id1              okc_k_items.object1_id1%TYPE;
918       l_object1_id2              okc_k_items.object1_id2%TYPE;
919       l_no_of_items              okc_k_items.number_of_items%TYPE;
920       l_name                     VARCHAR2 (2000);
921       l_desc                     VARCHAR2 (2000);
922       l_formatted_invoice_text   VARCHAR2 (2000);
923    BEGIN
924       OPEN l_inv_csr (p_product_item);
925 
926       FETCH l_inv_csr
927        INTO l_name,
928             l_desc;
929 
930       CLOSE l_inv_csr;
931 
932       IF fnd_profile.VALUE ('OKS_ITEM_DISPLAY_PREFERENCE') = 'DISPLAY_DESC'
933       THEN
934          l_desc := l_name;
935       ELSE
936          l_desc := l_desc;
937       END IF;
938 
939       l_formatted_invoice_text := SUBSTR (   l_desc
940                                           || ':'
941                                           || p_start_date
942                                           || ':'
943                                           || p_end_date,
944                                           1,
945                                           450
946                                          );
947       IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
948              fnd_log.string(FND_LOG.LEVEL_STATEMENT,G_MODULE_CURRENT||'oks_mass_update.get_invoice_text',
949                                       'l_formatted_invoice_text = ('|| l_formatted_invoice_text || ')' );
950       END IF;
951 
952       RETURN (l_formatted_invoice_text);
953    END get_invoice_text;
954 
955    ------------*  Procedure get_setup_attr *------------
956    -- Procedure to get the GCD set up attributes required
957    -- for transfer contracts creation.
958    -- qcl_id, prd_id, contract_group,third party rle_code
959    -----------------------------------------------------
960 
961    PROCEDURE get_setup_attr (
962       p_party_id                 IN       NUMBER,
963       p_org_id                   IN       NUMBER,
964       setup_attr                 OUT NOCOPY     setup_rec,
965       x_return_status            OUT NOCOPY     VARCHAR2,
966       x_msg_count                OUT NOCOPY     NUMBER,
967       x_msg_data                 OUT NOCOPY     VARCHAR2
968    )
969    IS
970       l_rnrl_rec_out   oks_renew_util_pvt.rnrl_rec_type;
971    BEGIN
972       Oks_Renew_Util_Pub.get_renew_rules (
973            p_api_version        => 1.0,
974            p_init_msg_list      => 'T',
975            x_return_status      => x_return_status,
976            x_msg_count          => x_msg_count,
977            x_msg_data           => x_msg_data,
978            p_chr_id             => NULL,
979            p_party_id           => p_party_id,
980            p_org_id             => p_org_id,
981            p_date               => SYSDATE,
982            p_rnrl_rec           => NULL,
983            x_rnrl_rec           => l_rnrl_rec_out
984           );
985 
986        IF (Fnd_Log.LEVEL_EVENT >= Fnd_Log.G_CURRENT_RUNTIME_LEVEL) THEN
987                 Fnd_Log.string(Fnd_Log.LEVEL_EVENT,G_MODULE_CURRENT||'.get_setup_attr',
988                 'get_renew_rules: status = ( '|| x_return_status|| ' )' );
989        END IF;
990        If Not x_return_status = 'S' Then
991 
992          Raise G_EXCEPTION_HALT_VALIDATION;
993       End If;
994       setup_attr.cgp_new_id := l_rnrl_rec_out.cgp_new_id;
995       setup_attr.pdf_id     := l_rnrl_rec_out.pdf_id;
996       setup_attr.qcl_id     := l_rnrl_rec_out.qcl_id;
997       setup_attr.rle_code   := l_rnrl_rec_out.rle_code;
998 
999       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1000       THEN
1001          fnd_log.STRING (fnd_log.level_event,
1002                          g_module_current || '.get_setup_attr',
1003                             'get_renew_rules: values = ( group ='
1004                          || setup_attr.cgp_new_id
1005                          || 'pdf id ='
1006                          || setup_attr.pdf_id
1007                          || 'qcl_id ='
1008                          || setup_attr.qcl_id
1009                          || 'rle_code = '
1010                          || setup_attr.rle_code
1011                          || ' )'
1012                         );
1013       END IF;
1014 
1015 
1016      EXCEPTION
1017           WHEN G_EXCEPTION_HALT_VALIDATION THEN
1018 
1019                NULL;
1020    END get_setup_attr;
1021 
1022 
1023 
1024 
1025    -----------*  Function get_major_version *-----------
1026    -- Procedure to get the contracts major version to
1027    -- copy the notes
1028    -----------------------------------------------------
1029 
1030    FUNCTION get_major_version (
1031       p_chr_id                            NUMBER
1032    )
1033       RETURN VARCHAR2
1034    IS
1035       CURSOR l_cvm_csr
1036       IS
1037          SELECT TO_CHAR (major_version)
1038            FROM okc_k_vers_numbers
1039           WHERE chr_id = p_chr_id;
1040 
1041       x_from_version   fnd_attached_documents.pk2_value%TYPE   := NULL;
1042    BEGIN
1043       OPEN l_cvm_csr;
1044 
1045       FETCH l_cvm_csr
1046        INTO x_from_version;
1047 
1048       CLOSE l_cvm_csr;
1049 
1050       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1051       THEN
1052          fnd_log.STRING (fnd_log.level_event,
1053                          g_module_current || '.get_major_version',
1054                          'version = ( ' || x_from_version || ' )'
1055                         );
1056       END IF;
1057 
1058       RETURN x_from_version;
1059    EXCEPTION
1060       WHEN OTHERS
1061       THEN
1062          RETURN okc_api.g_ret_sts_unexp_error;
1063          okc_api.set_message (g_app_name,
1064                               g_unexpected_error,
1065                               g_sqlcode_token,
1066                               SQLCODE,
1067                               g_sqlerrm_token,
1068                               SQLERRM
1069                              );
1070    END get_major_version;
1071 
1072    --------*  Procedure set_attch_session_vars *--------
1073    -- Procedure to set the attached session variables
1074    -- to copy the notes
1075    -----------------------------------------------------
1076 
1077    PROCEDURE set_attach_session_vars (
1078       p_chr_id                            NUMBER
1079    )
1080    IS
1081       l_app_id   NUMBER;
1082 
1083       CURSOR l_chr_csr
1084       IS
1085          SELECT application_id
1086            FROM okc_k_headers_all_b
1087           WHERE ID = p_chr_id;
1088    BEGIN
1089       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1090       THEN
1091          fnd_log.STRING (fnd_log.level_event,
1092                          g_module_current || 'oks_mass_update.set_attach_ses_vars',
1093                          'Begin'
1094                         );
1095       END IF;
1096 
1097       IF (    p_chr_id IS NOT NULL
1098           AND fnd_attachment_util_pkg.function_name IS NULL
1099          )
1100       THEN
1101          OPEN l_chr_csr;
1102 
1103          FETCH l_chr_csr
1104           INTO l_app_id;
1105 
1106          CLOSE l_chr_csr;
1107 
1108          IF (l_app_id = 515)
1109          THEN
1110             fnd_attachment_util_pkg.function_name := 'OKSAUDET';
1111             fnd_attachment_util_pkg.function_type := 'O';
1112          ELSE
1113             fnd_attachment_util_pkg.function_name := 'OKCAUDET';
1114             fnd_attachment_util_pkg.function_type := 'O';
1115          END IF;
1116       END IF;
1117    END set_attach_session_vars;
1118 
1119    -----------*  Procedure create_csi_note *------------
1120    -- Procedure to copy the csi note to each contract.
1121    -----------------------------------------------------
1122 
1123    PROCEDURE create_csi_note (
1124       p_source_object_id         IN       NUMBER,
1125       p_note                     IN       VARCHAR2,
1126       x_return_status            OUT NOCOPY VARCHAR2,
1127       x_msg_count                OUT NOCOPY NUMBER,
1128       x_msg_data                 OUT NOCOPY VARCHAR2
1129    )
1130    IS
1131       l_jtf_note_id             NUMBER;
1132       l_jtf_note_contexts_tab   jtf_notes_pub.jtf_note_contexts_tbl_type;
1133 
1134    BEGIN
1135       x_return_status := okc_api.g_ret_sts_success;
1136       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1137       THEN
1138          fnd_log.STRING (fnd_log.level_event,
1139                          g_module_current || '.create_csi_note',
1140                          'note = ( ' || p_note || ' )'
1141                         );
1142       END IF;
1143 
1144       jtf_notes_pub.create_note
1145                           (p_jtf_note_id                => NULL,
1146                            p_api_version                => 1.0,
1147                            p_init_msg_list              => 'F',
1148                            p_commit                     => 'F',
1149                            p_validation_level           => 0,
1150                            x_return_status              => x_return_status,
1151                            x_msg_count                  => x_msg_count,
1152                            x_msg_data                   => x_msg_data,
1153                            p_source_object_code         => 'OKS_HDR_NOTE',
1154                            p_source_object_id           => p_source_object_id,
1155                            p_notes                      => p_note,
1156                            p_notes_detail               => NULL,
1157                            p_note_status                => 'I',
1158                            p_note_type                  => NULL,  --- What should be the note type
1159                            p_entered_by                 => fnd_global.user_id,
1160                            p_entered_date               => SYSDATE,
1161                            x_jtf_note_id                => l_jtf_note_id,
1162                            p_creation_date              => SYSDATE,
1163                            p_created_by                 => fnd_global.user_id,
1164                            p_last_update_date           => SYSDATE,
1165                            p_last_updated_by            => fnd_global.user_id,
1166                            p_last_update_login          => fnd_global.login_id,
1167                            p_attribute1                 => NULL,
1168                            p_attribute2                 => NULL,
1169                            p_attribute3                 => NULL,
1170                            p_attribute4                 => NULL,
1171                            p_attribute5                 => NULL,
1172                            p_attribute6                 => NULL,
1173                            p_attribute7                 => NULL,
1174                            p_attribute8                 => NULL,
1175                            p_attribute9                 => NULL,
1176                            p_attribute10                => NULL,
1177                            p_attribute11                => NULL,
1178                            p_attribute12                => NULL,
1179                            p_attribute13                => NULL,
1180                            p_attribute14                => NULL,
1181                            p_attribute15                => NULL,
1182                            p_context                    => NULL,
1183                            p_jtf_note_contexts_tab      => l_jtf_note_contexts_tab
1184                           );
1185       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1186       THEN
1187          fnd_log.STRING (fnd_log.level_event,
1188                          g_module_current || '.create_csi_note',
1189                          'status = ( ' || x_return_status || ' )'
1190                         );
1191       END IF;
1192 
1193       IF NOT x_return_status = okc_api.g_ret_sts_success
1194       THEN
1195          okc_api.set_message (g_app_name,
1196                               'OKS_CSI_NOTES_ERROR');
1197 
1198          RAISE g_exception_halt_validation;
1199       END IF;
1200 
1201 
1202    EXCEPTION
1203       WHEN g_exception_halt_validation
1204       THEN
1205 
1206          fnd_file.put_line(fnd_file.log,' Error while creating the csi note: '
1207          || SQLCODE||':'|| SQLERRM );
1208          NULL;
1209       WHEN OTHERS
1210       THEN
1211          x_return_status := 'U';
1212          fnd_file.put_line(fnd_file.log,' Error while creating the csi note: '
1213          || SQLCODE||':'|| SQLERRM );
1214          okc_api.set_message (g_app_name,
1215                               g_unexpected_error,
1216                               g_sqlcode_token,
1217                               SQLCODE,
1218                               g_sqlerrm_token,
1219                               SQLERRM
1220                              );
1221    END create_csi_note;
1222 
1223    -----------*  Procedure get_notes_details *----------
1224    -- Procedure to get the notes details which need to be
1225    -- copied from impacted contract to new contract.
1226    -----------------------------------------------------
1227 
1228    PROCEDURE get_notes_details (
1229       p_source_object_id         IN       NUMBER,
1230       x_notes_tbl                OUT NOCOPY jtf_note_tbl_type,
1231       x_return_status            OUT NOCOPY VARCHAR2
1232    )
1233    IS
1234       CURSOR get_notes_details_cur (
1235          l_id                       IN       NUMBER
1236       )
1237       IS
1238          SELECT b.jtf_note_id jtf_note_id,
1239                 b.source_object_code source_object_code,
1240                 b.note_status note_status,
1241                 b.note_type note_type,
1242                 b.notes notes,
1243                 b.notes_detail notes_detail
1244            FROM jtf_notes_vl b
1245           WHERE b.source_object_id = l_id;
1246 
1247       i   NUMBER := 0;
1248    BEGIN
1249       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1250       THEN
1251          fnd_log.STRING (fnd_log.level_event,
1252                          g_module_current || 'oks_mass_update.get_notes_details',
1253                          'Begin'
1254                         );
1255       END IF;
1256 
1257       i := 0;
1258       l_notes_tbl.DELETE;
1259 
1260       FOR get_notes_details_rec IN get_notes_details_cur (p_source_object_id)
1261       LOOP
1262          l_notes_tbl (i).source_object_code :=
1263                                      get_notes_details_rec.source_object_code;
1264          l_notes_tbl (i).notes := get_notes_details_rec.notes;
1265          jtf_notes_pub.writelobtodata (get_notes_details_rec.jtf_note_id,
1266                                        l_notes_tbl (i).notes_detail
1267                                       );
1268          l_notes_tbl (i).note_status := get_notes_details_rec.note_status;
1269          l_notes_tbl (i).note_type := get_notes_details_rec.note_type;
1270          i := i + 1;
1271       END LOOP;
1272 
1273       x_return_status := 'S';
1274    EXCEPTION
1275       WHEN OTHERS
1276       THEN
1277          x_return_status := 'U';
1278          fnd_file.put_line(fnd_file.log,' Error while getting the notes details: '
1279          || SQLCODE||':'|| SQLERRM );
1280          okc_api.set_message (g_app_name,
1281                               g_unexpected_error,
1282                               g_sqlcode_token,
1283                               SQLCODE,
1284                               g_sqlerrm_token,
1285                               SQLERRM
1286                              );
1287    END get_notes_details;
1288 
1289    -------*  Function check_acct_not_related *----------
1290    -- Function to check if bill to contact account is
1291    -- related to the transfer party accounts and its
1292    -- related accounts for the contracts org id.
1293    -----------------------------------------------------
1294 
1295    FUNCTION check_acct_not_related (
1296        p_party_id                 IN       NUMBER,
1297        p_acct_id                  IN       NUMBER,
1298        p_org_id                   IN       NUMBER
1299     )
1300        RETURN BOOLEAN
1301     IS
1302        l_dummy_var   VARCHAR2 (1);
1303 
1304        CURSOR check_acct_csr
1305        IS
1306           SELECT 'x'
1307             FROM DUAL
1308            WHERE p_acct_id IN (
1309                     SELECT ca1.cust_account_id id1
1310                       FROM hz_cust_accounts ca1,
1311                            hz_parties party
1312                      WHERE ca1.party_id = p_party_id
1313                        AND ca1.party_id = party.party_id
1314                        AND ca1.status = 'A'
1315                     UNION
1316                     SELECT ca2.cust_account_id id1
1317                       FROM hz_cust_accounts ca2,
1318                            hz_parties party1
1319                      WHERE ca2.party_id = party1.party_id
1320                        AND ca2.cust_account_id IN (
1321                               SELECT a.related_cust_account_id
1322                                 FROM hz_cust_acct_relate_all a,
1323                                      hz_cust_accounts b
1324                                WHERE b.cust_account_id = a.cust_account_id
1325                                  AND b.party_id = p_party_id
1326                                  AND b.status = 'A'
1327                                  AND a.status = 'A'
1328                                  AND a.org_id = p_org_id)
1329                        AND ca2.status = 'A');
1330    BEGIN
1331        OPEN check_acct_csr;
1332        FETCH check_acct_csr  INTO l_dummy_var;
1333        IF check_acct_csr%FOUND
1334        THEN
1335           RETURN (FALSE);
1336           IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
1337           THEN
1338            fnd_log.STRING (fnd_log.level_event,
1339                          g_module_current || 'oks_mass_update.create_csi_note',
1340                          'Account = '|| p_acct_id || 'is related to '|| p_party_id );
1341           END IF;
1342 
1343        ELSE
1344           RETURN (TRUE);
1345        END IF;
1346        CLOSE check_acct_csr;
1347 
1348    EXCEPTION
1349       WHEN OTHERS
1350       THEN
1351 
1352           fnd_file.put_line(fnd_file.log,' Error while checking the related accounts : '
1353          || SQLCODE||':'|| SQLERRM );
1354          okc_api.set_message (g_app_name,
1355                               g_unexpected_error,
1356                               g_sqlcode_token,
1357                               SQLCODE,
1358                               g_sqlerrm_token,
1359                               SQLERRM
1360                              );
1361 
1362    END check_acct_not_related;
1363 
1364    ------------*  Procedure Site_address *--------------
1365    -- Procedure to get the primary address.
1366    -----------------------------------------------------
1367 
1368       FUNCTION site_address (
1369          p_customer_id                       NUMBER,
1370          p_party_id                          NUMBER,
1371          p_code                              VARCHAR2,
1372          p_org_id                            NUMBER
1373       )
1374          RETURN NUMBER
1375       IS
1376          CURSOR l_address_csr
1377          IS
1378              SELECT CS.SITE_USE_ID ID1
1379             FROM HZ_CUST_SITE_USES_all CS
1380                 ,HZ_PARTY_SITES PS
1381                 ,HZ_CUST_ACCT_SITES_ALL CA
1382             WHERE PS.PARTY_SITE_ID = CA.PARTY_SITE_ID
1383             AND CA.CUST_ACCT_SITE_ID = CS.CUST_ACCT_SITE_ID
1384             And Ps.party_id = p_party_id
1385             And Ca.cust_account_id = p_customer_id
1386             And Cs.site_use_code = p_code
1387              AND Ps.identifying_address_flag = 'Y'
1388              AND cs.status = 'A'
1389             AND cs.org_id = p_org_id
1390             ;
1391 
1392          l_site_id   NUMBER;
1393       BEGIN
1394          OPEN l_address_csr;
1395 
1396          FETCH l_address_csr
1397           INTO l_site_id;
1398 
1399          IF l_address_csr%NOTFOUND
1400          THEN
1401             CLOSE l_address_csr;
1402 
1403             RETURN (NULL);
1404          END IF;
1405 
1406          CLOSE l_address_csr;
1407 
1408          RETURN (l_site_id);
1409       END;
1410 
1411    -------*  Procedure validate_contract_number *-------
1412    -- Procedure to validate the contract number
1413    -----------------------------------------------------
1414 
1415    PROCEDURE validate_contract_number (
1416       p_contract_number_modifier IN       VARCHAR2,
1417       p_contract_number          IN       VARCHAR2,
1418       x_return_status            OUT NOCOPY VARCHAR2
1419    )
1420    IS
1421       l_dummy_var   VARCHAR2 (1);
1422 
1423       CURSOR l_chr_csr2
1424       IS
1425          SELECT 'x'
1426            FROM okc_k_headers_all_b
1427           WHERE contract_number = p_contract_number
1428             AND contract_number_modifier = p_contract_number_modifier;
1429 
1430       l_found       BOOLEAN      := FALSE;
1431    BEGIN
1432       x_return_status := okc_api.g_ret_sts_success;
1433 
1434       IF (    p_contract_number_modifier IS NOT NULL
1435           AND p_contract_number IS NOT NULL
1436          )
1437       THEN
1438          OPEN l_chr_csr2;
1439 
1440          FETCH l_chr_csr2
1441           INTO l_dummy_var;
1442 
1443          l_found := l_chr_csr2%FOUND;
1444 
1445          CLOSE l_chr_csr2;
1446       END IF;
1447 
1448       IF (l_found)
1449       THEN
1450          x_return_status := okc_api.g_ret_sts_error;
1451          okc_api.set_message (g_app_name,
1452                               'OKS_CONTRACT_EXISTS',
1453                               'CONTRACT_NUMBER',
1454                               p_contract_number,
1455                               'CONTRACT_NUMBER_MODIFIER',
1456                               p_contract_number_modifier
1457                              );
1458       END IF;
1459    END validate_contract_number;
1460 
1461    -------*  Procedure validate_contract_group *--------
1462    -- Procedure to validate the contract group
1463    -----------------------------------------------------
1464 
1465    PROCEDURE validate_contract_group (
1466       p_group_id                 IN       NUMBER,
1467       x_return_status            OUT NOCOPY VARCHAR2
1468    )
1469    IS
1470       l_dummy_var   VARCHAR2 (1) := '1';
1471 
1472       CURSOR l_grpid_csr
1473       IS
1474          SELECT 'x'
1475            FROM okc_k_groups_b
1476           WHERE     ID = p_group_id
1477                 AND public_yn = 'Y'
1478              OR user_id = fnd_global.user_id;
1479    BEGIN
1480       x_return_status := okc_api.g_ret_sts_success;
1481 
1482       IF (   p_group_id <> okc_api.g_miss_num
1483           OR p_group_id IS NOT NULL)
1484       THEN
1485          OPEN l_grpid_csr;
1486 
1487          FETCH l_grpid_csr
1488           INTO l_dummy_var;
1489 
1490          IF l_grpid_csr%NOTFOUND
1491          THEN
1492             x_return_status := okc_api.g_ret_sts_error;
1493             okc_api.set_message (g_app_name,
1494                                  'OKS_INV_GROUP',
1495                                  'GROUP_ID',
1496                                  p_group_id
1497                                 );
1498 
1499             CLOSE l_grpid_csr;
1500          END IF;
1501 
1502          IF l_grpid_csr%ISOPEN
1503          THEN
1504             CLOSE l_grpid_csr;
1505          END IF;
1506       END IF;
1507    END validate_contract_group;
1508 
1509    -----------*  Procedure validate_party_id *----------
1510    -- Procedure to validate the transfer party id
1511    -----------------------------------------------------
1512 
1513    PROCEDURE validate_party_id (
1514       p_party_id                 IN       NUMBER,
1515       x_return_status            OUT NOCOPY VARCHAR2
1516    )
1517    IS
1518       l_dummy_var   VARCHAR2 (3);
1519 
1520       CURSOR l_party_csr
1521       IS
1522          SELECT 'x'
1523            FROM hz_parties party
1524           WHERE EXISTS (SELECT 'x'
1525                           FROM hz_cust_accounts acct
1526                          WHERE party.party_id = acct.party_id
1527                            AND acct.status = 'A')
1528             AND party.party_id = p_party_id;
1529    BEGIN
1530       x_return_status := okc_api.g_ret_sts_success;
1531 
1532       IF (   p_party_id = okc_api.g_miss_num
1533           OR p_party_id IS NULL)
1534       THEN
1535          x_return_status := okc_api.g_ret_sts_error;
1536          okc_api.set_message (g_app_name, 'OKS_REQ_PARTY');
1537       ELSE
1538          OPEN l_party_csr;
1539 
1540          FETCH l_party_csr
1541           INTO l_dummy_var;
1542 
1543          IF l_party_csr%NOTFOUND
1544          THEN
1545             x_return_status := okc_api.g_ret_sts_error;
1546             okc_api.set_message (g_app_name,
1547                                  'OKS_INV_PARTY',
1548                                  'PARTY_ID',
1549                                  p_party_id
1550                                 );
1551 
1552             CLOSE l_party_csr;
1553          END IF;
1554 
1555          IF l_party_csr%ISOPEN
1556          THEN
1557             CLOSE l_party_csr;
1558          END IF;
1559       END IF;
1560    END validate_party_id;
1561 
1562    -------*  Procedure validate_billing_contact *-------
1563    -- Procedure to validate the billing contact
1564    -----------------------------------------------------
1565 
1566    PROCEDURE validate_billing_contact (
1567       p_contact_id               IN       NUMBER,
1568       p_party_id                 IN       NUMBER,
1569       p_trxn_date                IN       DATE,
1570       x_return_status            OUT NOCOPY VARCHAR2
1571    )
1572    IS
1573       l_dummy_var   VARCHAR2 (1);
1574 
1575       CURSOR l_cust_ctc_csr
1576       IS
1577          SELECT 'x'
1578            FROM hz_relationships r,
1579                 hz_parties p3,
1580                 hz_parties p2,
1581                 hz_org_contacts oc
1582           WHERE p2.party_id = r.subject_id
1583             AND r.relationship_code IN ('CONTACT_OF', 'EMPLOYEE_OF')
1584             AND r.content_source_type = 'USER_ENTERED'
1585             AND p3.party_id = r.party_id
1586             AND oc.party_relationship_id = r.relationship_id
1587             AND r.object_id = p_party_id
1588             AND trunc(p_trxn_date) BETWEEN NVL (r.start_date, SYSDATE)
1589                                 AND NVL (r.end_date, SYSDATE)
1590             AND r.status = 'A'
1591             AND r.party_id = p_contact_id;
1592    BEGIN
1593       x_return_status := okc_api.g_ret_sts_success;
1594 
1595       OPEN l_cust_ctc_csr;
1596       FETCH l_cust_ctc_csr INTO l_dummy_var;
1597 
1598       IF l_cust_ctc_csr%NOTFOUND
1599       THEN
1600          x_return_status := okc_api.g_ret_sts_error;
1601          okc_api.set_message (g_app_name,
1602                               'OKS_INV_CONTACT',
1603                               'CONTACT_ID',
1604                               p_contact_id,
1605                               'PARTY_ID',
1606                               p_party_id
1607                              );
1608 
1609          CLOSE l_cust_ctc_csr;
1610       END IF;
1611 
1612       IF l_cust_ctc_csr%ISOPEN
1613       THEN
1614          CLOSE l_cust_ctc_csr;
1615       END IF;
1616    END validate_billing_contact;
1617 
1618 
1619 
1620    ---------*  Procedure validate_site_use_id *---------
1621    -- Procedure to validate the bill to and ship to site
1622    -- use ids
1623    -----------------------------------------------------
1624 
1625    FUNCTION validate_site_use_id (
1626       p_site_use_id              IN       NUMBER,
1627       p_site_use_code            IN       VARCHAR2,
1628       p_cust_acct_id             IN       NUMBER,
1629       p_org_id                   IN       NUMBER
1630    ) return VARCHAR2
1631    IS
1632       l_dummy_var   VARCHAR2 (3) := 'N';
1633 
1634       CURSOR l_site_csr
1635       IS
1636          SELECT 'Y'
1637            FROM hz_cust_site_uses_all a,
1638                 hz_cust_acct_sites_all b
1639           WHERE a.site_use_id = p_site_use_id
1640             AND a.site_use_code = p_site_use_code
1641             AND a.cust_acct_site_id = b.cust_acct_site_id
1642             AND a.status = 'A'
1643             AND b.status = 'A'
1644             AND a.org_id = p_org_id
1645             AND b.cust_account_id = p_cust_acct_id;
1646 
1647    BEGIN
1648 
1649 
1650       OPEN l_site_csr;
1651       FETCH l_site_csr INTO l_dummy_var;
1652       CLOSE l_site_csr;
1653 
1654       return(l_dummy_var);
1655 
1656    END validate_site_use_id;
1657 
1658    ---------*  Procedure validate_account_id *----------
1659    -- Procedure to validate the account id
1660    -----------------------------------------------------
1661 
1662   FUNCTION validate_account_id (
1663       p_account_id  NUMBER,
1664       p_party_id    Number,
1665       p_org_id      NUMBER
1666       ) Return Number
1667    IS
1668       l_dummy_var   VARCHAR2 (3);
1669 Cursor Check_Acct_Csr Is
1670 SELECT  'Y'
1671 From    HZ_CUST_ACCOUNTS CA1
1672       , HZ_PARTIES party
1673 WHERE   CA1.party_id = P_party_id
1674 And     CA1. cust_account_id = p_account_id
1675 And     CA1.party_id = party.party_id
1676 And     CA1.status = 'A'
1677 
1678 UNION
1679 
1680 SELECT  'Y'
1681 FROM    HZ_CUST_ACCOUNTS CA2
1682       , HZ_CUST_ACCT_RELATE_ALL A
1683       , HZ_CUST_ACCOUNTS B
1684 WHERE   CA2.cust_account_id = A.RELATED_CUST_ACCOUNT_ID
1685 And     B.CUST_ACCOUNT_ID = A.CUST_ACCOUNT_ID
1686 And     Ca2.cust_account_id = p_account_id
1687 And     B.party_id = p_party_id and B.status = 'A'
1688 And     A.status = 'A'
1689 And     A.org_id = p_org_id
1690 And     CA2.status = 'A';
1691 
1692 BEGIN
1693 
1694 
1695       IF p_account_id IS NOT NULL THEN
1696          OPEN Check_Acct_Csr;
1697          FETCH Check_Acct_Csr INTO l_dummy_var;
1698          CLOSE Check_Acct_Csr;
1699 
1700          If l_dummy_var = 'Y' then
1701 
1702               return(p_account_id);
1703          Else
1704               return(null);
1705          End if;
1706       Else
1707               return(null);
1708       END IF;
1709 
1710    END validate_account_id;
1711 
1712 
1713 
1714    Function Get_address
1715    (P_address_id  Number,
1716     P_account_id  Number,
1717     p_party_id  Number,
1718     P_Site_use  Varchar2,
1719     P_org_id  Number
1720     )  Return Number Is
1721     l_address_valid  Varchar2(1) := 'N';
1722     l_address_id Number;
1723     L_valid_account  Number;
1724     Begin
1725 
1726         If P_account_id Is Not null Then
1727           L_valid_account := validate_account_id(p_account_id,p_party_id,p_org_id);
1728 
1729           If l_valid_account Is not null and P_address_Id Is not null Then
1730                l_address_valid := validate_site_use_id
1731                                (
1732                                 p_site_use_id   => P_address_id,
1733                                 p_site_use_code => P_Site_use,
1734                                 p_cust_acct_id  => p_account_id,
1735                                 p_org_id        => p_org_id
1736                                 );
1737           End If;
1738 
1739           If l_address_valid <> 'Y' or P_address_Id Is Null Then
1740 
1741                l_address_id :=  site_address(p_account_id,
1742                                              p_party_id,
1743                                              P_Site_use,
1744                                              p_org_id
1745                                               );
1746 
1747 
1748          Else
1749                l_address_id := P_address_id;
1750 
1751           End If;
1752 
1753                return(l_address_id);
1754 
1755         Else
1756            Return(Null);
1757         End If;
1758 
1759 
1760 
1761 
1762     End;
1763 
1764     Function get_modifier(Contract_id  Number) return varchar2 Is
1765     Cursor l_renewal_csr Is
1766           SELECT object_chr_id
1767           FROM okc_operation_instances op
1768                , okc_class_operations cls
1769                , okc_subclasses_b sl
1770                , okc_operation_lines ol
1771           WHERE ol.subject_chr_id = contract_id
1772           And   ol.subject_cle_id is null
1773           And   op.id = ol.oie_id
1774           AND   op.cop_id = cls.id
1775           And   cls.cls_code = sl.cls_code
1776           And   sl.code = 'SERVICE'
1777           And   cls.opn_code in ('RENEWAL','REN_CON');
1778 
1779     Cursor check_renis_xfd(p_contract_id Number) Is
1780           Select 'x'
1781           From   Oks_instance_k_dtls_temp
1782           Where  contract_id = p_contract_id
1783           And    new_contract_id is not null;
1784 
1785           l_renewal_id Number;
1786           l_trf        Varchar2(1);
1787 
1788     Begin
1789 
1790           Open l_renewal_csr;
1791           Fetch l_renewal_csr into l_renewal_id;
1792           Close l_renewal_csr;
1793 
1794           If l_renewal_id is not null Then
1795                 Open check_renis_xfd(l_renewal_id);
1796                 Fetch check_renis_xfd into l_trf;
1797                 Close check_renis_xfd;
1798 
1799 
1800                If l_trf = 'x' Then
1801                    return(fnd_profile.value('OKC_CONTRACT_IDENTIFIER'));
1802                Else
1803                    return(null);
1804 
1805                End If;
1806           Else
1807                    return(null);
1808 
1809           End If;
1810 
1811 
1812     End;
1813 
1814 
1815 
1816    -------*  Procedure create_contract_header *---------
1817    -- Procedure to create the contract header
1818    -- which will create records in okc and oks header tables
1819    -- also will copy the sales credits from impacted
1820    -- contarct to new contracts.
1821    ------------------------------------------------------
1822 
1823    PROCEDURE create_contract_header (
1824       p_api_version              IN       NUMBER,
1825       p_batch_rules              IN       batch_rules_rec_type,
1826       p_transfer_date            IN       DATE,
1827       x_return_status            OUT NOCOPY VARCHAR2,
1828       x_msg_count                OUT NOCOPY NUMBER,
1829       x_msg_Data                 OUT NOCOPY VARCHAR2
1830 
1831    )
1832    IS
1833       CURSOR get_hdr_details_csr
1834       IS
1835          SELECT DISTINCT (temp.new_contract_id) contract_id,
1836                          temp.contract_id,
1837                          kh.scs_code hdr_scs,
1838                          st.ste_code hdr_sts,
1839                          kh.authoring_org_id hdr_authorg,
1840                          kh.inv_organization_id hdr_invorg,
1841                          kh.price_list_id hdr_pl,
1842                          kh.currency_code hdr_curr,
1843                          kh.payment_term_id hdr_payment,
1844                          kh.conversion_type hdr_conv_type,
1845                          kh.conversion_rate hdr_conv_rate,
1846                          kh.conversion_rate_date hdr_conv_date,
1847                          kh.conversion_euro_rate hdr_euro_rate,
1848                          ks.hold_billing hdr_hold_bill,
1849                          ks.summary_trx_yn hdr_sum_trx,
1850                          ks.payment_type hdr_payment_type,
1851                          ks.inv_trx_type hdr_inv_trx,
1852                          ks.period_start hdr_period_start,
1853                          ks.period_type  hdr_period_type,
1854                          gov.isa_agreement_id agreement_id,
1855                          (SELECT MIN (temp1.new_start_date)
1856                             FROM oks_instance_k_dtls_temp temp1
1857                            WHERE temp1.contract_id = temp.contract_id) hdr_sdate,
1858                          (SELECT MAX (temp1.new_end_date)
1859                             FROM oks_instance_k_dtls_temp temp1
1860                            WHERE temp1.contract_id = temp.contract_id) hdr_edate,
1861                          kh.contract_number contract_number,
1862                          kh.contract_number_modifier,
1863                          get_modifier(temp.contract_id),
1864                          (SELECT okc_p_util.raw_to_number (SYS_GUID ())
1865                           FROM okc_k_headers_all_b  where id = contract_id ) oks_id,
1866                           ks.price_uom
1867 
1868                     FROM okc_k_headers_all_b kh,
1869                          oks_k_headers_b ks,
1870                          oks_instance_k_dtls_temp temp,
1871                          okc_statuses_b st,
1872                          okc_governances gov
1873                    WHERE kh.ID = temp.contract_id
1874                      AND temp.new_contract_id is not null
1875                      AND st.code = kh.sts_code
1876                      AND ks.chr_id(+) = kh.ID
1877                      AND gov.chr_id(+) = kh.ID
1878                      AND gov.dnz_chr_id(+) = kh.ID;
1879 
1880       CURSOR get_hdr_salescredits_csr
1881       IS
1882          SELECT DISTINCT (temp.new_contract_id),
1883                          sc.ctc_id,
1884                          sc.sales_credit_type_id1,
1885                          sc.PERCENT,
1886                          sc.sales_group_id
1887                     FROM oks_k_sales_credits_v sc,
1888                          oks_instance_k_dtls_temp temp
1889                    WHERE sc.chr_id = temp.contract_id
1890                      AND sc.cle_id IS NULL
1891                      AND temp.new_contract_id IS NOT NULL;
1892 
1893       CURSOR get_hdr_access_csr
1894       IS
1895          SELECT DISTINCT (temp.new_contract_id),
1896                          ac.GROUP_ID,
1897                          ac.resource_id,
1898                          ac.access_level
1899                     FROM okc_k_accesses_v ac,
1900                          oks_instance_k_dtls_temp temp
1901                    WHERE chr_id = temp.contract_id
1902                      AND temp.new_contract_id IS NOT NULL;-- cgopinee bugfix for bug11075156;
1903 
1904       CURSOR l_app_csr (
1905          p_scs_code                          VARCHAR2
1906       )
1907       IS
1908          SELECT application_id
1909            FROM okc_classes_b cls,
1910                 okc_subclasses_b scs
1911           WHERE cls.code = scs.cls_code
1912             AND scs.code = p_scs_code;
1913 
1914      --Territory changes
1915      CURSOR Salesrep_details(p_resource_id number, p_org_id Number) IS
1916            SELECT Salesrep_id
1917            FROM   jtf_rs_salesreps Sales
1918            WHERE  sales.resource_id = P_resource_id
1919            And    sales.org_id = p_org_id;
1920 
1921      --Check for vendor object_code
1922      CURSOR object_code_csr( p_code VARCHAR2 ) IS
1923                SELECT 'x'
1924                  FROM okc_contact_sources_v
1925                 WHERE cro_code = p_code
1926                   AND buy_or_sell = 'S'
1927                   AND rle_code = 'VENDOR'
1928                   AND jtot_object_code = 'OKX_SALEPERS';
1929      Cursor l_ste_csr(p_sts_code varchar2) Is
1930             Select ste_code
1931             From   okc_statuses_b
1932             WHere  code = p_sts_code;
1933 
1934      Cursor l_warranty_csr(p_hdr_Id Number) Is
1935             Select lse_id
1936             From   Okc_k_lines_b kl
1937             Where  chr_id = p_hdr_id
1938             And    lse_id in (1,19,14);
1939 
1940 
1941 
1942 
1943       hdr_id                         okc_datatypes.numbertabtyp;
1944       old_contract_id                okc_datatypes.numbertabtyp;
1945 
1946       hdr_inv_org_id                 okc_datatypes.numbertabtyp;
1947       hdr_sts_code                   okc_datatypes.var30tabtyp;
1948       hdr_qcl_id                     okc_datatypes.numbertabtyp;
1949       hdr_scs_code                   okc_datatypes.var30tabtyp;
1950       hdr_contract_number            okc_datatypes.var120tabtyp;
1951       hdr_currency_code              okc_datatypes.var15tabtyp;
1952       hdr_contract_number_modifier   okc_datatypes.var120tabtyp;
1953       hdr_short_description          okc_datatypes.var600tabtyp;
1954       hdr_start_date                 okc_datatypes.datetabtyp;
1955       hdr_end_date                   okc_datatypes.datetabtyp;
1956       hdr_date_renewed               okc_datatypes.datetabtyp;
1957       hdr_authoring_org_id           okc_datatypes.numbertabtyp;
1958       hdr_price_list_id              okc_datatypes.numbertabtyp;
1959       hdr_conversion_type            okc_datatypes.var30tabtyp;
1960       hdr_conversion_rate            okc_datatypes.numbertabtyp;
1961       hdr_conversion_rate_date       okc_datatypes.datetabtyp;
1962       hdr_conversion_euro_rate       okc_datatypes.numbertabtyp;
1963       hdr_cust_acct_id               okc_datatypes.number15tabtyp;
1964       hdr_bill_to_site_use_id        okc_datatypes.number15tabtyp;
1965       hdr_inv_rule_id                okc_datatypes.number15tabtyp;
1966       hdr_renewal_type_code          okc_datatypes.var30tabtyp;
1967       hdr_ship_to_site_use_id        okc_datatypes.number15tabtyp;
1968       hdr_payment_term_id            okc_datatypes.number15tabtyp;
1969       hdr_hold_bill                  okc_datatypes.var3tabtyp;
1970       hdr_sum_trx                    okc_datatypes.var3tabtyp;
1971       hdr_payment_type               okc_datatypes.var3tabtyp;
1972       hdr_inv_trx                    okc_datatypes.var3tabtyp;
1973       hdr_agreement_id               okc_datatypes.numbertabtyp;
1974       hdr_identifier                 okc_datatypes.var120tabtyp;
1975       hdr_oks_id                     okc_datatypes.numbertabtyp;
1976       hdr_period_type                okc_datatypes.var10tabtyp;
1977       hdr_period_start               okc_datatypes.var30tabtyp;
1978       ar_interface_yn                okc_datatypes.var30tabtyp;
1979       renewal_status                 okc_datatypes.var30tabtyp;
1980       Accting_rule                   okc_datatypes.numbertabtyp;
1981       Billing_profile                okc_datatypes.numbertabtyp;
1982       price_uom                      okc_datatypes.var30tabtyp;
1983 -- Sales credits
1984       ctc_id                         okc_datatypes.numbertabtyp;
1985       sales_credit_type_id1          okc_datatypes.var40tabtyp;
1986       PERCENT                        okc_datatypes.numbertabtyp;
1987       sales_group_id                 okc_datatypes.numbertabtyp;
1988 -- Access
1989       resource_id                    okc_datatypes.numbertabtyp;
1990       groupid                        okc_datatypes.numbertabtyp;
1991       access_level                   okc_datatypes.var3tabtyp;
1992       setup_attr                     setup_rec;
1993       l_return_status                VARCHAR2 (1)                 := 'S';
1994       l_msg_count                    NUMBER;
1995       l_msg_data                     VARCHAR2 (2000);
1996       j                              NUMBER                       := 1;
1997       k                              NUMBER                       := 1;
1998       l_third_party_id               NUMBER;
1999 -- plsql tables
2000       l_khrv_tbl_out                 oks_khr_pvt.khrv_tbl_type;
2001       l_cpsv_tbl_in                  okc_cps_pvt.cpsv_tbl_type;
2002       l_chrv_tbl_in                  okc_chr_pvt.chrv_tbl_type;
2003       l_khrv_tbl_in                  oks_khr_pvt.khrv_tbl_type;
2004       l_gvev_tbl_in                  okc_gve_pvt.gvev_tbl_type;
2005       l_cgcv_tbl_in                  okc_cgc_pvt.cgcv_tbl_type;
2006       l_cpl_tbl_in                   okc_cpl_pvt.cplv_tbl_type;
2007       l_ctcv_tbl_in                  okc_ctc_pvt.ctcv_tbl_type;
2008 -- Local variables
2009       l_ren_identifier               VARCHAR2(120);
2010       l_sts_code                     VARCHAR2 (30);
2011       l_ste_code                     VARCHAR2 (30);
2012       l_time                         NUMBER;
2013       l_valid_billto                 VARCHAR2(1);
2014       l_valid_shipto                 VARCHAR2(1);
2015       l_lse_id                       NUMBER;
2016 
2017       l_gen_return_Rec    JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type;
2018       l_salesrep_id  Number;
2019       l_salesgroup_id  Number;
2020       l_temp  Varchar2(30);
2021 
2022 -- Main
2023    BEGIN
2024 
2025       l_return_status := okc_api.g_ret_sts_success;
2026       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2027       THEN
2028          fnd_log.STRING (fnd_log.level_event,
2029                          g_module_current || 'oks_mass_update.creat_contract_header',
2030                          'Begin'
2031                         );
2032       END IF;
2033 
2034       l_ren_identifier := fnd_profile.value('OKC_CONTRACT_IDENTIFIER');
2035       OPEN get_hdr_details_csr;
2036 
2037       FETCH get_hdr_details_csr
2038       BULK COLLECT INTO hdr_id,
2039              old_contract_id,
2040              hdr_scs_code,
2041              hdr_sts_code,
2042              hdr_authoring_org_id,
2043              hdr_inv_org_id,
2044              hdr_price_list_id,
2045              hdr_currency_code,
2046              hdr_payment_term_id,
2047              hdr_conversion_type,
2048              hdr_conversion_rate,
2049              hdr_conversion_rate_date,
2050              hdr_conversion_euro_rate,
2051              hdr_hold_bill,
2052              hdr_sum_trx,
2053              hdr_payment_type,
2054              hdr_inv_trx,
2055              hdr_period_start,
2056              hdr_period_type,
2057              hdr_agreement_id,
2058              hdr_start_date,
2059              hdr_end_date,
2060              hdr_contract_number,
2061              hdr_contract_number_modifier,
2062              hdr_identifier,
2063              hdr_oks_id,
2064              price_uom;
2065 
2066       CLOSE get_hdr_details_csr;
2067 
2068       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2069       THEN
2070          fnd_log.STRING (fnd_log.level_event,
2071                          g_module_current || 'oks_mass_update.create_contract_header',
2072                          'Contracts count = (' || hdr_id.COUNT ||')');
2073       END IF;
2074 
2075       l_chrv_tbl_in.DELETE;
2076       l_khrv_tbl_in.DELETE;
2077 
2078       If hdr_id.count >0
2079       THEN
2080          initialize_okc_hdr_tbl (x_okc_hdr_tbl => l_chrv_tbl_in);
2081          initialize_oks_hdr_tbl (x_oks_hdr_tbl => l_khrv_tbl_in);
2082       END IF;
2083       l_time := 0;
2084       FOR i IN 1 .. hdr_id.COUNT
2085       LOOP
2086       l_valid_shipto := Null;
2087       l_valid_billto := Null;
2088           IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2089           THEN
2090              fnd_log.STRING (fnd_log.level_event,
2091                              g_module_current || 'oks_mass_update.create_contract_header',
2092                              'Process Contract id = (' ||i|| '--->'|| hdr_id(i)
2093                              ||'). Set org context( authoring_org_id ='|| hdr_authoring_org_id(i)
2094                              ||', org id = '||hdr_inv_org_id (i)|| ')' );
2095           END IF;
2096          get_setup_attr (p_party_id           => p_batch_rules.new_party_id,
2097                          p_org_id             => hdr_authoring_org_id (i),
2098                          setup_attr           => setup_attr,
2099                          x_return_status      => l_return_status,
2100                          x_msg_count          => x_msg_count,
2101                          x_msg_data           => x_msg_data
2102                         );
2103 
2104 
2105          IF NOT l_return_status = okc_api.g_ret_sts_success THEN
2106 
2107                     Raise G_EXCEPTION_HALT_VALIDATION;
2108          End if;
2109 
2110          OPEN l_app_csr (hdr_scs_code (i));
2111          FETCH l_app_csr INTO l_chrv_tbl_in (i).application_id;
2112          CLOSE l_app_csr;
2113 
2114          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2115          THEN
2116          fnd_log.STRING (fnd_log.level_event,
2117                          g_module_current || 'oks_mass_update.create_contract_header',
2118                          'Application org id = '||l_chrv_tbl_in (i).application_id );
2119          END IF;
2120 
2121          l_chrv_tbl_in (i).ID                       := hdr_id (i);
2122          l_chrv_tbl_in (i).document_id              := hdr_id (i);
2123          l_chrv_tbl_in (i).object_version_number    := 1;
2124          l_chrv_tbl_in (i).sfwt_flag                := 'N';
2125          l_chrv_tbl_in (i).chr_id_renewed           := NULL;
2126          l_chrv_tbl_in (i).chr_id_response          := NULL;
2127          l_chrv_tbl_in (i).chr_id_award             := NULL;
2128          l_chrv_tbl_in (i).inv_organization_id      := hdr_inv_org_id (i);
2129          l_chrv_tbl_in (i).start_date               := hdr_start_date (i);
2130          l_chrv_tbl_in (i).end_date                 := hdr_end_date (i);
2131          --l_chrv_tbl_in (i).Date_renewed             := nvl(hdr_date_renewed(i),p_transfer_date);
2132          l_chrv_tbl_in (i).org_id                   := hdr_authoring_org_id (i);
2133          l_chrv_tbl_in (i).authoring_org_id         := hdr_authoring_org_id (i);
2134          l_chrv_tbl_in (i).scs_code                 := hdr_scs_code (i);
2135          l_chrv_tbl_in (i).price_list_id            := hdr_price_list_id (i);
2136          l_chrv_tbl_in (i).currency_code            := hdr_currency_code (i);
2137          l_chrv_tbl_in (i).conversion_type          := hdr_conversion_type (i);
2138          l_chrv_tbl_in (i).conversion_rate          := hdr_conversion_rate (i);
2139          l_chrv_tbl_in (i).conversion_rate_date     := hdr_conversion_rate_date (i);
2140          l_chrv_tbl_in (i).conversion_euro_rate     := hdr_conversion_euro_rate (i);
2141          l_chrv_tbl_in (i).payment_term_id          := hdr_payment_term_id (i);
2142 
2143          --Fix for Bug 5140969
2144          Open l_warranty_csr(old_contract_id(i));
2145          Fetch l_warranty_csr into l_lse_id;
2146          Close l_warranty_csr;
2147          If l_lse_id = 14 Then
2148              l_chrv_tbl_in (i).contract_number := hdr_contract_number (i);
2149              -- Contract number modifier
2150              IF p_batch_rules.contract_modifier IS NOT NULL
2151              THEN
2152                   l_chrv_tbl_in (i).contract_number_modifier :=
2153                                           p_batch_rules.contract_modifier  ||':'||
2154                                           (sysdate+l_time)||' '||to_char(sysdate + l_time,'HH24:MI:SS');
2155              ELSE
2156 
2157                   l_chrv_tbl_in (i).contract_number_modifier :=
2158                                           fnd_profile.value('OKS_TRANSFER_CONTRACT_IDENTIFIER')
2159                                           ||':'||(sysdate+l_time)||' '|| to_char(sysdate + l_time,'HH24:MI:SS');
2160 
2161              END IF;
2162              ar_interface_yn(i) := 'N';
2163              renewal_status(i) := 'COMPLETE';
2164              If trunc(hdr_start_date (i)) > trunc(sysdate) Then
2165                            l_chrv_tbl_in (i).sts_code    := get_status_code('SIGNED');
2166              Else
2167                            l_chrv_tbl_in (i).sts_code    := get_status_code('ACTIVE');
2168              End If;
2169              l_chrv_tbl_in (i).date_signed := SYSDATE;
2170              l_chrv_tbl_in (i).date_approved := SYSDATE;
2171              Accting_rule(i) := NULL;
2172              l_chrv_tbl_in (i).inv_rule_id  := NULL;
2173              l_chrv_tbl_in (i).qcl_id  := Null;
2174              Billing_profile(i)        := Null;
2175 
2176 
2177 
2178 
2179          Else
2180 
2181               fnd_file.put_line(fnd_file.log,'retain k no'||p_batch_rules.retain_contract_number_flag ||p_batch_rules.contract_modifier );
2182 
2183               IF NVL (p_batch_rules.retain_contract_number_flag, 'N') = 'N'
2184               THEN
2185                       okc_contract_pvt.generate_contract_number
2186                        (p_scs_code             => hdr_scs_code (i),
2187                         p_modifier             => p_batch_rules.contract_modifier,
2188                         x_return_status        => l_return_status,
2189                         x_contract_number      => l_chrv_tbl_in (i).contract_number
2190                        );
2191 
2192                       IF NOT l_return_status = okc_api.g_ret_sts_success THEN
2193                             Raise G_EXCEPTION_HALT_VALIDATION;
2194                       End if;
2195                      IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2196                      THEN
2197                      fnd_log.STRING (fnd_log.level_event,
2198                              g_module_current || 'oks_mass_update.create_contract_header',
2199                              'After generate contract number, status = ('
2200                              || l_return_status|| '). Contract Number = ('
2201                              ||l_chrv_tbl_in (i).contract_number || ')');
2202                      END IF;
2203 
2204                      -- Contract number modifier
2205                      IF p_batch_rules.contract_modifier IS NOT NULL
2206                      THEN
2207                         l_chrv_tbl_in (i).contract_number_modifier :=
2208                                           Nvl(p_batch_rules.contract_modifier ,fnd_profile.value('OKS_TRANSFER_CONTRACT_IDENTIFIER'))
2209                                           ||':'|| sysdate ||' '||to_char(sysdate,'HH24:MI:SS');
2210                      Else
2211                        l_chrv_tbl_in (i).contract_number_modifier := Null;
2212                      End If;
2213              ELSE
2214                     l_chrv_tbl_in (i).contract_number := hdr_contract_number (i);
2215 
2216                     -- Contract number modifier
2217                     IF p_batch_rules.contract_modifier IS NOT NULL
2218                     THEN
2219                        l_chrv_tbl_in (i).contract_number_modifier :=
2220                                           Nvl(hdr_identifier (i),p_batch_rules.contract_modifier ) ||':'||
2221                                           (sysdate+l_time)||' '||to_char(sysdate + l_time,'HH24:MI:SS');
2222                     ELSE
2223 
2224                        l_chrv_tbl_in (i).contract_number_modifier :=
2225                                           nvl(hdr_identifier (i),fnd_profile.value('OKS_TRANSFER_CONTRACT_IDENTIFIER'))
2226                                           ||':'||(sysdate+l_time)||' '|| to_char(sysdate + l_time,'HH24:MI:SS');
2227 
2228 
2229                     END IF;
2230             END IF;
2231                  IF p_batch_rules.bill_lines_flag = 'R'
2232                  THEN
2233                     IF hdr_identifier (i) = l_ren_identifier
2234                     THEN
2235                         ar_interface_yn(i) := 'Y';
2236                     ELSE
2237                         IF hdr_sts_code(i) = 'ENTERED' Then
2238                              ar_interface_yn(i) := 'Y';
2239                         Else
2240                              ar_interface_yn(i) := 'R';
2241                         End If;
2242                     END IF;
2243                  ELSE
2244                         ar_interface_yn(i) := p_batch_rules.bill_lines_flag;
2245                  END IF;
2246                 If get_ste_code(p_batch_rules.contract_status) = 'ENTERED' or hdr_sts_code(i) = 'ENTERED' Then
2247                     renewal_status(i) := 'DRAFT';
2248                 Else
2249                     renewal_status(i) := 'COMPLETE';
2250                 End If;
2251                 Accting_rule(i)                      := p_batch_rules.accounting_rule;
2252                 Billing_profile(i)                   := p_batch_rules.billing_profile_id;
2253                 l_chrv_tbl_in (i).inv_rule_id             :=
2254                                          NVL (p_batch_rules.invoicing_rule,
2255                                               -2);
2256                 l_chrv_tbl_in (i).qcl_id                   := setup_attr.qcl_id;
2257 
2258 
2259                IF hdr_sts_code(i) = 'ENTERED'
2260                THEN
2261                   l_chrv_tbl_in (i).sts_code                 := get_status_code('ENTERED');
2262                   l_chrv_tbl_in (i).date_signed := '';
2263                   l_chrv_tbl_in (i).date_approved := '';
2264                ELSE
2265 
2266                   IF get_ste_code(p_batch_rules.contract_status) = 'ACTIVE'
2267                   THEN
2268                       If trunc(hdr_start_date (i)) > trunc(sysdate) Then
2269                            l_chrv_tbl_in (i).sts_code    := get_status_code('SIGNED');
2270                       Else
2271                            l_chrv_tbl_in (i).sts_code    := p_batch_rules.contract_status;
2272                       End If;
2273                       l_chrv_tbl_in (i).date_signed := SYSDATE;
2274                       l_chrv_tbl_in (i).date_approved := SYSDATE;
2275                   ELSE
2276                       l_chrv_tbl_in (i).sts_code                 := p_batch_rules.contract_status;
2277                       l_chrv_tbl_in (i).date_signed := '';
2278                       l_chrv_tbl_in (i).date_approved := '';
2279                   END IF;
2280                END IF;
2281            End If;
2282 
2283 
2284          l_time := l_time + 1/(24 * 60 * 60) ;
2285 
2286          fnd_file.put_line(fnd_file.log,l_chrv_tbl_in (i).contract_number ||l_chrv_tbl_in (i).contract_number_modifier);
2287          fnd_file.put_line(fnd_file.log,l_chrv_tbl_in (i).id);
2288         IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2289         THEN
2290          fnd_log.STRING (fnd_log.level_event,
2291                          g_module_current || 'oks_mass_update.create_contract_header',
2292                          'After contract Modifier ('
2293                          || l_chrv_tbl_in (i).contract_number_modifier || ')');
2294         END IF;
2295 
2296         validate_contract_number
2297            (p_contract_number_modifier      => l_chrv_tbl_in (i).contract_number_modifier,
2298             p_contract_number               => l_chrv_tbl_in (i).contract_number,
2299             x_return_status                 => l_return_status
2300            );
2301         fnd_file.put_line(fnd_file.log,'validate_contract_number'||l_return_status);
2302         IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2303         THEN
2304          fnd_log.STRING (fnd_log.level_event,
2305                          g_module_current || 'oks_mass_update.create_contract_header',
2306                          'after Validate contract number status = ('
2307                          || l_return_status || ')');
2308         END IF;
2309 
2310         l_chrv_tbl_in (i).short_description :=
2311                     'Transferred from Contract : ' || hdr_contract_number (i)||' '||hdr_contract_number_modifier(i) ;
2312 
2313 
2314          l_chrv_tbl_in (i).archived_yn              := 'N';
2315          l_chrv_tbl_in (i).deleted_yn               := 'N';
2316          l_chrv_tbl_in (i).cust_po_number_req_yn    := 'N';
2317          l_chrv_tbl_in (i).buy_or_sell              := 'S';
2318          l_chrv_tbl_in (i).issue_or_receive         := 'I';
2319          l_chrv_tbl_in (i).chr_type                 := 'CYA';
2320          l_chrv_tbl_in (i).template_yn              := 'N';
2321          l_chrv_tbl_in (i).old_sts_code             := '';
2322          l_chrv_tbl_in (i).old_ste_code             := '';
2323          l_chrv_tbl_in (i).new_sts_code             := '';
2324          l_chrv_tbl_in (i).new_ste_code             := '';
2325          l_chrv_tbl_in (i).chr_id_renewed_to        := NULL;
2326          l_chrv_tbl_in (i).pre_pay_req_yn           := '';
2327          l_chrv_tbl_in (i).cust_po_number           := '';
2328          l_chrv_tbl_in (i).comments                 := '';
2329          l_chrv_tbl_in (i).description              := '';
2330          l_chrv_tbl_in (i).dpas_rating              := NULL;
2331          l_chrv_tbl_in (i).cognomen                 := '';
2332          l_chrv_tbl_in (i).template_used            := '';
2333          l_chrv_tbl_in (i).datetime_cancelled       := '';
2334          l_chrv_tbl_in (i).auto_renew_days          := NULL;
2335          l_chrv_tbl_in (i).date_issued              := '';
2336          l_chrv_tbl_in (i).datetime_responded       := '';
2337          l_chrv_tbl_in (i).non_response_reason      := '';
2338          l_chrv_tbl_in (i).non_response_explain     := '';
2339          l_chrv_tbl_in (i).rfp_type                 := '';
2340          l_chrv_tbl_in (i).keep_on_mail_list        := '';
2341          l_chrv_tbl_in (i).set_aside_reason         := '';
2342          l_chrv_tbl_in (i).set_aside_percent        := NULL;
2343          l_chrv_tbl_in (i).response_copies_req      := '';
2344          l_chrv_tbl_in (i).date_close_projected     := '';
2345          l_chrv_tbl_in (i).datetime_proposed        := '';
2346          l_chrv_tbl_in (i).date_terminated          := '';
2347          l_chrv_tbl_in (i).date_renewed             := '';
2348          l_chrv_tbl_in (i).trn_code                 := '';
2349          l_chrv_tbl_in (i).estimated_amount         := NULL;
2350          l_chrv_tbl_in (i).estimated_amount_renewed := NULL;
2351          l_chrv_tbl_in (i).currency_code_renewed    := '';
2352          l_chrv_tbl_in (i).upg_orig_system_ref      := '';
2353          l_chrv_tbl_in (i).upg_orig_system_ref_id   := NULL;
2354          l_chrv_tbl_in (i).orig_system_source_code  := '';
2355          l_chrv_tbl_in (i).orig_system_id1          := NULL;
2356          l_chrv_tbl_in (i).orig_system_reference1   := NULL;
2357          l_chrv_tbl_in (i).program_id               := NULL;
2358          l_chrv_tbl_in (i).request_id               := NULL;
2359          l_chrv_tbl_in (i).program_update_date      := '';
2360          l_chrv_tbl_in (i).program_application_id   := NULL;
2361          l_chrv_tbl_in (i).pricing_date             := '';
2362          l_chrv_tbl_in (i).sign_by_date             := '';
2363          l_chrv_tbl_in (i).total_line_list_price    := NULL;
2364          l_chrv_tbl_in (i).user_estimated_amount    := NULL;
2365          l_chrv_tbl_in (i).governing_contract_yn    := '';
2366          l_chrv_tbl_in (i).attribute_category       := '';
2367          l_chrv_tbl_in (i).attribute1               := '';
2368          l_chrv_tbl_in (i).attribute2               := '';
2369          l_chrv_tbl_in (i).attribute3               := '';
2370          l_chrv_tbl_in (i).attribute4               := '';
2371          l_chrv_tbl_in (i).attribute5               := '';
2372          l_chrv_tbl_in (i).attribute6               := '';
2373          l_chrv_tbl_in (i).attribute7               := '';
2374          l_chrv_tbl_in (i).attribute8               := '';
2375          l_chrv_tbl_in (i).attribute9               := '';
2376          l_chrv_tbl_in (i).attribute10              := '';
2377          l_chrv_tbl_in (i).attribute11              := '';
2378          l_chrv_tbl_in (i).attribute12              := '';
2379          l_chrv_tbl_in (i).attribute13              := '';
2380          l_chrv_tbl_in (i).attribute14              := '';
2381          l_chrv_tbl_in (i).attribute15              := '';
2382          l_chrv_tbl_in (i).renewal_type_code        := '';
2383          l_chrv_tbl_in (i).renewal_notify_to        := NULL;
2384          l_chrv_tbl_in (i).renewal_end_date         := NULL;
2385          l_chrv_tbl_in (i).created_by               := fnd_global.user_id;
2386          l_chrv_tbl_in (i).creation_date            := SYSDATE;
2387          l_chrv_tbl_in (i).last_updated_by          := fnd_global.user_id;
2388          l_chrv_tbl_in (i).last_update_date         := SYSDATE;
2389          l_chrv_tbl_in (i).last_update_login        := fnd_global.login_id;
2390          l_chrv_tbl_in (i).cust_acct_id             := NULL;
2391          l_chrv_tbl_in (i).payment_instruction_type := '';
2392 
2393          IF p_batch_rules.bill_address_id Is Not Null Then
2394             L_valid_billto :=  validate_site_use_id
2395                                (
2396                                 p_site_use_id   => p_batch_rules.bill_address_id,
2397                                 p_site_use_code => 'BILL_TO',
2398                                 p_cust_acct_id  => p_batch_rules.bill_account_id,
2399                                 p_org_id        => hdr_authoring_org_id (i)
2400                                 );
2401          End If;
2402          fnd_file.put_line(fnd_file.log,'l_valid_billto'||l_valid_billto);
2403          If l_valid_billto <> 'Y' or p_batch_rules.bill_address_id Is Null Then
2404 
2405              l_chrv_tbl_in(i).bill_to_site_use_id := site_address(nvl(p_batch_rules.bill_account_id,p_batch_rules.new_customer_id),
2406                                                                   p_batch_rules.new_party_id,
2407                                                                   'BILL_TO',
2408                                                                   hdr_authoring_org_id (i)
2409                                                                   );
2410          Else
2411              l_chrv_tbl_in(i).bill_to_site_use_id := p_batch_rules.bill_address_id;
2412          End If;
2413 
2414 
2415 
2416 
2417          IF p_batch_rules.Ship_address_id Is Not Null Then
2418             L_valid_Shipto :=  validate_site_use_id
2419                                (
2420                                 p_site_use_id   => p_batch_rules.Ship_address_id,
2421                                 p_site_use_code => 'SHIP_TO',
2422                                 p_cust_acct_id  => p_batch_rules.Ship_account_id,
2423                                 p_org_id        => hdr_authoring_org_id (i)
2424                                 );
2425          End If;
2426          fnd_file.put_line(fnd_file.log,'L_valid_Shipto'||L_valid_Shipto);
2427          If L_valid_Shipto <> 'Y' or p_batch_rules.Ship_address_id Is Null Then
2428 
2429              l_chrv_tbl_in(i).Ship_to_site_use_id := site_address(nvl(p_batch_rules.Ship_account_id
2430                                                                      ,p_batch_rules.new_customer_id),
2431                                                                   p_batch_rules.new_party_id,
2432                                                                   'SHIP_TO',
2433                                                                   hdr_authoring_org_id (i)
2434                                                                   );
2435          Else
2436              l_chrv_tbl_in(i).Ship_to_site_use_id := p_batch_rules.Ship_address_id;
2437          End If;
2438 
2439 
2440 
2441          -- Assigning records for okS_k_headers_b
2442          l_khrv_tbl_in (i).ID := hdr_oks_id(i); --okc_p_util.raw_to_number (SYS_GUID ());
2443          l_khrv_tbl_in (i).chr_id := hdr_id (i);
2444          l_khrv_tbl_in (i).summary_trx_yn := hdr_sum_trx (i);
2445          l_khrv_tbl_in (i).hold_billing := hdr_hold_bill (i);
2446          l_khrv_tbl_in (i).inv_trx_type := hdr_inv_trx (i);
2447 
2448 --      l_khrv_tbl_in (1).est_rev_percent         :=
2449 --      l_khrv_tbl_in (1).est_rev_date            := p_header_rec.est_rev_date;
2450          fnd_file.put_line(fnd_file.log,'setup_attr.pdf_id ***'||setup_attr.pdf_id );
2451 
2452          -- create wf process
2453          IF setup_attr.pdf_id IS NOT NULL and l_lse_id <> 14
2454          THEN
2455             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2456             THEN
2457              fnd_log.STRING (fnd_log.level_event,
2458                              g_module_current || 'oks_mass_update.create_contract_header',
2459                              'Inside pdf assignment');
2460             END IF;
2461 
2462             l_cpsv_tbl_in (i).ID                     := okc_p_util.raw_to_number (SYS_GUID ());
2463             l_cpsv_tbl_in (i).chr_id                 := hdr_id (i);
2464             l_cpsv_tbl_in (i).pdf_id                 := setup_attr.pdf_id;
2465             l_cpsv_tbl_in (i).user_id                := fnd_global.user_id;
2466             l_cpsv_tbl_in (i).created_by             := fnd_global.user_id;
2467             l_cpsv_tbl_in (i).creation_date          := SYSDATE;
2468             l_cpsv_tbl_in (i).last_updated_by        := fnd_global.user_id;
2469             l_cpsv_tbl_in (i).last_update_date       := SYSDATE;
2470             l_cpsv_tbl_in (i).object_version_number  := 1;
2471             l_cpsv_tbl_in (i).crt_id                 := NULL;
2472             l_cpsv_tbl_in (i).process_id             := NULL;
2473             l_cpsv_tbl_in (i).in_process_yn          := '';
2474             l_cpsv_tbl_in (i).attribute_category     := '';
2475             l_cpsv_tbl_in (i).attribute1             := '';
2476             l_cpsv_tbl_in (i).attribute2             := '';
2477             l_cpsv_tbl_in (i).attribute3             := '';
2478             l_cpsv_tbl_in (i).attribute4             := '';
2479             l_cpsv_tbl_in (i).attribute5             := '';
2480             l_cpsv_tbl_in (i).attribute6             := '';
2481             l_cpsv_tbl_in (i).attribute7             := '';
2482             l_cpsv_tbl_in (i).attribute8             := '';
2483             l_cpsv_tbl_in (i).attribute9             := '';
2484             l_cpsv_tbl_in (i).attribute10            := '';
2485             l_cpsv_tbl_in (i).attribute11            := '';
2486             l_cpsv_tbl_in (i).attribute12            := '';
2487             l_cpsv_tbl_in (i).attribute13            := '';
2488             l_cpsv_tbl_in (i).attribute14            := '';
2489             l_cpsv_tbl_in (i).attribute15            := '';
2490             l_cpsv_tbl_in (i).last_update_login      := fnd_global.login_id;
2491          END IF;
2492          -- create contract group
2493          IF setup_attr.cgp_new_id IS NOT NULL
2494          THEN
2495 
2496             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2497             THEN
2498              fnd_log.STRING (fnd_log.level_event,
2499                              g_module_current || 'oks_mass_update.create_contract_header',
2500                              'Inside contract group assignment');
2501             END IF;
2502 
2503             l_cgcv_tbl_in (i).ID                     := okc_p_util.raw_to_number (SYS_GUID ());
2504             l_cgcv_tbl_in (i).cgp_parent_id          := setup_attr.cgp_new_id;
2505             l_cgcv_tbl_in (i).included_chr_id        := hdr_id (i);
2506             l_cgcv_tbl_in (i).object_version_number  := 1;
2507             l_cgcv_tbl_in (i).scs_code               := hdr_scs_code (i);
2508             l_cgcv_tbl_in (i).created_by             := fnd_global.user_id;
2509             l_cgcv_tbl_in (i).creation_date          := SYSDATE;
2510             l_cgcv_tbl_in (i).last_updated_by        := fnd_global.user_id;
2511             l_cgcv_tbl_in (i).last_update_date       := SYSDATE;
2512             l_cgcv_tbl_in (i).last_update_login      := fnd_global.login_id;
2513          END IF;
2514 
2515          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2516          THEN
2517           fnd_log.STRING (fnd_log.level_event,
2518                          g_module_current || 'oks_mass_update.create_contract_header',
2519                          'Party roles assignment, Vendor = '|| hdr_authoring_org_id (i)
2520                          || 'Customer = '|| p_batch_rules.new_party_id );
2521          END IF;
2522 
2523          l_cpl_tbl_in (j).ID := okc_p_util.raw_to_number (SYS_GUID ());
2524          l_cpl_tbl_in (j).object_version_number := 1;
2525          l_cpl_tbl_in (j).sfwt_flag := 'N';
2526          l_cpl_tbl_in (j).cpl_id := '';
2527          l_cpl_tbl_in (j).chr_id := hdr_id (i);
2528          l_cpl_tbl_in (j).cle_id := '';
2529          IF hdr_scs_code(i) IN ('WARRANTY' , 'SERVICE' )
2530          THEN
2531          l_cpl_tbl_in (j).rle_code := 'VENDOR';
2532          ELSE
2533          l_cpl_tbl_in (j).rle_code := 'MERCHANT';
2534          END IF;
2535          l_cpl_tbl_in (j).dnz_chr_id := hdr_id (i);
2536          l_cpl_tbl_in (j).object1_id1 := hdr_authoring_org_id (i);
2537          l_cpl_tbl_in (j).object1_id2 := '#';
2538          l_cpl_tbl_in (j).jtot_object1_code := 'OKX_OPERUNIT';
2539          l_cpl_tbl_in (j).cognomen := '';
2540          l_cpl_tbl_in (j).code := '';
2541          l_cpl_tbl_in (j).facility := '';
2542          l_cpl_tbl_in (j).minority_group_lookup_code := '';
2543          l_cpl_tbl_in (j).small_business_flag := '';
2544          l_cpl_tbl_in (j).women_owned_flag := '';
2545          l_cpl_tbl_in (j).alias := '';
2546          l_cpl_tbl_in (j).primary_yn := '';
2547          l_cpl_tbl_in (j).cust_acct_id := '';
2548          l_cpl_tbl_in (j).bill_to_site_use_id := '';
2549          l_cpl_tbl_in (j).attribute_category := '';
2550          l_cpl_tbl_in (j).attribute1 := '';
2551          l_cpl_tbl_in (j).attribute2 := '';
2552          l_cpl_tbl_in (j).attribute3 := '';
2553          l_cpl_tbl_in (j).attribute4 := '';
2554          l_cpl_tbl_in (j).attribute5 := '';
2555          l_cpl_tbl_in (j).attribute6 := '';
2556          l_cpl_tbl_in (j).attribute7 := '';
2557          l_cpl_tbl_in (j).attribute8 := '';
2558          l_cpl_tbl_in (j).attribute9 := '';
2559          l_cpl_tbl_in (j).attribute10 := '';
2560          l_cpl_tbl_in (j).attribute11 := '';
2561          l_cpl_tbl_in (j).attribute12 := '';
2562          l_cpl_tbl_in (j).attribute13 := '';
2563          l_cpl_tbl_in (j).attribute14 := '';
2564          l_cpl_tbl_in (j).attribute15 := '';
2565          l_cpl_tbl_in (j).created_by := fnd_global.user_id;
2566          l_cpl_tbl_in (j).creation_date := SYSDATE;
2567          l_cpl_tbl_in (j).last_updated_by := fnd_global.user_id;
2568          l_cpl_tbl_in (j).last_update_date := SYSDATE;
2569          l_cpl_tbl_in (j).last_update_login := fnd_global.login_id;
2570         If l_lse_id <> 14 Then
2571          If NVL(fnd_profile.value('OKS_USE_JTF'),'NO') = 'YES' Then
2572 
2573          --Vendor Contact Derived from territory Setup
2574          OKS_EXTWARPRGM_PVT.GET_JTF_RESOURCE (p_authorg_id     => hdr_authoring_org_id (i),
2575                                 p_party_id       => p_batch_rules.new_party_id ,
2576                                 x_winners_rec    => l_gen_return_rec,
2577                                 x_msg_count      => x_msg_count,
2578                                 x_msg_data       => x_msg_data,
2579                                 x_return_status  => l_return_status
2580                               );
2581          fnd_file.put_line(fnd_file.log,'GET_JTF_RESOURCE ret status'||l_return_status);
2582          IF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
2583   	         -- Setup error
2584   	        fnd_file.put_line(fnd_file.log,'SEND_NOTIFICATION');
2585 
2586      	          OKS_EXTWARPRGM_PVT.SEND_NOTIFICATION(null, hdr_id (i),'SER');
2587   	     ELSE
2588 
2589 
2590                 If l_gen_return_rec.trans_object_id.Count > 0 Then
2591 
2592                        For l_counter in l_gen_return_rec.trans_object_id.FIRST..l_gen_return_Rec.trans_object_id.LAST
2593                        LOOP
2594                             l_salesrep_id := Null;
2595                        fnd_file.put_line(fnd_file.log,'in loop'||l_gen_return_Rec.RESOURCE_ID(l_counter)||'org'||hdr_authoring_org_id (i) );
2596 
2597                             OPEN Salesrep_details(l_gen_return_Rec.RESOURCE_ID(l_counter),hdr_authoring_org_id (i) );
2598                             FETCH Salesrep_details INTO l_Salesrep_id;
2599                             CLOSE Salesrep_details;
2600                             fnd_file.put_line(fnd_file.log,'in loop l_Salesrep_id'||l_Salesrep_id);
2601 
2602                             If l_salesrep_id  is not null Then
2603                                Exit;
2604                             End If;
2605                        End Loop;
2606 
2607 
2608                       IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
2609                           fnd_log.string(FND_LOG.LEVEL_STATEMENT,G_MODULE_CURRENT,
2610                                   'Salesrep ID is : ' ||  l_salesrep_id );
2611                       END IF;
2612                       IF l_salesrep_id  Is Null THEN
2613                           fnd_file.put_line(fnd_file.log,'SEND_NOTIFICATION 1');
2614 
2615                           OKS_EXTWARPRGM_PVT.SEND_NOTIFICATION(null,hdr_id(i) ,'ISP');
2616                       End If;
2617                   Else
2618                           fnd_file.put_line(fnd_file.log,'SEND_NOTIFICATION 2');
2619                           OKS_EXTWARPRGM_PVT.SEND_NOTIFICATION(null, hdr_id(i),'NRS');
2620                   END IF;
2621 
2622            END IF;
2623            fnd_file.put_line(fnd_file.log,'l_salesrep_id value'||l_salesrep_id);
2624            If l_salesrep_id Is Not Null And fnd_profile.VALUE('OKS_VENDOR_CONTACT_ROLE' ) IS NOT NULL THEN
2625                l_salesgroup_id := Null;
2626                fnd_file.put_line(fnd_file.log,'l_salesrep_id not nul');
2627                l_salesgroup_id := jtf_rs_integration_pub.get_default_sales_group
2628                                   (p_salesrep_id    => l_salesrep_id,
2629                                    p_org_id         => hdr_authoring_org_id (i),
2630                                    p_date           => hdr_start_date (i));
2631 
2632 
2633                OPEN object_code_csr( fnd_profile.VALUE('OKS_VENDOR_CONTACT_ROLE' ));
2634                FETCH object_code_csr INTO l_temp;
2635                IF object_code_csr%NOTFOUND THEN
2636                     CLOSE object_code_csr;
2637                     OKC_API.SET_MESSAGE(
2638                          g_app_name,
2639                          g_unexpected_error,
2640                          g_sqlcode_token,
2641                          SQLCODE,
2642                          g_sqlerrm_token,
2643                          'Wrong vendor contact role assigned'
2644                      );
2645 
2646                     l_return_status := okc_api.g_ret_sts_error;
2647                     RAISE G_EXCEPTION_HALT_VALIDATION;
2648                END IF;
2649                CLOSE object_code_csr;
2650 
2651 
2652                l_ctcv_tbl_in (k).ID := okc_p_util.raw_to_number (SYS_GUID ());
2653                l_ctcv_tbl_in (k).object_version_number := 1;
2654 
2655                l_ctcv_tbl_in (k).cpl_id := l_cpl_tbl_in (j).ID;
2656 
2657                l_ctcv_tbl_in (k).cro_code := fnd_profile.VALUE('OKS_VENDOR_CONTACT_ROLE' );
2658                l_ctcv_tbl_in (k).dnz_chr_id := hdr_id (i);
2659                l_ctcv_tbl_in (k).contact_sequence := 1;
2660                l_ctcv_tbl_in (k).object1_id1 := l_salesrep_id;
2661                l_ctcv_tbl_in (k).object1_id2 := '#';
2662                l_ctcv_tbl_in (k).jtot_object1_code := 'OKX_SALEPERS' ;
2663                l_ctcv_tbl_in (k).primary_yn := 'N';
2664                l_ctcv_tbl_in (k).resource_class := '';
2665                l_ctcv_tbl_in (k).sales_group_id := l_salesgroup_id;
2666 
2667                l_ctcv_tbl_in (k).attribute_category := '';
2668                l_ctcv_tbl_in (k).attribute1 := '';
2669                l_ctcv_tbl_in (k).attribute2 := '';
2670                l_ctcv_tbl_in (k).attribute3 := '';
2671                l_ctcv_tbl_in (k).attribute4 := '';
2672                l_ctcv_tbl_in (k).attribute5 := '';
2673                l_ctcv_tbl_in (k).attribute6 := '';
2674                l_ctcv_tbl_in (k).attribute7 := '';
2675                l_ctcv_tbl_in (k).attribute8 := '';
2676                l_ctcv_tbl_in (k).attribute9 := '';
2677                l_ctcv_tbl_in (k).attribute10 := '';
2678                l_ctcv_tbl_in (k).attribute11 := '';
2679                l_ctcv_tbl_in (k).attribute12 := '';
2680                l_ctcv_tbl_in (k).attribute13 := '';
2681                l_ctcv_tbl_in (k).attribute14 := '';
2682                l_ctcv_tbl_in (k).attribute15 := '';
2683                l_ctcv_tbl_in (k).created_by := fnd_global.user_id;
2684                l_ctcv_tbl_in (k).creation_date := SYSDATE;
2685                l_ctcv_tbl_in (k).last_updated_by := fnd_global.user_id;
2686                l_ctcv_tbl_in (k).last_update_date := SYSDATE;
2687                l_ctcv_tbl_in (k).last_update_login := fnd_global.login_id;
2688                l_ctcv_tbl_in (k).start_date := hdr_start_date (i);
2689                l_ctcv_tbl_in (k).end_date := hdr_end_date (i);
2690 
2691 
2692                K := K + 1;
2693 
2694          End If;
2695          End If;
2696 End If;
2697 
2698          l_cpl_tbl_in (j + 1).ID := okc_p_util.raw_to_number (SYS_GUID ());
2699          l_cpl_tbl_in (j + 1).object_version_number := 1;
2700          l_cpl_tbl_in (j + 1).sfwt_flag := 'N';
2701          l_cpl_tbl_in (j + 1).cpl_id := '';
2702          l_cpl_tbl_in (j + 1).chr_id := hdr_id (i);
2703          l_cpl_tbl_in (j + 1).cle_id := '';
2704          IF hdr_scs_code(i) IN ('WARRANTY' , 'SERVICE' )
2705          THEN
2706          l_cpl_tbl_in (j + 1).rle_code := 'CUSTOMER';
2707          ELSE
2708          l_cpl_tbl_in (j + 1).rle_code := 'SUBSCRIBER';
2709          END IF;
2710          l_cpl_tbl_in (j + 1).dnz_chr_id := hdr_id (i);
2711          l_cpl_tbl_in (j + 1).object1_id1 := p_batch_rules.new_party_id;
2712          l_cpl_tbl_in (j + 1).object1_id2 := '#';
2713          l_cpl_tbl_in (j + 1).jtot_object1_code := 'OKX_PARTY';
2714          l_cpl_tbl_in (j + 1).cognomen := '';
2715          l_cpl_tbl_in (j + 1).code := '';
2716          l_cpl_tbl_in (j + 1).facility := '';
2717          l_cpl_tbl_in (j + 1).minority_group_lookup_code := '';
2718          l_cpl_tbl_in (j + 1).small_business_flag := '';
2719          l_cpl_tbl_in (j + 1).women_owned_flag := '';
2720          l_cpl_tbl_in (j + 1).alias := '';
2721          l_cpl_tbl_in (j + 1).primary_yn := '';
2722          l_cpl_tbl_in (j + 1).cust_acct_id := '';
2723          l_cpl_tbl_in (j + 1).bill_to_site_use_id := '';
2724          l_cpl_tbl_in (j + 1).attribute_category := '';
2725          l_cpl_tbl_in (j + 1).attribute1 := '';
2726          l_cpl_tbl_in (j + 1).attribute2 := '';
2727          l_cpl_tbl_in (j + 1).attribute3 := '';
2728          l_cpl_tbl_in (j + 1).attribute4 := '';
2729          l_cpl_tbl_in (j + 1).attribute5 := '';
2730          l_cpl_tbl_in (j + 1).attribute6 := '';
2731          l_cpl_tbl_in (j + 1).attribute7 := '';
2732          l_cpl_tbl_in (j + 1).attribute8 := '';
2733          l_cpl_tbl_in (j + 1).attribute9 := '';
2734          l_cpl_tbl_in (j + 1).attribute10 := '';
2735          l_cpl_tbl_in (j + 1).attribute11 := '';
2736          l_cpl_tbl_in (j + 1).attribute12 := '';
2737          l_cpl_tbl_in (j + 1).attribute13 := '';
2738          l_cpl_tbl_in (j + 1).attribute14 := '';
2739          l_cpl_tbl_in (j + 1).attribute15 := '';
2740          l_cpl_tbl_in (j + 1).created_by := fnd_global.user_id;
2741          l_cpl_tbl_in (j + 1).creation_date := SYSDATE;
2742          l_cpl_tbl_in (j + 1).last_updated_by := fnd_global.user_id;
2743          l_cpl_tbl_in (j + 1).last_update_date := SYSDATE;
2744          l_cpl_tbl_in (j + 1).last_update_login := fnd_global.login_id;
2745 
2746          IF p_batch_rules.bill_contact_id IS NOT NULL
2747          THEN
2748             IF check_acct_not_related(p_batch_rules.new_party_id,
2749                                   p_batch_rules.bill_account_id,
2750                                   hdr_authoring_org_id (i))
2751             THEN
2752                get_party_id (p_cust_id       => p_batch_rules.bill_account_id,
2753                              x_party_id      => l_third_party_id
2754                             );
2755                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2756                THEN
2757                   fnd_log.STRING (fnd_log.level_event,
2758                                  g_module_current || 'oks_mass_update.create_contract_header',
2759                                  'Billing account not related, create billing contact.'
2760                                  || l_third_party_id);
2761                END IF;
2762 
2763                l_cpl_tbl_in (j + 2).ID :=
2764                                         okc_p_util.raw_to_number (SYS_GUID ());
2765                l_cpl_tbl_in (j + 2).object_version_number := 1;
2766                l_cpl_tbl_in (j + 2).sfwt_flag := 'N';
2767                l_cpl_tbl_in (j + 2).cpl_id := '';
2768                l_cpl_tbl_in (j + 2).chr_id := hdr_id (i);
2769                l_cpl_tbl_in (j + 2).cle_id := '';
2770                l_cpl_tbl_in (j + 2).rle_code := setup_attr.rle_code ; --'THIRD_PARTY';
2771                l_cpl_tbl_in (j + 2).dnz_chr_id := hdr_id (i);
2772                l_cpl_tbl_in (j + 2).object1_id1 := l_third_party_id;
2773                l_cpl_tbl_in (j + 2).object1_id2 := '#';
2774                l_cpl_tbl_in (j + 2).jtot_object1_code := 'OKX_PARTY';
2775                l_cpl_tbl_in (j + 2).cognomen := '';
2776                l_cpl_tbl_in (j + 2).code := '';
2777                l_cpl_tbl_in (j + 2).facility := '';
2778                l_cpl_tbl_in (j + 2).minority_group_lookup_code := '';
2779                l_cpl_tbl_in (j + 2).small_business_flag := '';
2780                l_cpl_tbl_in (j + 2).women_owned_flag := '';
2781                l_cpl_tbl_in (j + 2).alias := '';
2782                l_cpl_tbl_in (j + 2).primary_yn := '';
2783                l_cpl_tbl_in (j + 2).cust_acct_id := '';
2784                l_cpl_tbl_in (j + 2).bill_to_site_use_id := '';
2785                l_cpl_tbl_in (j + 2).attribute_category := '';
2786                l_cpl_tbl_in (j + 2).attribute1 := '';
2787                l_cpl_tbl_in (j + 2).attribute2 := '';
2788                l_cpl_tbl_in (j + 2).attribute3 := '';
2789                l_cpl_tbl_in (j + 2).attribute4 := '';
2790                l_cpl_tbl_in (j + 2).attribute5 := '';
2791                l_cpl_tbl_in (j + 2).attribute6 := '';
2792                l_cpl_tbl_in (j + 2).attribute7 := '';
2793                l_cpl_tbl_in (j + 2).attribute8 := '';
2794                l_cpl_tbl_in (j + 2).attribute9 := '';
2795                l_cpl_tbl_in (j + 2).attribute10 := '';
2796                l_cpl_tbl_in (j + 2).attribute11 := '';
2797                l_cpl_tbl_in (j + 2).attribute12 := '';
2798                l_cpl_tbl_in (j + 2).attribute13 := '';
2799                l_cpl_tbl_in (j + 2).attribute14 := '';
2800                l_cpl_tbl_in (j + 2).attribute15 := '';
2801                l_cpl_tbl_in (j + 2).created_by := fnd_global.user_id;
2802                l_cpl_tbl_in (j + 2).creation_date := SYSDATE;
2803                l_cpl_tbl_in (j + 2).last_updated_by := fnd_global.user_id;
2804                l_cpl_tbl_in (j + 2).last_update_date := SYSDATE;
2805                l_cpl_tbl_in (j + 2).last_update_login := fnd_global.login_id;
2806 
2807 
2808                l_ctcv_tbl_in (k).ID := okc_p_util.raw_to_number (SYS_GUID ());
2809                l_ctcv_tbl_in (k).object_version_number := 1;
2810                l_ctcv_tbl_in (k).cpl_id := l_cpl_tbl_in (j + 2).ID;
2811                l_ctcv_tbl_in (k).cro_code := 'BILLING';
2812                l_ctcv_tbl_in (k).dnz_chr_id := hdr_id (i);
2813                l_ctcv_tbl_in (k).contact_sequence := 1;
2814                l_ctcv_tbl_in (k).object1_id1 := p_batch_rules.bill_contact_id;
2815                l_ctcv_tbl_in (k).object1_id2 := '#';
2816                l_ctcv_tbl_in (k).jtot_object1_code := 'OKX_PCONTACT';
2817                l_ctcv_tbl_in (k).primary_yn := 'N';
2818                l_ctcv_tbl_in (k).resource_class := '';
2819                l_ctcv_tbl_in (k).sales_group_id := NULL;
2820                l_ctcv_tbl_in (k).attribute_category := '';
2821                l_ctcv_tbl_in (k).attribute1 := '';
2822                l_ctcv_tbl_in (k).attribute2 := '';
2823                l_ctcv_tbl_in (k).attribute3 := '';
2824                l_ctcv_tbl_in (k).attribute4 := '';
2825                l_ctcv_tbl_in (k).attribute5 := '';
2826                l_ctcv_tbl_in (k).attribute6 := '';
2827                l_ctcv_tbl_in (k).attribute7 := '';
2828                l_ctcv_tbl_in (k).attribute8 := '';
2829                l_ctcv_tbl_in (k).attribute9 := '';
2830                l_ctcv_tbl_in (k).attribute10 := '';
2831                l_ctcv_tbl_in (k).attribute11 := '';
2832                l_ctcv_tbl_in (k).attribute12 := '';
2833                l_ctcv_tbl_in (k).attribute13 := '';
2834                l_ctcv_tbl_in (k).attribute14 := '';
2835                l_ctcv_tbl_in (k).attribute15 := '';
2836                l_ctcv_tbl_in (k).created_by := fnd_global.user_id;
2837                l_ctcv_tbl_in (k).creation_date := SYSDATE;
2838                l_ctcv_tbl_in (k).last_updated_by := fnd_global.user_id;
2839                l_ctcv_tbl_in (k).last_update_date := SYSDATE;
2840                l_ctcv_tbl_in (k).last_update_login := fnd_global.login_id;
2841                l_ctcv_tbl_in (k).start_date := hdr_start_date (i);
2842                l_ctcv_tbl_in (k).end_date := hdr_end_date (i);
2843                j := j + 3;
2844             ELSE
2845                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2846                THEN
2847                   fnd_log.STRING (fnd_log.level_event,
2848                                  g_module_current || 'oks_mass_update.create_contract_header',
2849                                  'Billing account are related, create billing contact.');
2850                END IF;
2851 
2852                l_ctcv_tbl_in (k).ID := okc_p_util.raw_to_number (SYS_GUID ());
2853                l_ctcv_tbl_in (k).object_version_number := 1;
2854                l_ctcv_tbl_in (k).cpl_id := l_cpl_tbl_in (j + 1).ID;
2855                l_ctcv_tbl_in (k).cro_code := 'BILLING';
2856                l_ctcv_tbl_in (k).dnz_chr_id := hdr_id (i);
2857                l_ctcv_tbl_in (k).contact_sequence := 1;
2858                l_ctcv_tbl_in (k).object1_id1 := p_batch_rules.bill_contact_id;
2859                l_ctcv_tbl_in (k).object1_id2 := '#';
2860                l_ctcv_tbl_in (k).jtot_object1_code := 'OKX_PCONTACT';
2861                l_ctcv_tbl_in (k).primary_yn := 'N';
2862                l_ctcv_tbl_in (k).resource_class := '';
2863                l_ctcv_tbl_in (k).sales_group_id := NULL;
2864                l_ctcv_tbl_in (k).attribute_category := '';
2865                l_ctcv_tbl_in (k).attribute1 := '';
2866                l_ctcv_tbl_in (k).attribute2 := '';
2867                l_ctcv_tbl_in (k).attribute3 := '';
2868                l_ctcv_tbl_in (k).attribute4 := '';
2869                l_ctcv_tbl_in (k).attribute5 := '';
2870                l_ctcv_tbl_in (k).attribute6 := '';
2871                l_ctcv_tbl_in (k).attribute7 := '';
2872                l_ctcv_tbl_in (k).attribute8 := '';
2873                l_ctcv_tbl_in (k).attribute9 := '';
2874                l_ctcv_tbl_in (k).attribute10 := '';
2875                l_ctcv_tbl_in (k).attribute11 := '';
2876                l_ctcv_tbl_in (k).attribute12 := '';
2877                l_ctcv_tbl_in (k).attribute13 := '';
2878                l_ctcv_tbl_in (k).attribute14 := '';
2879                l_ctcv_tbl_in (k).attribute15 := '';
2880                l_ctcv_tbl_in (k).created_by := fnd_global.user_id;
2881                l_ctcv_tbl_in (k).creation_date := SYSDATE;
2882                l_ctcv_tbl_in (k).last_updated_by := fnd_global.user_id;
2883                l_ctcv_tbl_in (k).last_update_date := SYSDATE;
2884                l_ctcv_tbl_in (k).last_update_login := fnd_global.login_id;
2885                l_ctcv_tbl_in (k).start_date := hdr_start_date (i);
2886                l_ctcv_tbl_in (k).end_date := hdr_end_date (i);
2887                K := K + 1;
2888                j := j + 2;
2889             END IF;
2890          ELSE
2891             j := j + 2;
2892          END IF;
2893 
2894 
2895 
2896       END LOOP;
2897 
2898       -- Insert into okc tables
2899       IF l_chrv_tbl_in.COUNT > 0
2900       THEN
2901  fnd_file.put_line(fnd_file.log,' insert_row_upg');
2902          okc_chr_pvt.insert_row_upg (x_return_status      => l_return_status,
2903                                      p_chrv_tbl           => l_chrv_tbl_in
2904                                     );
2905 
2906          fnd_file.put_line(fnd_file.log,'(OKS) -> Call to okc_chr_pvt.insert_row_upg , status = ( '
2907                             || l_return_status || ' )');
2908 
2909          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2910          THEN
2911               fnd_log.STRING (fnd_log.level_event,
2912                              g_module_current || 'oks_mass_update.create_contract_header',
2913                              'okc_chr_pvt.insert_row_upg, status = ('
2914                              || l_return_status || ')');
2915          END IF;
2916 
2917          IF l_return_status <> okc_api.g_ret_sts_success
2918          THEN
2919 
2920             RAISE g_exception_halt_validation;
2921          END IF;
2922       END IF;
2923 
2924       -- Insert into oks tables
2925       IF l_khrv_tbl_in.COUNT > 0
2926       THEN
2927 
2928             FORALL i IN hdr_oks_id.FIRST..hdr_oks_id.LAST
2929                 INSERT INTO OKS_K_HEADERS_B(
2930                   id,
2931                   chr_id,
2932                   acct_rule_id,
2933                   tax_code,
2934                   billing_profile_id,
2935                   inv_trx_type,
2936                   inv_print_profile,
2937                   ar_interface_yn,
2938                   hold_billing,
2939                   summary_trx_yn,
2940                   object_version_number,
2941                   period_start,
2942                   period_type,
2943                   created_by,
2944                   creation_date,
2945                   last_updated_by,
2946                   last_update_date,
2947                   last_update_login,
2948                   renewal_status,
2949                   price_uom)
2950                 VALUES (
2951                   hdr_oks_id (i),
2952                   hdr_id (i),
2953                   Accting_rule(i),
2954                   '',
2955                    Billing_profile(i),
2956                   hdr_inv_trx (i),
2957                   'Y',
2958                   ar_interface_yn(i),
2959                   hdr_hold_bill (i),
2960                   hdr_sum_trx (i),
2961                   1,
2962                   hdr_period_start(i),
2963                   hdr_period_type(i),
2964                   fnd_global.user_id,
2965                   sysdate,
2966                   fnd_global.user_id,
2967                   sysdate,
2968                   fnd_global.login_id,
2969                   renewal_status(i),
2970                   price_uom(i));
2971 
2972          fnd_file.put_line(fnd_file.log,'(OKS) -> Created oks header table records sucessfully');
2973 
2974          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2975          THEN
2976               fnd_log.STRING (fnd_log.level_event,
2977                              g_module_current || 'oks_mass_update.create_contract_header',
2978                              'oks_chr_pvt.insert_row_upg, status = ('
2979                              || l_return_status || ')');
2980          END IF;
2981       END IF;
2982 
2983       -- create party roles
2984       IF l_cpl_tbl_in.COUNT > 0
2985       THEN
2986          okc_cpl_pvt.insert_row_upg (x_return_status      => l_return_status,
2987                                      p_cplv_tbl           => l_cpl_tbl_in
2988                                     );
2989 
2990          fnd_file.put_line(fnd_file.log,'(OKS) -> Call to okc_cpl_pvt.insert_row_upg , status = ( '
2991                             || l_return_status || ' )');
2992 
2993          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
2994          THEN
2995               fnd_log.STRING (fnd_log.level_event,
2996                              g_module_current || 'oks_mass_update.create_contract_header',
2997                              'okc_cpl_pvt.insert_row_upg, status = ('
2998                              || l_return_status || ')');
2999          END IF;
3000          IF l_return_status <> okc_api.g_ret_sts_success
3001          THEN
3002 
3003             RAISE g_exception_halt_validation;
3004          END IF;
3005       END IF;
3006 
3007       -- create party contacts
3008       IF l_cpl_tbl_in.COUNT > 0
3009       THEN
3010          okc_ctc_pvt.insert_row_upg (x_return_status      => x_return_status,
3011                                      p_ctcv_tbl           => l_ctcv_tbl_in
3012                                     );
3013 
3014          fnd_file.put_line(fnd_file.log,'(OKS) -> Call to okc_ctc_pvt.insert_row_upg , status = ( '
3015                             || l_return_status || ' )');
3016 
3017          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3018          THEN
3019               fnd_log.STRING (fnd_log.level_event,
3020                              g_module_current || 'oks_mass_update.create_contract_header',
3021                              'okc_ctc_pvt.insert_row_upg, status = ('
3022                              || l_return_status || ')');
3023          END IF;
3024          IF l_return_status <> okc_api.g_ret_sts_success
3025          THEN
3026 
3027             RAISE g_exception_halt_validation;
3028          END IF;
3029       END IF;
3030 /*
3031       -- insert goverance
3032       IF l_gvev_tbl_in.COUNT > 0
3033       THEN
3034          okc_gve_pvt.insert_row_upg (x_return_status      => x_return_status,
3035                                      p_gvev_tbl           => l_gvev_tbl_in
3036                                     );
3037 
3038          fnd_file.put_line(fnd_file.log,'(OKS) -> Call to okc_gve_pvt.insert_row_upg , status = ( '
3039                             || l_return_status || ' )');
3040 
3041          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3042          THEN
3043               fnd_log.STRING (fnd_log.level_event,
3044                              g_module_current || 'oks_mass_update.create_contract_header',
3045                              'okc_gve_pvt.insert_row_upg, status = ('
3046                              || l_return_status || ')');
3047          END IF;
3048          IF x_return_status <> okc_api.g_ret_sts_success
3049          THEN
3050             RAISE g_exception_halt_validation;
3051          END IF;
3052       END IF;
3053 */
3054       -- Insert approval workflow
3055       IF l_cpsv_tbl_in.COUNT > 0
3056       THEN
3057          okc_cps_pvt.insert_row_upg (x_return_status      => l_return_status,
3058                                      p_cpsv_tbl           => l_cpsv_tbl_in
3059                                     );
3060 
3061          fnd_file.put_line(fnd_file.log,'(OKS) -> Call to okc_cps_pvt.insert_row_upg , status = ( '
3062                             || l_return_status || ' )');
3063 
3064          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3065          THEN
3066               fnd_log.STRING (fnd_log.level_event,
3067                              g_module_current || 'oks_mass_update.create_contract_header',
3068                              'okc_cps_pvt.insert_row_upg, status = ('
3069                              || l_return_status || ')');
3070          END IF;
3071          IF l_return_status <> okc_api.g_ret_sts_success
3072          THEN
3073             RAISE g_exception_halt_validation;
3074          END IF;
3075       END IF;
3076 
3077       -- insert contract group
3078       IF l_cgcv_tbl_in.COUNT > 0
3079       THEN
3080          okc_cgc_pvt.insert_row_upg (x_return_status      => l_return_status,
3081                                      p_cgcv_tbl           => l_cgcv_tbl_in
3082                                     );
3083 
3084          fnd_file.put_line(fnd_file.log,'(OKS) -> Call to okc_cgc_pvt.insert_row_upg , status = ( '
3085                             || l_return_status || ' )');
3086 
3087          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3088          THEN
3089               fnd_log.STRING (fnd_log.level_event,
3090                              g_module_current || 'oks_mass_update.create_contract_header',
3091                              'okc_cgc_pvt.insert_row_upg, status = ('
3092                              || l_return_status || ')');
3093          END IF;
3094          IF l_return_status <> okc_api.g_ret_sts_success
3095          THEN
3096 
3097             RAISE g_exception_halt_validation;
3098          END IF;
3099       END IF;
3100 
3101       -- insert access
3102       OPEN get_hdr_access_csr;
3103 
3104       FETCH get_hdr_access_csr
3105       BULK COLLECT INTO hdr_id,
3106              groupid,
3107              resource_id,
3108              access_level;
3109 
3110       CLOSE get_hdr_access_csr;
3111 
3112       IF hdr_id.COUNT > 0
3113       THEN
3114          FORALL i IN 1 .. hdr_id.COUNT
3115             INSERT INTO okc_k_accesses
3116                         (ID,
3117                          chr_id,
3118                          GROUP_ID,
3119                          resource_id,
3120                          access_level,
3121                          object_version_number,
3122                          created_by,
3123                          creation_date,
3124                          last_updated_by,
3125                          last_update_date,
3126                          last_update_login
3127                         )
3128                  VALUES (okc_p_util.raw_to_number (SYS_GUID ()),
3129                          hdr_id (i),
3130                          groupid (i),
3131                          resource_id (i),
3132                          access_level (i),
3133                          1,
3134                          fnd_global.user_id,
3135                          SYSDATE,
3136                          fnd_global.user_id,
3137                          SYSDATE,
3138                          fnd_global.user_id
3139                         );
3140          fnd_file.put_line(fnd_file.log,'(OKS) -> Created access sucessfully');
3141 
3142          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3143          THEN
3144               fnd_log.STRING (fnd_log.level_event,
3145                              g_module_current || 'oks_mass_update.create_contract_header',
3146                              'AFter creating the access for each contract');
3147          END IF;
3148       END IF;
3149 
3150       -- insert header sales credits
3151       OPEN get_hdr_salescredits_csr;
3152 
3153       FETCH get_hdr_salescredits_csr
3154       BULK COLLECT INTO hdr_id,
3155              ctc_id,
3156              sales_credit_type_id1,
3157              PERCENT,
3158              sales_group_id;
3159 
3160       CLOSE get_hdr_salescredits_csr;
3161 
3162       IF hdr_id.COUNT > 0
3163       THEN
3164          FORALL i IN 1 .. hdr_id.COUNT
3165             INSERT INTO oks_k_sales_credits
3166                         (ID,
3167                          PERCENT,
3168                          sales_group_id,
3169                          chr_id,
3170                          cle_id,
3171                          ctc_id,
3172                          sales_credit_type_id1,
3173                          sales_credit_type_id2,
3174                          object_version_number,
3175                          created_by,
3176                          creation_date,
3177                          last_updated_by,
3178                          last_update_date
3179                         )
3180                  VALUES (okc_p_util.raw_to_number (SYS_GUID ()),
3181                          PERCENT (i),
3182                          sales_group_id (i),
3183                          hdr_id (i),
3184                          NULL,
3185                          ctc_id (i),
3186                          sales_credit_type_id1 (i),
3187                          '#',
3188                          1,
3189                          fnd_global.user_id,
3190                          SYSDATE,
3191                          fnd_global.user_id,
3192                          SYSDATE
3193                         );
3194          fnd_file.put_line(fnd_file.log,'(OKS) -> Created sales credits sucessfully');
3195 
3196          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3197          THEN
3198               fnd_log.STRING (fnd_log.level_event,
3199                              g_module_current || 'oks_mass_update.create_contract_header',
3200                              'AFter inserting sales credits for header');
3201          END IF;
3202 
3203       END IF;
3204       x_return_status := l_return_status;
3205    EXCEPTION
3206       WHEN g_exception_halt_validation
3207       THEN
3208          x_return_status := l_return_status;
3209          fnd_file.put_line(fnd_file.log,' Error while creating the contract header : '
3210          || SQLCODE||':'|| SQLERRM );
3211          NULL;
3212       WHEN OTHERS
3213       THEN
3214          x_return_status := okc_api.g_ret_sts_unexp_error;
3215          fnd_file.put_line(fnd_file.log,' Error while creating the contract header : '
3216          || SQLCODE||':'|| SQLERRM );
3217          okc_api.set_message (g_app_name,
3218                               g_unexpected_error,
3219                               g_sqlcode_token,
3220                               SQLCODE,
3221                               g_sqlerrm_token,
3222                               SQLERRM
3223                              );
3224    END create_contract_header;
3225 
3226    -------*  Procedure create_contract_line *---------
3227    -- Procedure to create the contract service line
3228    -- which will create records in okc and oks line tables
3229    -- will copy the sales credits
3230    -- instantite/associate the coverage
3231    -- instantiate the counters
3232    -- create the events
3233    ------------------------------------------------------
3234 
3235    PROCEDURE create_contract_line (
3236       p_api_version              IN       NUMBER,
3237       p_batch_rules              IN       batch_rules_rec_type,
3238       p_transfer_date            IN       DATE,
3239       x_return_status            OUT NOCOPY VARCHAR2,
3240       x_msg_count                OUT NOCOPY NUMBER,
3241       x_msg_Data                 OUT NOCOPY VARCHAR2
3242 
3243    )
3244    IS
3245       CURSOR get_srv_details_csr
3246       IS
3247          SELECT Lines.*,
3248                CASE
3249                WHEN (lines.contract_id <>
3250                        LAG (lines.contract_id) OVER (ORDER BY lines.contract_id,lines.line_no)
3251                        or LAG (lines.contract_id) OVER (ORDER BY lines.contract_id,lines.line_no) Is null
3252                      )
3253                THEN get_Topline_number ('NEW')
3254                ELSE get_Topline_number ('OLD')
3255                END  line_number
3256 
3257          from (Select DISTINCT (temp.new_serviceline_id) srvline_id,
3258                          itm.object1_id1 srv_itm,
3259                          itm.object1_id2 srv_invorg,
3260                          itm.jtot_object1_code srv_jtot_code,
3261                          kl.price_list_id srv_pl,
3262                          kl.currency_code srv_curr,
3263                          temp.new_contract_id contract_id,
3264                          itm.number_of_items no_items,
3265                          itm.uom_code uom_code,
3266                          ks.tax_code tax_code,
3267                          kl.lse_id lse_id,
3268                          kl.line_renewal_type_code renewal_type,
3269                          kl.price_unit unit_price,
3270                          (SELECT MIN (new_start_date)
3271                             FROM oks_instance_k_dtls_temp temp1
3272                            WHERE temp1.topline_id = temp.topline_id) new_sdt,
3273                          (SELECT MAX (new_end_date)
3274                             FROM oks_instance_k_dtls_temp temp1
3275                            WHERE temp1.topline_id = temp.topline_id) new_edt,
3276                          Ks.invoice_text,
3277                          ks.coverage_id,
3278                          ks.standard_cov_yn,
3279                          st.ste_code line_sts,
3280                          (SELECT okc_p_util.raw_to_number (SYS_GUID ())
3281                           FROM okc_k_lines_b WHERE id = topline_id) oks_id,
3282                           topline_id,
3283                           Ks.price_uom,
3284                           kh.authoring_org_id,
3285                           Kl.Line_Number Line_no
3286 
3287 
3288                     FROM oks_instance_k_dtls_temp temp,
3289                          okc_k_lines_b kl,
3290                          okc_k_items itm,
3291                          oks_k_lines_v ks,
3292                          okc_statuses_b st,
3293                          okc_k_headers_all_b kh
3294                    WHERE temp.topline_id = kl.ID
3295                      AND temp.new_serviceline_id IS NOT NULL
3296                      AND itm.cle_id = kl.ID
3297                      AND itm.jtot_object1_code IN ('OKX_WARRANTY', 'OKX_SERVICE')
3298                      AND ks.cle_id(+) = kl.ID
3299                      AND st.code = kl.sts_code
3300                      And  Kh.id = kl.dnz_chr_id) lines
3301                      ;
3302 
3303       CURSOR get_line_salescredits_csr
3304       IS
3305          SELECT DISTINCT (temp.new_serviceline_id),
3306                          temp.new_contract_id,
3307                          sc.ctc_id,
3308                          sc.sales_credit_type_id1,
3309                          sc.PERCENT,
3310                          sc.sales_group_id
3311                     FROM oks_k_sales_credits_v sc,
3312                          oks_instance_k_dtls_temp temp
3313                    WHERE sc.cle_id = temp.topline_id
3314                      AND temp.new_serviceline_id IS NOT NULL;
3315 
3316 
3317 
3318       -- plsql collections
3319       srvline_id              okc_datatypes.numbertabtyp;
3320       oldline_id              okc_datatypes.numbertabtyp;
3321       srv_itm                 okc_datatypes.var40tabtyp;
3322       srv_invorg              okc_datatypes.var200tabtyp;
3323       srv_jtot_code           okc_datatypes.var30tabtyp;
3324       price_uom               okc_datatypes.var30tabtyp;
3325       srv_pl                  okc_datatypes.numbertabtyp;
3326       srv_curr                okc_datatypes.var15tabtyp;
3327       contract_id             okc_datatypes.numbertabtyp;
3328       number_of_items         okc_datatypes.numbertabtyp;
3329       uom_code                okc_datatypes.var3tabtyp;
3330       lse_id                  okc_datatypes.numbertabtyp;
3331       new_sdt                 okc_datatypes.datetabtyp;
3332       new_edt                 okc_datatypes.datetabtyp;
3333       line_date_renewed       okc_datatypes.datetabtyp;
3334       tax_code                okc_datatypes.numbertabtyp;
3335       renewal_type            okc_datatypes.var30tabtyp;
3336       unit_price              okc_datatypes.numbertabtyp;
3337       srv_inv_text            var2000tabtyp;
3338       coverage_id             okc_datatypes.numbertabtyp;
3339       stand_cov_yn            okc_datatypes.var3tabtyp;
3340       line_number             okc_datatypes.numbertabtyp;
3341       line_no                 okc_datatypes.numbertabtyp;
3342 
3343       oks_id                  okc_datatypes.numbertabtyp;
3344       line_sts                okc_datatypes.var30tabtyp;
3345       l_cimv_tbl_in           okc_cim_pvt.cimv_tbl_type;
3346       -- Sales credits
3347       ctc_id                  okc_datatypes.numbertabtyp;
3348       sales_credit_type_id1   okc_datatypes.var40tabtyp;
3349       PERCENT                 okc_datatypes.numbertabtyp;
3350       sales_group_id          okc_datatypes.numbertabtyp;
3351       org_id                  okc_datatypes.numbertabtyp;
3352       -- Local Variables
3353       l_tabsize               NUMBER;
3354       l_msg_count             NUMBER;
3355       l_msg_data              VARCHAR2 (2000);
3356       l_return_status         VARCHAR2 (1)                     := 'S';
3357       --Coverage
3358       l_cov_rec               oks_coverages_pub.ac_rec_type;
3359       l_coverage_id           NUMBER;
3360       l_ctr_grpid             NUMBER;
3361       l_ctr_grp_id_template   NUMBER;
3362       l_ctr_grp_id_instance   NUMBER;
3363       l_inp_rec               okc_inst_cnd_pub.instcnd_inp_rec;
3364 
3365    -- Main Begin
3366    BEGIN
3367       l_return_status := okc_api.g_ret_sts_success;
3368 
3369       l_Tlineno_new := 0;
3370       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3371       THEN
3372           fnd_log.STRING (fnd_log.level_event,
3373                          g_module_current || 'oks_mass_update.create_contract_Line',
3374                          'Begin');
3375       END IF;
3376 
3377       OPEN get_srv_details_csr;
3378 
3379       FETCH get_srv_details_csr
3380       BULK COLLECT INTO srvline_id,
3381              srv_itm,
3382              srv_invorg,
3383              srv_jtot_code,
3384              srv_pl,
3385              srv_curr,
3386              contract_id,
3387              number_of_items,
3388              uom_code,
3389              tax_code,
3390              lse_id,
3391              renewal_type,
3392              unit_price,
3393              new_sdt,
3394              new_edt,
3395              srv_inv_text,
3396              coverage_id,
3397              stand_cov_yn,
3398              line_sts,
3399              oks_id,
3400              Oldline_Id,
3401              price_uom,
3402              org_id,
3403              line_no,
3404              line_number
3405 
3406              ;
3407 
3408       CLOSE get_srv_details_csr;
3409       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3410       THEN
3411           fnd_log.STRING (fnd_log.level_event,
3412                          g_module_current || 'oks_mass_update.create_contract_Line',
3413                          'Impacted lines count = ( ' || srvline_id.COUNT ||')');
3414       END IF;
3415 
3416 
3417       IF srvline_id.count >0
3418       THEN
3419       -- create okc lines
3420       l_tabsize := srvline_id.COUNT;
3421       FORALL i IN 1 .. l_tabsize
3422          INSERT INTO okc_k_lines_b
3423                      (ID,
3424                       line_number,
3425                       chr_id,
3426                       cle_id,
3427                       dnz_chr_id,
3428                       display_sequence,
3429                       sts_code,
3430                       lse_id,
3431                       exception_yn,
3432                       object_version_number,
3433                       created_by,
3434                       creation_date,
3435                       last_updated_by,
3436                       last_update_date,
3437                       price_negotiated,
3438                       price_level_ind,
3439                       price_unit,
3440                       currency_code,
3441                       last_update_login,
3442                       start_date,
3443                       end_date,
3444                       price_list_id,
3445                       cust_acct_id,
3446                       bill_to_site_use_id,
3447                       inv_rule_id,
3448                       line_renewal_type_code,
3449                       ship_to_site_use_id,
3450                       annualized_factor
3451                      )
3452               VALUES (srvline_id (i),
3453                       line_number (i),
3454                       contract_id (i),
3455                       NULL,
3456                       contract_id (i),
3457                       1,
3458                       get_line_status(lse_id(i),new_sdt(i),new_edt(i),line_sts(i),p_batch_rules.contract_status),
3459                       --DECODE(lse_id(i),14,get_status(new_sdt(i), new_edt(i)),
3460                       --       DECODE(line_sts(i),'ENTERED',get_status_code('ENTERED'),p_batch_rules.contract_status)),
3461                       lse_id (i),
3462                       'N',
3463                       1,
3464                       fnd_global.user_id,
3465                       SYSDATE,
3466                       fnd_global.user_id,
3467                       SYSDATE,
3468                       0,
3469                       'N',
3470                       0,
3471                       srv_curr (i),
3472                       fnd_global.user_id,
3473                       new_sdt (i),
3474                       new_edt (i),
3475                       srv_pl (i),
3476 
3477 
3478 validate_account_id(nvl(p_batch_rules.bill_account_id,p_batch_rules.new_customer_id),p_batch_rules.new_party_id,org_id (i)),
3479                       get_address(p_batch_rules.bill_address_id,
3480                                        nvl(p_batch_rules.bill_account_id,p_batch_rules.new_customer_id),
3481                                        p_batch_rules.new_party_id,
3482                                        'BILL_TO',
3483                                        org_id (i))
3484                       ,
3485                       p_batch_rules.invoicing_rule,
3486                       renewal_type (i),
3487                       get_address(p_batch_rules.Ship_address_id,
3488                                   nvl(p_batch_rules.Ship_account_id,p_batch_rules.new_customer_id),
3489                                   p_batch_rules.new_party_id,
3490                                   'SHIP_TO',
3491                                   org_id (i)),
3492                       Oks_setup_util_pub.Get_Annualized_Factor(new_sdt(i),
3493                                new_edt(i),
3494                                lse_id(i))
3495 
3496                      );
3497       fnd_file.put_line(fnd_file.log,'(OKS) -> Created okc line table records sucessfully');
3498 
3499       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3500       THEN
3501           fnd_log.STRING (fnd_log.level_event,
3502                          g_module_current || 'oks_mass_update.create_contract_Line',
3503                          'After insert into okc_k_lines_b table ');
3504       END IF;
3505 
3506 
3507       -- insert into okc tl table
3508       FOR lang_i IN
3509          okc_util.g_language_code.FIRST .. okc_util.g_language_code.LAST
3510       LOOP
3511          FORALL i IN 1 .. l_tabsize
3512             INSERT INTO okc_k_lines_tl
3513                         (ID,
3514                          LANGUAGE,
3515                          source_lang,
3516                          sfwt_flag,
3517                          NAME,
3518                          item_description,
3519                          created_by,
3520                          creation_date,
3521                          last_updated_by,
3522                          last_update_date,
3523                          last_update_login
3524                         )
3525                  VALUES (srvline_id (i),
3526                          okc_util.g_language_code (lang_i),
3527                          okc_util.get_userenv_lang,
3528                          'N',
3529                          null,
3530                          null,
3531                          fnd_global.user_id,
3532                          SYSDATE,
3533                          fnd_global.user_id,
3534                          SYSDATE,
3535                          fnd_global.user_id
3536                         );
3537       END LOOP;
3538       fnd_file.put_line(fnd_file.log,'(OKS) -> Created okc tl table records sucessfully');
3539 
3540       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3541       THEN
3542           fnd_log.STRING (fnd_log.level_event,
3543                          g_module_current || 'oks_mass_update.create_contract_Line',
3544                          'After insert into okc_k_lines_tl table ');
3545       END IF;
3546 
3547 -- create item record in okc_k_items
3548       FORALL i IN 1 .. l_tabsize
3549          INSERT INTO okc_k_items
3550                      (ID,
3551                       cle_id,
3552                       --chr_id,
3553                       cle_id_for,
3554                       dnz_chr_id,
3555                       object1_id1,
3556                       object1_id2,
3557                       jtot_object1_code,
3558                       uom_code,
3559                       exception_yn,
3560                       number_of_items,
3561                       object_version_number,
3562                       created_by,
3563                       creation_date,
3564                       last_updated_by,
3565                       last_update_date,
3566                       last_update_login,
3567                       upg_orig_system_ref,
3568                       upg_orig_system_ref_id,
3569                       priced_item_yn,
3570                       request_id,
3571                       program_application_id,
3572                       program_id,
3573                       program_update_date
3574                      )
3575               VALUES (okc_p_util.raw_to_number (SYS_GUID ()),
3576                       srvline_id (i),
3577                       --contract_id (i),
3578                       NULL,
3579                       contract_id (i),
3580                       srv_itm (i),
3581                       srv_invorg (i),
3582                       srv_jtot_code (i),
3583                       uom_code (i),
3584                       'N',
3585                       number_of_items (i),
3586                       1,
3587                       fnd_global.user_id,
3588                       SYSDATE,
3589                       fnd_global.user_id,
3590                       SYSDATE,
3591                       fnd_global.login_id,
3592                       NULL,
3593                       NULL,
3594                       NULL,
3595                       NULL,
3596                       NULL,
3597                       NULL,
3598                       NULL
3599                      );
3600 
3601       fnd_file.put_line(fnd_file.log,'(OKS) -> Created okc item records sucessfully');
3602 
3603       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3604       THEN
3605           fnd_log.STRING (fnd_log.level_event,
3606                          g_module_current || 'oks_mass_update.create_contract_Line',
3607                          'After insert into okc_k_items table ');
3608       END IF;
3609 
3610       -- create oks line
3611       FORALL i IN 1 .. l_tabsize
3612          INSERT INTO oks_k_lines_b
3613                      (ID,
3614                       cle_id,
3615                       dnz_chr_id,
3616                       acct_rule_id,
3617                       tax_code,
3618                       object_version_number,
3619                       created_by,
3620                       creation_date,
3621                       last_updated_by,
3622                       last_update_date,
3623                       last_update_login,
3624                       coverage_id,
3625                       standard_cov_yn,
3626                       price_uom
3627                      )
3628               VALUES (oks_id (i),
3629                       srvline_id (i),
3630                       contract_id (i),
3631                       p_batch_rules.accounting_rule,
3632                       tax_code (i),
3633                       1,
3634                       fnd_global.user_id,
3635                       SYSDATE,
3636                       fnd_global.user_id,
3637                       SYSDATE,
3638                       fnd_global.login_id,
3639                       coverage_id (i),
3640                       stand_cov_yn (i),
3641                       price_uom(i)
3642                      );
3643 
3644       fnd_file.put_line(fnd_file.log,'(OKS) -> Created oks line table records sucessfully');
3645 
3646       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3647       THEN
3648           fnd_log.STRING (fnd_log.level_event,
3649                          g_module_current || 'oks_mass_update.create_contract_Line',
3650                          'After insert into oks_lines table ');
3651       END IF;
3652       -- insert invoice text in oks tl table
3653       FOR lang_i IN
3654          okc_util.g_language_code.FIRST .. okc_util.g_language_code.LAST
3655       LOOP
3656          FORALL i IN 1 .. l_tabsize
3657             INSERT INTO oks_k_lines_tl
3658                         (ID,
3659                          LANGUAGE,
3660                          source_lang,
3661                          sfwt_flag,
3662                          invoice_text,
3663                          created_by,
3664                          creation_date,
3665                          last_updated_by,
3666                          last_update_date,
3667                          last_update_login
3668                         )
3669                  VALUES (oks_id (i),
3670                          okc_util.g_language_code (lang_i),
3671                          okc_util.get_userenv_lang,
3672                          'N',
3673                          (substr(srv_inv_text(i),1,instr(srv_inv_text(i),':',1,1))|| new_sdt (i)||' - '|| new_edt (i)),
3674                          fnd_global.user_id,
3675                          SYSDATE,
3676                          fnd_global.user_id,
3677                          SYSDATE,
3678                          fnd_global.user_id
3679                         );
3680       END LOOP;
3681 
3682       fnd_file.put_line(fnd_file.log,'(OKS) -> Created oks tl table records sucessfully');
3683 
3684       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3685       THEN
3686           fnd_log.STRING (fnd_log.level_event,
3687                          g_module_current || 'oks_mass_update.create_contract_Line',
3688                          'After insert into okc_lines_tl table ');
3689       END IF;
3690 
3691       OPEN get_line_salescredits_csr;
3692 
3693       FETCH get_line_salescredits_csr
3694       BULK COLLECT INTO srvline_id,
3695              contract_id,
3696              ctc_id,
3697              sales_credit_type_id1,
3698              PERCENT,
3699              sales_group_id;
3700 
3701       CLOSE get_line_salescredits_csr;
3702       IF srvline_id.count > 0 THEN -- Added for Bug#14183916
3703       FORALL i IN 1 .. srvline_id.COUNT
3704             INSERT INTO oks_k_sales_credits
3705                         (ID,
3706                          PERCENT,
3707                          sales_group_id,
3708                          chr_id,
3709                          cle_id,
3710                          ctc_id,
3711                          sales_credit_type_id1,
3712                          sales_credit_type_id2,
3713                          object_version_number,
3714                          created_by,
3715                          creation_date,
3716                          last_updated_by,
3717                          last_update_date
3718                         )
3719                  VALUES (okc_p_util.raw_to_number (SYS_GUID ()),
3720                          PERCENT (i),
3721                          sales_group_id (i),
3722                          contract_id (i),
3723                          srvline_id(i),
3724                          ctc_id (i),
3725                          sales_credit_type_id1 (i),
3726                          '#',
3727                          1,
3728                          fnd_global.user_id,
3729                          SYSDATE,
3730                          fnd_global.user_id,
3731                          SYSDATE
3732                         );
3733          fnd_file.put_line(fnd_file.log,'(OKS) -> Created sales credits sucessfully');
3734 
3735          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3736          THEN
3737               fnd_log.STRING (fnd_log.level_event,
3738                              g_module_current || 'oks_mass_update.create_contract_header',
3739                              'AFter inserting sales credits for header');
3740          END IF;
3741        END IF; --For Bug#14183916
3742       END IF;
3743       x_return_status := l_return_status;
3744    EXCEPTION
3745       WHEN g_exception_halt_validation
3746       THEN
3747          x_return_status := l_return_status;
3748          fnd_file.put_line(fnd_file.log,' Error while creating the service lines : '
3749          || SQLCODE||':'|| SQLERRM );
3750          NULL;
3751       WHEN OTHERS
3752       THEN
3753          x_return_status := okc_api.g_ret_sts_unexp_error;
3754          fnd_file.put_line(fnd_file.log,' Error while creating the service lines : '
3755          || SQLCODE||':'|| SQLERRM );
3756          okc_api.set_message (g_app_name,
3757                               g_unexpected_error,
3758                               g_sqlcode_token,
3759                               SQLCODE,
3760                               g_sqlerrm_token,
3761                               SQLERRM
3762                              );
3763    END create_contract_line;
3764 
3765    -------*  Procedure create_contract_subline *---------
3766    -- Procedure to create the contract subline
3767    -- which will create records in okc and oks lines tables
3768    -- also will create billing schedule for each associated
3769    -- service line.
3770    ------------------------------------------------------
3771 
3772    PROCEDURE create_contract_subline (
3773       p_api_version              IN       NUMBER,
3774       p_batch_rules              IN       batch_rules_rec_type,
3775       p_transfer_date            IN       DATE,
3776       x_return_status            OUT NOCOPY VARCHAR2,
3777       x_msg_count                OUT NOCOPY NUMBER,
3778       x_msg_Data                 OUT NOCOPY VARCHAR2
3779    )
3780    IS
3781       CURSOR get_subline_details_csr
3782       IS
3783          SELECT temp.new_subline_id subline_id,
3784                 temp.new_start_date subline_sdate,
3785                 temp.new_end_date subline_edate,
3786                 temp.new_serviceline_id srvline_id,
3787                 temp.new_contract_id contract_id,
3788                 temp.instance_id instance_id,
3789                 itm.number_of_items number_of_items,
3790                 itm.uom_code uom_code,
3791                 kl.lse_id lse_id,
3792                 kl.line_renewal_type_code renewal_type,
3793                 kl.currency_code urr_code,
3794                 kl.price_unit unit_price,
3795                 DECODE(st.ste_code, 'CANCELLED',Negotiated_amount(kl.start_date,kl.end_date,ks.price_uom,kh.period_type,kh.period_start,temp.new_start_date,kl.price_negotiated, kl.currency_code ) ,
3796                        (temp.amount - kl.price_negotiated)) price_negotiated,
3797                 ks.tax_code tax_code,
3798                 Ks.invoice_text,
3799                 (CASE
3800                     WHEN (temp.new_serviceline_id <>
3801                              (LAG (temp.new_serviceline_id) OVER (ORDER BY temp.new_serviceline_id)
3802                              )
3803                          )
3804                        THEN get_line_number ('NEW')
3805                     ELSE get_line_number ('OLD')
3806                  END
3807                 ) line_number,
3808                 kl1.start_date srv_sdate,
3809                 kl1.end_date srv_edate,
3810                 st.ste_code subline_sts,
3811                 (SELECT okc_p_util.raw_to_number (SYS_GUID ())
3812                  FROM okc_k_lines_b WHERE id = subline_id) oks_id,
3813                  ks.price_uom,
3814                  ks.toplvl_price_qty,
3815                  ks.toplvl_uom_code
3816 
3817            FROM oks_instance_k_dtls_temp temp,
3818                 okc_k_lines_b kl,
3819                 okc_k_lines_b kl1,
3820                 okc_k_items itm,
3821                 oks_k_lines_v ks,
3822                 okc_statuses_b st,
3823                 oks_k_headers_b kh
3824           WHERE temp.subline_id = kl.ID
3825             AND temp.new_subline_id IS NOT NULL
3826             AND itm.cle_id = kl.ID
3827             AND itm.jtot_object1_code IN ('OKX_CUSTPROD')
3828             AND ks.cle_id(+) = kl.ID
3829             AND kl1.ID = temp.new_serviceline_id
3830             AND st.code = kl.sts_code
3831             And kl.dnz_chr_id = Kh.chr_Id;
3832 
3833       CURSOR get_billfreq_csr (
3834          p_bf_id                             NUMBER
3835       )
3836       IS
3837          SELECT billing_type,
3838                 INTERVAL,
3839                 interface_offset,
3840                 invoice_offset,
3841                 billing_level
3842            FROM oks_billing_profiles_b
3843           WHERE ID = p_bf_id;
3844 
3845       subline_id         okc_datatypes.numbertabtyp;
3846       subline_sdate      okc_datatypes.datetabtyp;
3847       subline_edate      okc_datatypes.datetabtyp;
3848       srvline_id         okc_datatypes.numbertabtyp;
3849       contract_id        okc_datatypes.numbertabtyp;
3850       instance_id        okc_datatypes.numbertabtyp;
3851       number_of_items    okc_datatypes.numbertabtyp;
3852       uom_code           okc_datatypes.var3tabtyp;
3853       lse_id             okc_datatypes.numbertabtyp;
3854       renewal_type       okc_datatypes.var30tabtyp;
3855       price_uom          okc_datatypes.var30tabtyp;
3856       toplvl_uom          okc_datatypes.var30tabtyp;
3857 
3858       toplvl_price       okc_datatypes.numbertabtyp;
3859 
3860       line_date_renewed  okc_datatypes.datetabtyp;
3861       subline_curr       okc_datatypes.var15tabtyp;
3862       unit_price         okc_datatypes.numbertabtyp;
3863       tax_code           okc_datatypes.numbertabtyp;
3864       prod_name          okc_datatypes.var450tabtyp;
3865       prod_desc          okc_datatypes.var450tabtyp;
3866       line_number        okc_datatypes.numbertabtyp;
3867       price_negotiated   okc_datatypes.numbertabtyp;
3868       srv_sdate          okc_datatypes.datetabtyp;
3869       srv_edate          okc_datatypes.datetabtyp;
3870       oks_id             okc_datatypes.numbertabtyp;
3871       subline_sts        okc_datatypes.var30tabtyp;
3872       sl_inv_text        var2000tabtyp;
3873       l_tabsize          NUMBER;
3874       -- Billing variables
3875       l_billing_rec      billing_rec_type;
3876       l_msg_count        NUMBER;
3877       l_msg_data         VARCHAR2 (2000);
3878       l_return_status    VARCHAR2 (1)               := 'S';
3879    BEGIN
3880       l_return_status := okc_api.g_ret_sts_success;
3881 
3882       l_lineno_new := 0;
3883       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3884       THEN
3885           fnd_log.STRING (fnd_log.level_event,
3886                          g_module_current || 'oks_mass_update.create_contract_subLine',
3887                          'Begin');
3888       END IF;
3889 
3890       x_return_status := 'S';
3891 
3892       OPEN get_subline_details_csr;
3893 
3894       FETCH get_subline_details_csr
3895       BULK COLLECT INTO subline_id,
3896              subline_sdate,
3897              subline_edate,
3898              srvline_id,
3899              contract_id,
3900              instance_id,
3901              number_of_items,
3902              uom_code,
3903              lse_id,
3904              renewal_type,
3905              subline_curr,
3906              unit_price,
3907              price_negotiated,
3908              tax_code,
3909              sl_inv_text,
3910              line_number,
3911              srv_sdate,
3912              srv_edate,
3913              subline_sts,
3914              oks_id,
3915              price_uom,
3916              toplvl_price,
3917              toplvl_uom
3918              ;
3919 
3920       CLOSE get_subline_details_csr;
3921 
3922       IF subline_id.COUNT > 0
3923       THEN
3924 
3925       l_tabsize := subline_id.COUNT;
3926       FORALL i IN 1 .. l_tabsize
3927          INSERT INTO okc_k_lines_b
3928                      (ID,
3929                       line_number,
3930                       --chr_id,
3931                       cle_id,
3932                       dnz_chr_id,
3933                       display_sequence,
3934                       sts_code,
3935                       lse_id,
3936                       exception_yn,
3937                       object_version_number,
3938                       created_by,
3939                       creation_date,
3940                       last_updated_by,
3941                       last_update_date,
3942                       price_negotiated,
3943                       price_level_ind,
3944                       price_unit,
3945                       currency_code,
3946                       last_update_login,
3947                       start_date,
3948                       end_date,
3949                       line_renewal_type_code,
3950                       annualized_factor
3951                      )
3952               VALUES (subline_id (i),
3953                       line_number (i),
3954                       --contract_id (i),
3955                       srvline_id (i),
3956                       contract_id (i),
3957                       2,
3958                       get_line_status(lse_id(i),subline_sdate (i),subline_edate (i),subline_sts(i),p_batch_rules.contract_status),
3959                      -- DECODE(lse_id(i),18,get_status(subline_sdate (i),subline_edate (i)),
3960                      --        DECODE(subline_sts(i),'ENTERED',get_status_code('ENTERED'),p_batch_rules.contract_status)),
3961                       lse_id (i),
3962                       'N',
3963                       1,
3964                       fnd_global.user_id,
3965                       SYSDATE,
3966                       fnd_global.user_id,
3967                       SYSDATE,
3968                       NVL(price_negotiated (i),0),                -- price_negotiated
3969                       'Y',
3970                       NVL(unit_price (i),0),                            -- unit price
3971                       subline_curr (i),
3972                       fnd_global.user_id,
3973                       subline_sdate (i),
3974                       subline_edate (i),
3975                       renewal_type (i),
3976                       Oks_setup_util_pub.Get_Annualized_Factor(subline_sdate (i),
3977                                subline_edate (i),
3978                                lse_id(i))
3979 
3980 
3981                      );
3982       fnd_file.put_line(fnd_file.log,'(OKS) -> Created okc line table records sucessfully');
3983 
3984       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
3985       THEN
3986          fnd_log.STRING (fnd_log.level_event,
3987                          g_module_current || 'oks_mass_update.create_contract_Line',
3988                          'after insert into okc_k_lines table');
3989       END IF;
3990 
3991       FOR lang_i IN
3992          okc_util.g_language_code.FIRST .. okc_util.g_language_code.LAST
3993       LOOP
3994          FORALL i IN 1 .. l_tabsize
3995             INSERT INTO okc_k_lines_tl
3996                         (ID,
3997                          LANGUAGE,
3998                          source_lang,
3999                          sfwt_flag,
4000                          NAME,
4001                          item_description,
4002                          created_by,
4003                          creation_date,
4004                          last_updated_by,
4005                          last_update_date,
4006                          last_update_login
4007                         )
4008                  VALUES (subline_id (i),
4009                          okc_util.g_language_code (lang_i),
4010                          okc_util.get_userenv_lang,
4011                          'N',
4012                          null,
4013                          null,
4014                          fnd_global.user_id,
4015                          SYSDATE,
4016                          fnd_global.user_id,
4017                          SYSDATE,
4018                          fnd_global.user_id
4019                         );
4020       END LOOP;
4021       fnd_file.put_line(fnd_file.log,'(OKS) -> Created okc line tl table records sucessfully');
4022 
4023       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4024       THEN
4025          fnd_log.STRING (fnd_log.level_event,
4026                          g_module_current || 'oks_mass_update.create_contract_Line',
4027                          'after insert into okc_k_lines_tl table');
4028       END IF;
4029 
4030       -- create item record in okc_k_items
4031       FORALL i IN 1 .. l_tabsize
4032          INSERT INTO okc_k_items
4033                      (ID,
4034                       cle_id,
4035                       --chr_id,
4036                       cle_id_for,
4037                       dnz_chr_id,
4038                       object1_id1,
4039                       object1_id2,
4040                       jtot_object1_code,
4041                       uom_code,
4042                       exception_yn,
4043                       number_of_items,
4044                       object_version_number,
4045                       created_by,
4046                       creation_date,
4047                       last_updated_by,
4048                       last_update_date,
4049                       last_update_login,
4050                       upg_orig_system_ref,
4051                       upg_orig_system_ref_id,
4052                       priced_item_yn,
4053                       request_id,
4054                       program_application_id,
4055                       program_id,
4056                       program_update_date
4057                      )
4058               VALUES (okc_p_util.raw_to_number (SYS_GUID ()),
4059                       subline_id (i),
4060                       --contract_id (i),
4061                       NULL,
4062                       contract_id (i),
4063                       instance_id (i),
4064                       '#',
4065                       'OKX_CUSTPROD',
4066                       uom_code (i),
4067                       'N',
4068                       number_of_items (i),
4069                       1,
4070                       fnd_global.user_id,
4071                       SYSDATE,
4072                       fnd_global.user_id,
4073                       SYSDATE,
4074                       fnd_global.user_id,
4075                       NULL,
4076                       NULL,
4077                       NULL,
4078                       NULL,
4079                       NULL,
4080                       NULL,
4081                       NULL
4082                      );
4083       fnd_file.put_line(fnd_file.log,'(OKS) -> Created okc items table records sucessfully');
4084 
4085       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4086       THEN
4087          fnd_log.STRING (fnd_log.level_event,
4088                          g_module_current || 'oks_mass_update.create_contract_Line',
4089                          'after insert into okc_k_items table');
4090       END IF;
4091 
4092       -- create oks line
4093       FORALL i IN 1 .. l_tabsize
4094          INSERT INTO oks_k_lines_b
4095                      (ID,
4096                       cle_id,
4097                       dnz_chr_id,
4098                       tax_code,
4099                       price_uom,
4100                       toplvl_price_qty,
4101                       toplvl_uom_code,
4102                       object_version_number,
4103                       created_by,
4104                       creation_date,
4105                       last_updated_by,
4106                       last_update_date,
4107                       last_update_login
4108                      )
4109               VALUES (oks_id (i),
4110                       subline_id (i),
4111                       contract_id (i),
4112                       tax_code (i),
4113                       price_uom(i),
4114                       toplvl_price(i),
4115                       toplvl_uom(i),
4116                       1,
4117                       fnd_global.user_id,
4118                       SYSDATE,
4119                       fnd_global.user_id,
4120                       SYSDATE,
4121                       fnd_global.user_id
4122                      );
4123       fnd_file.put_line(fnd_file.log,'(OKS) -> Created oks line table records sucessfully');
4124 
4125       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4126       THEN
4127          fnd_log.STRING (fnd_log.level_event,
4128                          g_module_current || 'oks_mass_update.create_contract_Line',
4129                          'after insert into oks_k_lines table');
4130       END IF;
4131 
4132       FOR lang_i IN
4133          okc_util.g_language_code.FIRST .. okc_util.g_language_code.LAST
4134       LOOP
4135          FORALL i IN 1 .. l_tabsize
4136             INSERT INTO oks_k_lines_tl
4137                         (ID,
4138                          LANGUAGE,
4139                          source_lang,
4140                          sfwt_flag,
4141                          status_text,
4142                          invoice_text,
4143                          created_by,
4144                          creation_date,
4145                          last_updated_by,
4146                          last_update_date,
4147                          last_update_login
4148                         )
4149                  VALUES (oks_id (i),
4150                          okc_util.g_language_code (lang_i),
4151                          okc_util.get_userenv_lang,
4152                          'N',
4153                          'Subline created from transfers',
4154                          (substr(sl_inv_text(i),1,instr(sl_inv_text(i),':',1,3))||subline_sdate(i)||' - '|| subline_edate(i)),
4155                          fnd_global.user_id,
4156                          SYSDATE,
4157                          fnd_global.user_id,
4158                          SYSDATE,
4159                          fnd_global.user_id
4160                         );
4161       END LOOP;
4162 
4163       fnd_file.put_line(fnd_file.log,'(OKS) -> Created oks line tl table records sucessfully');
4164 
4165       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4166       THEN
4167          fnd_log.STRING (fnd_log.level_event,
4168                          g_module_current || 'oks_mass_update.create_contract_Line',
4169                          'after insert into oks_k_lines_tl table');
4170       END IF;
4171 
4172 
4173 
4174 
4175       END IF;
4176       x_return_status := l_return_status;
4177    EXCEPTION
4178       WHEN g_exception_halt_validation
4179       THEN
4180          x_return_status := l_return_status;
4181          fnd_file.put_line(fnd_file.log,' Error while creating the sublines : '
4182          || SQLCODE||':'|| SQLERRM );
4183          NULL;
4184       WHEN OTHERS
4185       THEN
4186          x_return_status := okc_api.g_ret_sts_unexp_error;
4187          fnd_file.put_line(fnd_file.log,' Error while creating the sublines : '
4188          || SQLCODE||':'|| SQLERRM );
4189          okc_api.set_message (g_app_name,
4190                               g_unexpected_error,
4191                               g_sqlcode_token,
4192                               SQLCODE,
4193                               g_sqlerrm_token,
4194                               SQLERRM
4195                              );
4196    END create_contract_subline;
4197 
4198 
4199 
4200 ---------* Procedure to Terminate Cancel Header  *-----------
4201 -------------------------------------------------------------
4202 
4203 Procedure Teminate_Cancel_Header
4204 (
4205    p_Contract_status  Varchar2,
4206    contract_id     Number,
4207    Hdr_start_date  Date,
4208    Term_cancel_source Varchar2,
4209    Termination_reason Varchar2,
4210    Cancel_reason Varchar2,
4211    x_return_status  Out NOCOPY Varchar2,
4212    x_msg_data       Out NOCOPY Varchar2,
4213    x_msg_count      Out NOCOPY Number
4214 ) Is
4215       --Contract Header
4216       l_chrv_tbl_in             okc_contract_pub.chrv_tbl_type;
4217       l_chrv_tbl_out            okc_contract_pub.chrv_tbl_type;
4218       l_cancel_date             Date;
4219       l_term_date               Date;
4220       l_return_status           Varchar2(1);
4221 
4222 Begin
4223                l_return_status := okc_api.g_ret_sts_success;
4224 
4225                l_chrv_tbl_in.DELETE;
4226 
4227                IF get_ste_code(p_Contract_Status) = 'ENTERED'
4228                THEN
4229                   oks_ib_util_pvt.check_termcancel_lines
4230                                                 (p_line_id        => contract_id,
4231                                                  p_line_type      => 'TL',
4232                                                  p_txn_type       => 'C',
4233                                                  x_date           => l_cancel_date
4234                                                 );
4235 
4236                   IF l_cancel_date IS NOT NULL
4237                   THEN
4238 
4239                      fnd_file.put_line(fnd_file.log,'(OKS) -> Cancel the Header = ( '
4240                                         || contract_id  ||' ) with date = ( ' || l_cancel_date||' )' );
4241 
4242                      oks_change_status_pvt.Update_header_status(
4243                                x_return_status      => l_return_status,
4244                                x_msg_data           => x_msg_data,
4245                                x_msg_count          => x_msg_count,
4246                                p_init_msg_list      => 'F',
4247                                p_id                 => contract_id ,
4248                                p_new_sts_code       => get_status_code('CANCELLED'),--code fix for bug 6350309
4249                                p_canc_reason_code   => Cancel_reason, --batch_rules_rec.termination_reason_code,
4250                                p_old_sts_code       => P_Contract_Status,
4251                                p_comments           => null,
4252                                p_term_cancel_source => Term_cancel_source,
4253                                p_date_cancelled     => l_cancel_date,
4254                                p_validate_status    => 'N');
4255 
4256                     fnd_file.put_line(fnd_file.log,'(OKS) -> Update contract Header status = ( '
4257                                        || l_return_status || ' )');
4258 
4259                     IF NOT l_return_status = okc_api.g_ret_sts_success
4260                     THEN
4261                        RAISE g_exception_halt_validation;
4262                     END IF;
4263 
4264                   END IF;
4265                ELSE
4266                   oks_ib_util_pvt.check_termcancel_lines
4267                                                 (p_line_id        => Contract_id,
4268                                                  p_line_type      => 'TL',
4269                                                  p_txn_type       => 'T',
4270                                                  x_date           => l_term_date
4271                                                 );
4272 
4273                   IF l_term_date IS NOT NULL
4274                   THEN
4275                      l_chrv_tbl_in (1).ID              := contract_id ;
4276                      l_chrv_tbl_in (1).date_terminated := l_term_date;
4277                      l_chrv_tbl_in (1).trn_code        := termination_reason;
4278                      IF trunc(hdr_start_date) <= trunc(sysdate) then
4279 
4280                           If trunc(l_term_date) <= trunc(sysdate) Then
4281                              l_chrv_tbl_in (1).sts_code    := get_status_code('TERMINATED');
4282                           End If;
4283                      End If;
4284 
4285                      fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate the Header ( = '
4286                                         || contract_id  ||' ) with date = ( ' || l_term_date || ' )');
4287 
4288                      okc_contract_pub.update_contract_header
4289                                       (p_api_version            => l_api_version,
4290                                        p_init_msg_list          => l_init_msg_list,
4291                                        p_restricted_update      => okc_api.g_true,
4292                                        x_return_status          => l_return_status,
4293                                        x_msg_count              => x_msg_count,
4294                                        x_msg_data               => x_msg_data,
4295                                        p_chrv_tbl               => l_chrv_tbl_in,
4296                                        x_chrv_tbl               => l_chrv_tbl_out
4297                                       );
4298                     fnd_file.put_line(fnd_file.log,'(OKS) -> Update contract Header status = ( '
4299                                        || l_return_status || ' )');
4300 
4301                     IF NOT l_return_status = okc_api.g_ret_sts_success
4302                     THEN
4303                        RAISE g_exception_halt_validation;
4304                     END IF;
4305 
4306                     END IF;
4307                END IF;
4308     x_return_status := l_return_status;
4309     EXCEPTION
4310       WHEN g_exception_halt_validation
4311       THEN
4312          x_return_status := l_return_status;
4313          fnd_file.put_line(fnd_file.log,' Error in Teminate_Cancel_Header: '
4314          || SQLCODE||':'|| SQLERRM );
4315          NULL;
4316       WHEN OTHERS
4317       THEN
4318          x_return_status := okc_api.g_ret_sts_unexp_error;
4319          fnd_file.put_line(fnd_file.log,' Error in Teminate_Cancel_Header: '
4320          || SQLCODE||':'|| SQLERRM );
4321          okc_api.set_message (g_app_name,
4322                               g_unexpected_error,
4323                               g_sqlcode_token,
4324                               SQLCODE,
4325                               g_sqlerrm_token,
4326                               SQLERRM
4327                              );
4328 
4329 End;
4330 
4331 
4332 
4333 
4334 ---------* Procedure to Terminate Cancel Top Line *----------
4335 --------------------------------------------------------------
4336 Procedure Teminate_Cancel_Topline
4337 (
4338    line_status  Varchar2,
4339    Service_line_id Number,
4340    contract_id     Number,
4341    line_start_date  Date,
4342    Term_cancel_source Varchar2,
4343    Termination_reason Varchar2,
4344    Cancel_reason Varchar2,
4345    x_return_status  Out NOCOPY  Varchar2,
4346    x_msg_data       Out NOCOPY Varchar2,
4347    x_msg_count      Out NOCOPY Number
4348 ) Is
4349           --Contract Line Table
4350       l_clev_tbl_in             okc_contract_pub.clev_tbl_type;
4351       l_clev_tbl_out            okc_contract_pub.clev_tbl_type;
4352       l_cancel_date   Date;
4353       l_term_date     Date;
4354       l_return_status Varchar2(1);
4355 
4356 
4357 Begin
4358 
4359               l_clev_tbl_in.DELETE;
4360 
4361                l_return_status := FND_API.G_RET_STS_SUCCESS;
4362 
4363                IF get_ste_code(line_status)= 'ENTERED'
4364                THEN
4365                   oks_ib_util_pvt.check_termcancel_lines
4366                                                  (p_line_id        => Service_line_id,
4367                                                   p_line_type      => 'SL',
4368                                                   p_txn_type       => 'C',
4369                                                   x_date           => l_cancel_date
4370                                                  );
4371 
4372                   IF l_cancel_date IS NOT NULL
4373                   THEN
4374 
4375                      fnd_file.put_line(fnd_file.log,'(OKS) -> Cancel the Line = ( '|| Service_line_id
4376                                         ||' ) with date = ( ' || l_cancel_date ||' )' );
4377 
4378                      oks_change_status_pvt.Update_line_status (
4379                               x_return_status       => l_return_status,
4380                               x_msg_data            => x_msg_data,
4381                               x_msg_count           => x_msg_count,
4382                               p_init_msg_list       => 'F',
4383                               p_id                  => contract_id ,
4384                               p_cle_id              => Service_line_id ,
4385                               p_new_sts_code        => get_status_code('CANCELLED'),--code fix for bug 6350309
4386                               p_canc_reason_code    => cancel_reason,--batch_rules_rec.termination_reason_code,
4387                               p_old_sts_code        => line_status ,
4388                               p_old_ste_code        => 'ENTERED',
4389                               p_new_ste_code        => 'CANCELLED',
4390                               p_term_cancel_source  => Term_cancel_source,
4391                               p_date_cancelled      => l_cancel_date,
4392                               p_comments            => NULL,
4393                               p_validate_status     => 'N') ;
4394 
4395                   IF NOT l_return_status = OKC_API.G_RET_STS_SUCCESS Then
4396                      Raise G_EXCEPTION_HALT_VALIDATION;
4397                   End if;
4398 
4399                   END IF;
4400                ELSE
4401                   oks_ib_util_pvt.check_termcancel_lines
4402                                                  (p_line_id        => Service_line_id,
4403                                                   p_line_type      => 'SL',
4404                                                   p_txn_type       => 'T',
4405                                                   x_date           => l_term_date
4406                                                  );
4407 
4408                   IF l_term_date IS NOT NULL
4409                   THEN
4410                      l_clev_tbl_in (1).ID                 := Service_line_id;
4411                      l_clev_tbl_in (1).date_terminated    := l_term_date;
4412                      l_clev_tbl_in (1).trn_code           := Termination_reason;
4413                      l_clev_tbl_in (1).term_cancel_source := Term_cancel_source;
4414                      If trunc(line_start_date) <= trunc(sysdate) Then
4415 
4416                           If trunc(l_term_date) <= trunc(sysdate) Then
4417                               l_clev_tbl_in (1).sts_code     := get_status_code('TERMINATED');
4418                           End If;
4419 
4420                      End If;
4421                      fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate the Line = ( '
4422                                         || Service_line_id ||' ) with date = ( ' || l_term_date ||' )' );
4423 
4424                      okc_contract_pub.update_contract_line
4425                                       (p_api_version            => l_api_version,
4426                                        p_init_msg_list          => l_init_msg_list,
4427                                        p_restricted_update      => okc_api.g_true,
4428                                        x_return_status          => l_return_status,
4429                                        x_msg_count              => x_msg_count,
4430                                        x_msg_data               => x_msg_data,
4431                                        p_clev_tbl               => l_clev_tbl_in,
4432                                        x_clev_tbl               => l_clev_tbl_out
4433                                       );
4434                      fnd_file.put_line(fnd_file.log,'(OKS) -> Update contract Line status = ( '
4435                                         || l_return_status ||' )' );
4436 
4437                      IF NOT l_return_status = okc_api.g_ret_sts_success
4438                      THEN
4439 
4440                         RAISE g_exception_halt_validation;
4441                      END IF;
4442 
4443                   END IF;
4444                END IF;
4445 
4446                x_return_status := l_return_status;
4447  EXCEPTION
4448       WHEN g_exception_halt_validation
4449       THEN
4450          x_return_status := l_return_status;
4451          fnd_file.put_line(fnd_file.log,' Error in Teminate_Cancel_Topline : '
4452          || SQLCODE||':'|| SQLERRM );
4453          NULL;
4454       WHEN OTHERS
4455       THEN
4456          x_return_status := okc_api.g_ret_sts_unexp_error;
4457          fnd_file.put_line(fnd_file.log,' Error in Teminate_Cancel_Topline: '
4458          || SQLCODE||':'|| SQLERRM );
4459          okc_api.set_message (g_app_name,
4460                               g_unexpected_error,
4461                               g_sqlcode_token,
4462                               SQLCODE,
4463                               g_sqlerrm_token,
4464                               SQLERRM
4465                              );
4466 
4467 
4468  End;
4469 
4470 PROCEDURE CREATE_COV_BILLSCHD
4471     (
4472      P_Contract_status      IN Varchar2,
4473      p_billing_profile_id   IN NUMBER,
4474      x_msg_count            OUT NOCOPY NUMBER,
4475      x_msg_data             OUT NOCOPY VARCHAR2,
4476      x_return_status        OUT NOCOPY VARCHAR2,
4477      Termination_reason     IN VARCHAR2,
4478      P_batch_id             IN Number,
4479      P_transfer_attachments IN VARCHAR2,
4480      P_Transfer_Notes       IN VARCHAR2
4481     )
4482     IS
4483 
4484 
4485     CURSOR get_srv_details_csr(p_contract_id Number)  IS
4486         Select Distinct temp.new_serviceline_Id
4487               ,temp.topline_id
4488               ,line.start_date
4489               ,line.end_date
4490               ,ks.coverage_id
4491               ,ks.standard_cov_yn
4492               ,ki.object1_id1 srv_itm
4493               ,St.ste_code
4494               ,kl.start_date
4495         From   Oks_instance_k_dtls_temp temp
4496              , okc_k_lines_b line
4497              , Okc_k_lines_b Kl
4498              , oks_k_lines_b Ks
4499              , Okc_k_items Ki
4500              , Okc_statuses_b St
4501         Where  line.id = temp.new_serviceline_id
4502         And    Kl.Id    = temp.topline_id
4503         And    Ks.cle_id = line.Id
4504         And    Ki.cle_id = Line.Id
4505         And    temp.new_contract_id = p_contract_id
4506         And    St.code = kl.sts_code;
4507 
4508    Cursor get_contract_csr Is
4509         Select distinct temp.new_contract_id
4510                , temp.contract_id
4511                , kh.authoring_org_id
4512                , kh.inv_organization_id
4513                , St.ste_code
4514                , Ost.ste_code
4515                ,Decode(kl.lse_id,18,'WARRANTY','OTHERS')
4516                ,Kh.qcl_id
4517                ,oKh.start_date
4518                ,ks.period_start
4519         From   OKs_instance_k_dtls_temp temp
4520              , Okc_k_headers_all_b Kh
4521              , Okc_k_headers_all_b OKH
4522              , Okc_statuses_b St
4523              , Okc_statuses_b OSt
4524              , Okc_k_lines_b Kl
4525              , Oks_k_headers_b Ks
4526         Where Kh.Id = temp.new_contract_id
4527         And   OKH.Id = temp.contract_id
4528         And   Ks.chr_id = Kh.id
4529         And   St.code = Kh.sts_code
4530         And   OSt.code = OKH.sts_code
4531         And   Kl.dnz_chr_id = temp.contract_id
4532         And   Kl.Id = temp.subline_id;
4533 
4534   CURSOR get_subline_details_csr(p_contract_id Number)  IS
4535         Select  temp.new_subline_Id
4536         From   Oks_instance_k_dtls_temp temp
4537         Where  temp.new_contract_id = p_contract_id;
4538       CURSOR get_csi_note_csr (
4539          p_batch_id                          NUMBER
4540       )
4541       IS
4542          SELECT DESCRIPTION --NAME
4543            FROM csi_mass_edit_entries_tl
4544           WHERE source_lang = USERENV ('LANG')
4545             AND entry_id = p_batch_id
4546             AND ROWNUM < 2;
4547 
4548       CURSOR l_ctr_csr (
4549          p_id   NUMBER
4550       )
4551       IS
4552          SELECT counter_group_id
4553            FROM cs_ctr_associations
4554           WHERE source_object_id = p_id;
4555 
4556        Cursor get_day_uom_code IS
4557        select uom_code
4558        from okc_time_code_units_b
4559        where tce_code='DAY'
4560        and quantity=1;
4561 
4562 
4563     srvline_id              okc_datatypes.numbertabtyp;
4564     subline_id              okc_datatypes.numbertabtyp;
4565     coverage_id             okc_datatypes.numbertabtyp;
4566     stand_cov_yn            okc_datatypes.var30tabtyp;
4567     line_status             okc_datatypes.var30tabtyp;
4568     Contract_status         okc_datatypes.var30tabtyp;
4569     Old_Contract_status     okc_datatypes.var30tabtyp;
4570     Contract_Type           okc_datatypes.var30tabtyp;
4571 
4572 
4573     srvitm_id               okc_datatypes.numbertabtyp;
4574     qcl_id                  okc_datatypes.numbertabtyp;
4575 
4576     old_srvline_id          okc_datatypes.numbertabtyp;
4577     org_id                  okc_datatypes.numbertabtyp;
4578     organization_id         okc_datatypes.numbertabtyp;
4579     contract_id             okc_datatypes.numbertabtyp;
4580     old_contract_id         okc_datatypes.numbertabtyp;
4581     new_sdt                 okc_datatypes.datetabtyp;
4582     new_edt                 okc_datatypes.datetabtyp;
4583     old_hdr_sdt             okc_datatypes.datetabtyp;
4584     old_line_sdt            okc_datatypes.datetabtyp;
4585     period_start            okc_datatypes.var30tabtyp;
4586     qa_contract_id          Number;
4587 
4588 
4589     l_rec               OKS_BILLING_PROFILES_PUB.billing_profile_rec;
4590     l_sll_tbl_out       OKS_BILLING_PROFILES_PUB.stream_level_tbl;
4591      l_inp_rec               okc_inst_cnd_pub.instcnd_inp_rec;
4592 
4593     l_sll_tbl           OKS_BILL_SCH.streamlvl_tbl;
4594     l_bil_sch_out_tbl   OKS_BILL_SCH.itembillsch_tbl;
4595     l_duration          Number;
4596     l_timeunit          Varchar2(30);
4597     l_bill_type         Varchar2(1);
4598     l_invoice_rule_id   Number;
4599     l_term_date         Date;
4600     l_cancel_date       Date;
4601     l_coverage_id       Number;
4602     l_ctr_grpid         Number;
4603     l_ctr_grp_id_template Number;
4604     l_ctr_grp_id_instance Number;
4605     l_return_status       Varchar2(1);
4606     G_RAIL_REC           OKS_TAX_UTIL_PVT.ra_rec_type;
4607     l_tax_inclusive_yn   Varchar2(1);
4608     l_tax_amount         Number;
4609     l_msg_tbl            okc_qa_check_pub.msg_tbl_type;
4610     l                    Number;
4611     l_count              Number :=1;
4612     l_ste_code           Varchar2(40);
4613     l_sts_code           Varchar2(40);
4614       -- workflow variabled
4615     l_wf_attributes           oks_wf_k_process_pvt.wf_attr_details;
4616     m                    Number;
4617 
4618       -- Valiables for notes
4619       l_jtf_note_id             NUMBER;
4620       l_jtf_note_contexts_tab   jtf_notes_pub.jtf_note_contexts_tbl_type;
4621       l_note_details            csi_mass_edit_entries_tl.Description%TYPE;
4622 
4623       l_uom_code         Varchar2(240);
4624     BEGIN
4625 
4626         l_return_status := FND_API.G_RET_STS_SUCCESS;
4627         OPEN get_contract_csr;
4628         FETCH get_contract_csr
4629         BULK COLLECT INTO
4630         Contract_id,
4631         old_contract_id,
4632         org_id,
4633         organization_id,
4634         Contract_status,
4635         Old_Contract_status,
4636         Contract_type,
4637         Qcl_id,
4638         old_hdr_sdt,
4639         Period_start;
4640         Close get_contract_csr;
4641 
4642         fnd_file.put_line(fnd_file.log,'in cov_bill ');
4643         IF Contract_id.Count > 0 THEN 	-- Added for Bug#14183916
4644         For K in Contract_id.first..Contract_id.last
4645         Loop
4646 
4647             okc_context.set_okc_org_context(org_id(k),organization_id(k));
4648             OPEN get_srv_details_csr(contract_id(k));
4649             FETCH get_srv_details_csr
4650             BULK COLLECT INTO
4651                   srvline_id,
4652                   old_srvline_id,
4653                   new_sdt,
4654                   new_edt,
4655                   coverage_id,
4656                   stand_cov_yn,
4657                   srvitm_id,
4658                   line_status,
4659                   old_line_sdt ;
4660             CLOSE get_srv_details_csr;
4661 
4662             FOR Line_ctr IN srvline_id.first..srvline_id.last LOOP
4663 
4664                 --Create Coverage
4665 
4666                 IF     coverage_id (Line_ctr) IS NOT NULL
4667                    AND NVL (stand_cov_yn (Line_ctr), 'N') = 'N'
4668                 THEN
4669                      fnd_file.put_line(fnd_file.log,'oldline_id'||old_srvline_id(Line_ctr));
4670                      fnd_file.put_line(fnd_file.log,'srvline_id'||srvline_id(Line_ctr));
4671                      fnd_file.put_line(fnd_file.log,'contract_id'||contract_id(k));
4672                      fnd_file.put_line(fnd_file.log,'org'||okc_context.get_okc_org_id);
4673                      fnd_file.put_line(fnd_file.log,'organization'||okc_context.get_okc_organization_id);
4674 
4675 
4676                      Oks_coverages_pub.create_adjusted_coverage(
4677                          p_api_version                   => 1.0,
4678                          p_init_msg_list                 => okc_api.g_false,
4679                          x_return_status                 => l_return_status,
4680                          x_msg_count                     => x_msg_count,
4681                          x_msg_data                      => x_msg_data,
4682                          p_source_contract_line_id       => old_srvline_id (Line_ctr),
4683                          p_target_contract_line_id       => srvline_id (Line_ctr),
4684                         x_Actual_coverage_id            => l_coverage_id
4685                      );
4686 
4687                      fnd_file.put_line(fnd_file.log,'(OKS) -> Create coverage for line = ( '
4688                      ||Line_ctr||'-> ' ||srvline_id (Line_ctr)||' ) status = ( '||l_return_status || ' )' );
4689 
4690                      IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4691                      THEN
4692                        fnd_log.STRING (fnd_log.level_event,
4693                              g_module_current || 'oks_mass_update.create_contract_Line',
4694                              'create coverage status = ('|| x_return_status || ')');
4695                      END IF;
4696                      IF NOT l_return_status = okc_api.g_ret_sts_success
4697                      THEN
4698 
4699                         RAISE g_exception_halt_validation;
4700                      Else
4701                            Update Oks_k_lines_b set coverage_id = l_coverage_id
4702                            Where cle_id = srvline_id (Line_ctr);
4703                      END IF;
4704 
4705 
4706                   END IF;
4707 
4708                      oks_coverages_pvt.create_k_coverage_ext
4709                                         (p_api_version           => 1.0,
4710                                          p_init_msg_list         => okc_api.g_false,
4711                                          p_src_line_id           => old_srvline_id (Line_ctr),
4712                                          p_tgt_line_id           => srvline_id (Line_ctr),
4713                                          x_return_status         => l_return_status,
4714                                          x_msg_count             => x_msg_count,
4715                                          x_msg_data              => x_msg_data
4716                                         );
4717                      fnd_file.put_line(fnd_file.log,'(OKS) -> Create standard coverage for line = ( '
4718                                ||Line_ctr||'-> ' ||srvline_id (Line_ctr)||' ) status = ( ' ||l_return_status || ' )' );
4719 
4720                      IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4721                      THEN
4722                        fnd_log.STRING (fnd_log.level_event,
4723                              g_module_current || 'oks_mass_update.create_contract_Line',
4724                              'create coverage extension status = ('|| x_return_status || ')');
4725                      END IF;
4726 
4727                      IF NOT l_return_status = okc_api.g_ret_sts_success
4728                      THEN
4729 
4730                         RAISE g_exception_halt_validation;
4731                      END IF;
4732 
4733 
4734                   l_ctr_grpid := NULL;
4735 
4736                   OPEN l_ctr_csr (srvitm_id (Line_ctr));
4737 
4738                   FETCH l_ctr_csr INTO l_ctr_grpid;
4739                   CLOSE l_ctr_csr;
4740 
4741                   -- Instantiate Counters
4742                   IF l_ctr_grpid IS NOT NULL
4743                   THEN
4744 
4745                      cs_counters_pub.autoinstantiate_counters
4746                              (p_api_version                    => 1.0,
4747                               p_init_msg_list                  => okc_api.g_false,
4748                               p_commit                         => 'F',
4749                               x_return_status                  => l_return_status,
4750                               x_msg_count                      => x_msg_count,
4751                               x_msg_data                       => x_msg_data,
4752                               p_source_object_id_template      => srvitm_id (Line_ctr),
4753                               p_source_object_id_instance      => srvline_id (Line_ctr),
4754                               x_ctr_grp_id_template            => l_ctr_grp_id_template,
4755                               x_ctr_grp_id_instance            => l_ctr_grp_id_instance
4756                              );
4757 
4758                          fnd_file.put_line(fnd_file.log,'(OKS) -> Instantiate counters for line = ( '
4759                                    ||Line_ctr||'-> ' ||srvline_id (Line_ctr)||', '|| srvitm_id (Line_ctr) ||' ) status = ( '||l_return_status || ' )' );
4760 
4761                          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4762                          THEN
4763                            fnd_log.STRING (fnd_log.level_event,
4764                                           g_module_current || 'oks_mass_update.create_contract_Line',
4765                                           'Instantiate counters status = ('|| l_return_status || ')');
4766                          END IF;
4767 
4768                      END IF;
4769 
4770                      IF NOT l_return_status = okc_api.g_ret_sts_success
4771                      THEN
4772                         okc_api.set_message (g_app_name,
4773                                     g_required_value,
4774                                     g_col_name_token,
4775                                     'Counter Instantiate (LINE)'
4776                                    );
4777                         RAISE g_exception_halt_validation;
4778                      END IF;
4779 
4780                      -- Instantiate the events
4781                      l_inp_rec.ins_ctr_grp_id := l_ctr_grp_id_instance;
4782                      l_inp_rec.tmp_ctr_grp_id := l_ctr_grp_id_template;
4783                      l_inp_rec.chr_id := contract_id (k);
4784                      l_inp_rec.cle_id := srvline_id (Line_ctr);
4785                      l_inp_rec.jtot_object_code := 'OKC_K_LINE';
4786                      l_inp_rec.inv_item_id := srvitm_id (Line_ctr);
4787                      okc_inst_cnd_pub.inst_condition
4788                                           (p_api_version          => 1.0,
4789                                            p_init_msg_list        => 'T',
4790                                            x_return_status        => l_return_status,
4791                                            x_msg_count            => x_msg_count,
4792                                            x_msg_data             => x_msg_data,
4793                                            p_instcnd_inp_rec      => l_inp_rec
4794                                           );
4795 
4796                      fnd_file.put_line(fnd_file.log,'(OKS) -> Instantiate events for line = ( '
4797                                ||Line_ctr||'-> ' ||srvline_id (Line_ctr)||' ) status = ( '||l_return_status || ' )' );
4798 
4799                      IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4800                      THEN
4801                        fnd_log.STRING (fnd_log.level_event,
4802                              g_module_current || 'oks_mass_update.create_contract_Line',
4803                              'create events status = ('|| l_return_status || ')');
4804                      END IF;
4805 
4806                      IF NOT l_return_status = okc_api.g_ret_sts_success
4807                      THEN
4808                         okc_api.set_message (g_app_name,
4809                                     g_required_value,
4810                                     g_col_name_token,
4811                                     'Event Instantiate (LINE)'
4812                                    );
4813                         RAISE g_exception_halt_validation;
4814                      END IF;
4815 
4816 
4817 
4818 
4819 
4820 
4821 
4822                 --Create Billing Schedule
4823                 fnd_file.put_line(fnd_file.log,'billing Profile'||p_billing_profile_id);
4824                 IF p_billing_profile_id is not null Then
4825                     l_rec.cle_id := srvline_id(Line_ctr);
4826                     l_rec.chr_id := contract_id(k);
4827                     l_rec.billing_profile_id := p_billing_profile_id;
4828                     l_rec.start_date := new_sdt(Line_ctr);
4829                     l_rec.end_date := new_edt(Line_ctr);
4830 
4831 
4832                     OKS_BILLING_PROFILES_PUB.get_billing_schedule(
4833                         p_api_version => 1.0,
4834                         p_init_msg_list => FND_API.G_FALSE,
4835                         p_billing_profile_rec => l_rec,
4836                         x_sll_tbl_out => l_sll_tbl_out,
4837                         x_return_status => l_return_status,
4838                         x_msg_count => x_msg_count,
4839                         x_msg_data => x_msg_data);
4840                         IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4841                         THEN
4842                           fnd_log.STRING (fnd_log.level_event,
4843                                  g_module_current || 'oks_mass_update.create_billing_schedule',
4844                                  'get_billing_schedule'|| x_return_status);
4845                         END IF;
4846                         IF NOT l_return_status = 'S'
4847                         THEN
4848 
4849                              RAISE g_exception_halt_validation;
4850                         END IF;
4851 
4852                        l_sll_tbl(1).cle_id := l_sll_tbl_out(1).cle_id;
4853                        l_sll_tbl(1).dnz_chr_id := contract_id(k);
4854                        l_sll_tbl(1).sequence_no := l_sll_tbl_out(1).seq_no;
4855                        l_sll_tbl(1).start_date := l_sll_tbl_out(1).start_date;
4856                        l_sll_tbl(1).level_periods := l_sll_tbl_out(1).target_quantity;
4857                        l_sll_tbl(1).uom_per_period := l_sll_tbl_out(1).duration;
4858                        l_sll_tbl(1).level_amount := l_sll_tbl_out(1).amount;
4859                        l_sll_tbl(1).invoice_offset_days := l_sll_tbl_out(1).invoice_offset;
4860                        l_sll_tbl(1).interface_offset_days := l_sll_tbl_out(1).interface_offset;
4861                        l_sll_tbl(1).uom_code := l_sll_tbl_out(1).timeunit;
4862                        l_bill_type           := nvl(l_sll_tbl_out(1).Billing_type,'T');
4863                        l_invoice_rule_id     := nvl(l_sll_tbl_out(1).Invoice_rule_id,-2);
4864 
4865                 End If;
4866                 If p_billing_profile_id is Null OR l_sll_tbl_out.count = 0 THEN
4867 
4868                   If Period_start(k) = 'CALENDAR' Then
4869 	                 Open get_day_uom_code;
4870 	                 Fetch get_day_uom_code into l_uom_code;
4871 	                 Close get_day_uom_code;
4872 
4873 
4874                       l_sll_tbl (1).cle_id                := srvline_id(Line_ctr);
4875                       l_sll_tbl (1).dnz_chr_id            := contract_id(k);
4876                       l_sll_tbl (1).sequence_no           := 1;
4877                       l_sll_tbl (1).level_periods         := 1;
4878                       l_sll_tbl (1).uom_code              := l_uom_code;
4879                       l_sll_tbl (1).uom_per_period        := new_edt(line_ctr)-new_sdt(line_ctr)+1;
4880                       l_sll_tbl (1).invoice_offset_days   := 0;
4881                       l_sll_tbl (1).interface_offset_days := 0;
4882                       l_sll_tbl (1).level_amount          := null;
4883                       l_bill_type                         := 'T';
4884                       l_invoice_rule_id                   := -2;
4885 
4886 
4887                   Else
4888                       okc_time_util_pub.get_duration
4889                                    (p_start_date         => trunc(new_sdt(Line_ctr)),
4890                                     p_end_date           => trunc(new_edt(Line_ctr)),
4891                                     x_duration           => l_duration,
4892                                     x_timeunit           => l_timeunit,
4893                                     x_return_status      => l_return_status
4894                                    );
4895                        IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4896                        THEN
4897                           fnd_log.STRING (fnd_log.level_event,
4898                              g_module_current || 'oks_mass_update.create_billing_schedule',
4899                              'get_duration'|| l_return_status);
4900                        END IF;
4901                        IF NOT l_return_status = 'S'
4902                        THEN
4903 
4904                                 RAISE g_exception_halt_validation;
4905                        END IF;
4906                       fnd_file.put_line(fnd_file.log,'cle_id'||srvline_id(Line_ctr)||'contract_ctr'||contract_id(k));
4907                       l_sll_tbl (1).cle_id                := srvline_id(Line_ctr);
4908                       l_sll_tbl (1).dnz_chr_id             := contract_id(k);
4909                       l_sll_tbl (1).sequence_no           := 1;
4910                       l_sll_tbl (1).level_periods         := 1;
4911                       l_sll_tbl (1).uom_code              := l_timeunit;
4912                       l_sll_tbl (1).uom_per_period        := l_duration;
4913                       l_sll_tbl (1).invoice_offset_days   := 0;
4914                       l_sll_tbl (1).interface_offset_days := 0;
4915                       l_sll_tbl (1).level_amount          := null;
4916                       l_bill_type                         := 'T';
4917                       l_invoice_rule_id                   := -2;
4918                   End If;
4919                 END IF;
4920 
4921                 IF l_sll_tbl.COUNT > 0 THEN
4922 
4923 
4924                     OKS_BILL_SCH.create_bill_sch_rules(
4925                             p_billing_type => l_bill_type,
4926                             p_sll_tbl => l_sll_tbl,
4927                             p_invoice_rule_id => l_Invoice_Rule_Id,
4928                             x_bil_sch_out_tbl => l_bil_sch_out_tbl,
4929                             x_return_status => l_return_status);
4930 
4931                    fnd_file.put_line(fnd_file.log,'(OKS) -> OKS_BILL_SCH.create_bill_sch_rules:'||l_return_status );
4932 
4933                     IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
4934                     THEN
4935                       fnd_log.STRING (fnd_log.level_event,
4936                              g_module_current || 'oks_mass_update.create_billing_schedule',
4937                              'create_bill_sch_rules'|| x_return_status);
4938                     END IF;
4939                     IF NOT l_return_status = 'S'
4940                     THEN
4941 
4942                         RAISE g_exception_halt_validation;
4943                     END IF;
4944 
4945                  END IF;
4946                  l_sll_tbl_out.delete;
4947                  l_sll_tbl.delete;
4948 
4949 
4950              END LOOP; --For Service Lines
4951 
4952 
4953             If Contract_type(k) <> 'WARRANTY' THEN
4954 
4955              -- Tax Calculation
4956 
4957                OPEN get_subline_details_csr(contract_id(k));
4958                FETCH get_subline_details_csr
4959                BULK COLLECT INTO
4960                   subline_id;
4961                CLOSE get_subline_details_csr;
4962                IF subline_id.count > 0 THEN --Added for Bug#14183916
4963                FOR subline_ctr IN subline_id.first..subline_id.last LOOP
4964 
4965                   l_tax_amount        := 0;
4966                   G_Rail_rec.Amount   := null;
4967                     OKS_TAX_UTIL_PVT.Get_Tax
4968                    (
4969 	           p_api_version      => 1.0,
4970                    p_init_msg_list    => OKC_API.G_TRUE,
4971                    p_chr_id           => contract_id(k),
4972                    p_cle_id           => subline_id(subline_ctr),
4973                    px_rail_rec        => G_RAIL_REC,
4974                    x_msg_count	      => x_msg_count,
4975                    x_msg_data	      => x_msg_data,
4976                    x_return_status    => l_return_status
4977                  );
4978 
4979                  IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4980                   fnd_log.string(FND_LOG.LEVEL_EVENT,G_MODULE_CURRENT||'.after_tax',
4981                       'oks_tax_util_pvt.get_tax(Return status = ' ||l_return_status || ')' );
4982                  END IF;
4983 
4984 
4985                  fnd_file.put_line(fnd_file.log,'(OKS) -> Tax Calculation Status :'||l_return_status );
4986                  fnd_file.put_line(fnd_file.log,'(OKS) -> Tax Calculation G_RAIL_REC.tax_value :'||G_RAIL_REC.tax_value);
4987 
4988                  l_tax_inclusive_yn   := G_RAIL_REC.AMOUNT_INCLUDES_TAX_FLAG ;
4989                  If G_RAIL_REC.AMOUNT_INCLUDES_TAX_FLAG = 'Y' THEN
4990                      l_tax_amount := 0 ;
4991                  Else
4992                      l_tax_amount  := Nvl(G_RAIL_REC.tax_value,0) ;
4993                  End If;
4994 
4995                  Update oks_k_lines_b
4996                  set tax_amount = l_tax_amount, tax_inclusive_yn = l_tax_inclusive_yn
4997                  Where cle_id = subline_id(subline_ctr );
4998 
4999                End loop;
5000                END IF; --Added for Bug#14183916
5001                Forall l in srvline_id.first..srvline_id.last
5002                Update oks_k_lines_b
5003                set tax_amount = (select nvl(sum(ks.tax_amount),0) from oks_k_lines_b ks, okc_k_lines_b kl
5004                                    where kl.cle_id = srvline_id(l) and ks.cle_id = kl.id)
5005                Where cle_id = srvline_id(l);
5006                End If;
5007 
5008 
5009                            fnd_file.put_line(fnd_file.log,'(OKS) -> Run QA Check, if Batch rules status = ( '
5010                                || p_contract_status || ' )'|| 'Active');
5011 
5012             -- Run QA Check and launch workflow for entered status contracts
5013             IF UPPER (P_contract_status) = 'ACTIVE'
5014             THEN
5015 
5016                If Contract_type(k) <> 'WARRANTY' THEN
5017 
5018                   IF old_contract_status(k) <> 'ENTERED'
5019                   THEN
5020 
5021 
5022                         fnd_file.put_line(fnd_file.log,'(OKS) -> Run QA Check for contract = ( '
5023                                      || contract_id (k)|| ' ) qcl id = ( '|| qcl_id(k) || ' )');
5024 
5025                         okc_qa_check_pub.execute_qa_check_list
5026                                           (p_api_version        => 1.0,
5027                                            p_init_msg_list      => okc_api.g_false,
5028                                            x_return_status      => l_return_status,
5029                                            x_msg_count          => x_msg_count,
5030                                            x_msg_data           => x_msg_data,
5031                                            p_qcl_id             => qcl_id(k),
5032                                            p_chr_id             => contract_id (k),
5033                                            x_msg_tbl            => l_msg_tbl
5034                                           );
5035 
5036                          fnd_file.put_line(fnd_file.log,'(OKS) -> Qa check status = ( '
5037                                      || l_return_status || ' ) qa message count = ( ' || l_msg_tbl.COUNT || ' )');
5038 
5039                          IF l_return_status <> okc_api.g_ret_sts_success
5040                          THEN
5041                             x_return_status := l_return_status;
5042                             RAISE g_exception_halt_validation;
5043                          END IF;
5044 
5045                          IF l_msg_tbl.COUNT > 0
5046                          THEN
5047 
5048                             l := l_msg_tbl.FIRST;
5049                             LOOP
5050 
5051                                IF l_msg_tbl (l).error_status = 'E'
5052                                THEN
5053                                  fnd_file.put_line(fnd_file.log,'(OKS) -> qa check failed, contract =  '
5054                             || l_msg_tbl (l).name);
5055                                  fnd_file.put_line(fnd_file.log,'(OKS) -> qa check failed, contract =  '
5056                             || l_msg_tbl (l).description);
5057 
5058                                   EXIT;
5059                                END IF;
5060 
5061                                EXIT WHEN l = l_msg_tbl.LAST;
5062                                l := l_msg_tbl.NEXT (l);
5063                             END LOOP;
5064                          END IF;
5065 
5066                          IF l_msg_tbl (l).error_status = 'E'
5067                          THEN
5068                             qa_contract_id  := contract_id (k);
5069 
5070 
5071                             fnd_file.put_line(fnd_file.log,'(OKS) -> qa check failed, contract = ( '
5072                             || contract_id (k)|| ' ) will be created in Entered status');
5073                           ELSE
5074                              qa_contract_id := Null;
5075                          END IF;
5076                       ELSE
5077                             qa_contract_id  := contract_id (k);
5078 
5079 
5080                             fnd_file.put_line(fnd_file.log,'(OKS) -> , contract = ( '
5081                                || contract_id (k) || ' ) will be created in Entered status');
5082 
5083                       END IF; -- status entered
5084                    ELSE
5085                            qa_contract_id := null;
5086                    END IF;
5087 
5088 
5089                   IF qa_contract_id Is Not NUll
5090                       THEN
5091                              oks_extwarprgm_pvt.get_sts_code ('ENTERED',
5092                                                 NULL,
5093                                                 l_ste_code,
5094                                                 l_sts_code
5095                                                );
5096 
5097                              UPDATE okc_k_headers_all_b
5098                              SET sts_code = l_sts_code,
5099                              date_approved = NULL,
5100                              date_signed = NULL
5101                              WHERE ID = qa_contract_id ;
5102 
5103                              /* cgopinee bugfix for 6882512*/
5104                              /*update status in okc_contacts table*/
5105                              OKC_CTC_PVT.update_contact_stecode(p_chr_id => qa_contract_id,
5106    		                                                x_return_status=>l_return_status);
5107 
5108 			     IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5109 				RAISE g_exception_halt_validation;
5110     			     END IF;
5111 
5112 
5113                              UPDATE oks_k_headers_b
5114                              SET renewal_status= 'DRAFT'
5115                              WHERE CHR_ID = qa_contract_id ;
5116 
5117 
5118                              fnd_file.put_line(fnd_file.log,'(OKS) -> Header status updated to ( '
5119                                   || l_sts_code ||' ) successfully');
5120 
5121 
5122                              UPDATE okc_k_lines_b
5123                              SET sts_code = l_sts_code
5124                              WHERE dnz_chr_id = qa_contract_id ;
5125 
5126                              fnd_file.put_line(fnd_file.log,'(OKS) -> Line status updated to ( '
5127                                   || l_sts_code ||' ) successfully');
5128 
5129 
5130                              -- Launch workflow for entered status contracts
5131 
5132                                 l_wf_attributes.contract_id       := qa_contract_id ;
5133                                 --l_wf_attributes.contract_number   := Null;
5134                                 --l_wf_attributes.contract_modifier := Null;
5135                                 --l_wf_attributes.process_type      := 'Online';
5136                                 l_wf_attributes.process_type       := 'MANUAL';
5137                                 l_wf_attributes.irr_flag           := 'Y';
5138                                 l_wf_attributes.negotiation_status := 'DRAFT';
5139 
5140 
5141                                 oks_wf_k_process_pvt.launch_k_process_wf
5142                                 (p_api_version        => 1.0,
5143                                  p_init_msg_list      => okc_api.g_false,
5144                                  p_wf_attributes      => l_wf_attributes,
5145                                  x_return_status      => l_return_status,
5146                                  x_msg_count          => x_msg_count,
5147                                  x_msg_data           => x_msg_data
5148                                 );
5149                                 fnd_file.put_line(fnd_file.log,'(OKS) -> Lauch workflow process status = ( '
5150                                      || l_return_status|| ' )');
5151 
5152                                IF l_return_status <> okc_api.g_ret_sts_success
5153                                THEN
5154                                    x_return_status := l_return_status;
5155                                    RAISE g_exception_halt_validation;
5156                                END IF;
5157 
5158                       END IF;
5159                    ELSIF UPPER (P_contract_status) = 'ENTERED'
5160                    THEN
5161 
5162 
5163                        IF Contract_type(k) <> 'WARRANTY'
5164                        THEN
5165 
5166 
5167                                l_wf_attributes.contract_id := contract_id (k);
5168                                --l_wf_attributes.contract_number := Null;
5169                                --l_wf_attributes.contract_modifier := Null;
5170                                --l_wf_attributes.process_type := 'Online';
5171                                l_wf_attributes.process_type       := 'MANUAL';
5172                                l_wf_attributes.irr_flag           := 'Y';
5173                                l_wf_attributes.negotiation_status := 'DRAFT';
5174 
5175 
5176                                oks_wf_k_process_pvt.launch_k_process_wf
5177                                          (p_api_version        => 1.0,
5178                                           p_init_msg_list      => okc_api.g_false,
5179                                           p_wf_attributes      => l_wf_attributes,
5180                                           x_return_status      => l_return_status,
5181                                           x_msg_count          => x_msg_count,
5182                                           x_msg_data           => x_msg_data
5183                                          );
5184 
5185                                fnd_file.put_line(fnd_file.log,'(OKS) -> Lauch workflow process status = ( '
5186                                            || k||' )'||l_return_status);
5187 
5188                                IF l_return_status <> okc_api.g_ret_sts_success
5189                                THEN
5190                                    x_return_status := l_return_status;
5191                                           RAISE g_exception_halt_validation;
5192                                END IF;
5193 
5194                          END IF;
5195 
5196                    END IF;
5197 
5198                    If Contract_type(k) <> 'WARRANTY' THEN
5199 
5200                         -- Copy Attachements
5201                        IF UPPER (P_transfer_attachments) = 'Y'
5202                        THEN
5203                           fnd_file.put_line(fnd_file.log,'(OKS) -> Copy the Attachments to the new contracts');
5204 
5205                              set_attach_session_vars (old_contract_id (k));
5206 
5207                              IF (fnd_attachment_util_pkg.get_atchmt_exists
5208                                               (l_entity_name      => 'OKC_K_HEADERS_V',
5209                                                l_pkey1            => to_char(old_contract_id (k)),
5210                                                l_pkey2            =>  NULL -- l_from_version
5211                                               ) = 'Y')
5212                              THEN
5213 
5214                                    fnd_attached_documents2_pkg.copy_attachments
5215                                    (x_from_entity_name      => 'OKC_K_HEADERS_V',
5216                                     x_from_pk1_value        => old_contract_id (k),
5217                                     x_from_pk2_value        => NULL, -- l_from_version,
5218                                     x_to_entity_name        => 'OKC_K_HEADERS_V',
5219                                     x_to_pk1_value          => contract_id(k),
5220                                     x_to_pk2_value          => '0'
5221                                    );
5222 
5223                                   fnd_file.put_line(fnd_file.log,'(OKS) -> Attachments copied from contract = ( '||old_contract_id (k)
5224                                   || ' ) to the new contract = ( '|| contract_id (k)||' ) Successfully');
5225 
5226                              END IF;
5227                        END IF;
5228                      End If;
5229 
5230                        fnd_file.put_line(fnd_file.log,'(OKS) -> Copy the Notes to the new contracts');
5231 
5232                        OPEN get_csi_note_csr (p_batch_id);
5233                        FETCH get_csi_note_csr INTO l_note_details;
5234                        CLOSE get_csi_note_csr;
5235                        -- Create CSI notes
5236                        IF l_note_details IS NOT NULL
5237                        THEN
5238                                    create_csi_note
5239                                    (p_source_object_id      => contract_id (k),
5240                                     p_note                  => l_note_details,
5241                                     x_return_status         => l_return_status,
5242                                     x_msg_count             => x_msg_count,
5243                                     x_msg_data              => x_msg_data
5244                                    );
5245                                    fnd_file.put_line(fnd_file.log,'(OKS) -> Create IB Note status = ( ' || l_return_status || ' )');
5246                                    IF NOT l_return_status = okc_api.g_ret_sts_success
5247                                    THEN
5248                                         x_return_status := l_return_status;
5249 
5250                                         RAISE g_exception_halt_validation;
5251                                    END IF;
5252                        END IF;
5253 
5254                        fnd_file.put_line(fnd_file.log,'(OKS) -> Notes copied from batch Successfully');
5255 
5256 
5257 
5258                       -- Transfer Notes
5259                       IF UPPER (P_transfer_notes) = 'Y' and  Contract_type(k) <> 'WARRANTY' THEN
5260 
5261 
5262                             get_notes_details (p_source_object_id      => old_contract_id(k),
5263                                      x_notes_tbl             => l_notes_tbl,
5264                                      x_return_status         => l_return_status
5265                                     );
5266                              fnd_file.put_line(fnd_file.log,'(OKS) -> For Contract = ( '||old_contract_id(k)
5267                              ||' ) Get Notes details Status = ( ' || l_return_status || ' ) Number of Notes = ( '
5268                              ||l_notes_tbl.COUNT || ' )');
5269 
5270                              IF NOT l_return_status = okc_api.g_ret_sts_success
5271                              THEN
5272                                 x_return_status := l_return_status;
5273                                 RAISE g_exception_halt_validation;
5274                              END IF;
5275 
5276                              IF l_return_status = 'S'
5277                              THEN
5278                                 IF (l_notes_tbl.COUNT > 0)
5279                                 THEN
5280                                    FOR m IN l_notes_tbl.FIRST .. l_notes_tbl.LAST
5281                                    LOOP
5282                                       jtf_notes_pub.create_note
5283                                          (p_jtf_note_id                => NULL,
5284                                           p_api_version                => 1.0,
5285                                           p_init_msg_list              => 'F',
5286                                           p_commit                     => 'F',
5287                                           p_validation_level           => 0,
5288                                           x_return_status              => l_return_status,
5289                                           x_msg_count                  => x_msg_count,
5290                                           x_msg_data                   => x_msg_data,
5291                                           p_source_object_code         => l_notes_tbl (m).source_object_code,
5292                                           p_source_object_id           => contract_id(k),
5293                                           p_notes                      => l_notes_tbl (m).notes,
5294                                           p_notes_detail               => l_notes_tbl (m).notes_detail,
5295                                           p_note_status                => l_notes_tbl (m).note_status,
5296                                           p_note_type                  => l_notes_tbl (m).note_type,
5297                                           p_entered_by                 => fnd_global.user_id,
5298                                           p_entered_date               => SYSDATE,
5299                                           x_jtf_note_id                => l_jtf_note_id,
5300                                           p_creation_date              => SYSDATE,
5301                                           p_created_by                 => fnd_global.user_id,
5302                                           p_last_update_date           => SYSDATE,
5303                                           p_last_updated_by            => fnd_global.user_id,
5304                                           p_last_update_login          => fnd_global.login_id,
5305                                           p_attribute1                 => NULL,
5306                                           p_attribute2                 => NULL,
5307                                           p_attribute3                 => NULL,
5308                                           p_attribute4                 => NULL,
5309                                           p_attribute5                 => NULL,
5310                                           p_attribute6                 => NULL,
5311                                           p_attribute7                 => NULL,
5312                                           p_attribute8                 => NULL,
5313                                           p_attribute9                 => NULL,
5314                                           p_attribute10                => NULL,
5315                                           p_attribute11                => NULL,
5316                                           p_attribute12                => NULL,
5317                                           p_attribute13                => NULL,
5318                                           p_attribute14                => NULL,
5319                                           p_attribute15                => NULL,
5320                                           p_context                    => NULL,
5321                                           p_jtf_note_contexts_tab      => l_jtf_note_contexts_tab
5322                                          );
5323 
5324                                          fnd_file.put_line(fnd_file.log,'(OKS) -> Create Notes ( '||m ||' )'|| 'Status = ( '
5325                                               || l_return_status || ' )');
5326 
5327                                       IF NOT l_return_status = okc_api.g_ret_sts_success
5328                                       THEN
5329                                          x_return_status := l_return_status;
5330                                          RAISE g_exception_halt_validation;
5331                                       END IF;
5332                                    END LOOP;
5333                                 END IF;
5334                              END IF;
5335 
5336                     End If;
5337 
5338 
5339 
5340 
5341 
5342         End Loop; -- Contracts
5343       END IF;     --Added for Bug#14183916
5344       IF Contract_id.count > 0 THEN  --Added for Bug#14183916
5345         Forall k in contract_id.first..contract_id.last
5346         Update oks_k_headers_b
5347         Set tax_amount = (select Nvl(sum(ks.tax_amount),0) from oks_k_lines_b ks, okc_k_lines_b kl
5348                           where kl.dnz_chr_id = contract_id(k) and ks.cle_id = kl.id and kl.lse_id in (9,25))
5349         Where chr_id = contract_id(k);
5350       END IF;     --Added for Bug#14183916
5351         x_return_status := l_return_status;
5352 EXCEPTION
5353       WHEN g_exception_halt_validation
5354       THEN
5355          x_return_status := l_return_status;
5356          fnd_file.put_line(fnd_file.log,' Error while creating cov,billing schd, tax : '
5357          || SQLCODE||':'|| SQLERRM );
5358          NULL;
5359       WHEN OTHERS
5360       THEN
5361          x_return_status := okc_api.g_ret_sts_unexp_error;
5362          fnd_file.put_line(fnd_file.log,' Error while creating the cov,billing schd, tax : '
5363          || SQLCODE||':'|| SQLERRM );
5364          okc_api.set_message (g_app_name,
5365                               g_unexpected_error,
5366                               g_sqlcode_token,
5367                               SQLCODE,
5368                               g_sqlerrm_token,
5369                               SQLERRM
5370                              );
5371 
5372 END CREATE_COV_BILLSCHD;
5373 
5374 
5375 
5376    -------*  Procedure terminate_cancel_subline *---------
5377    -- Procedure to terminate/cancel the subline
5378    ------------------------------------------------------
5379 
5380    PROCEDURE terminate_subline (
5381       p_status                   IN       VARCHAR2,
5382       p_hdr_id                   IN       NUMBER DEFAULT null,
5383       p_end_date                 IN       DATE DEFAULT SYSDATE,
5384       p_cle_id                   IN       NUMBER,
5385       p_termination_date         IN       DATE,
5386       p_cancellation_date        IN       DATE,
5387       p_term_flag                IN       VARCHAR2,
5388       p_terminate_reason         IN       VARCHAR2,
5389       P_termination_source       IN       VARCHAR2,
5390       p_suppress_credit          IN       VARCHAR2,
5391       p_full_credit              IN       VARCHAR2,
5392       x_return_status            OUT NOCOPY VARCHAR2
5393    )
5394    IS
5395       l_return_status   VARCHAR2 (1) := 'S';
5396       l_clev_tbl_in     okc_contract_pub.clev_tbl_type;
5397       l_clev_tbl_out    okc_contract_pub.clev_tbl_type;
5398       l_term_date        DATE;
5399       l_ste_code         VARCHAR2(30);
5400       l_sts_code         VARCHAR2(30);
5401       l_term_date_flag   VARCHAR2(1);
5402       l_msg_data         VARCHAR2(2000);
5403       l_msg_count        NUMBER;
5404       l_cancel_reason    VARCHAR2(30);
5405 
5406    BEGIN
5407       get_sts_code(null ,p_status,l_ste_code,l_sts_code);
5408 
5409       IF p_status = 'ENTERED'
5410       THEN
5411          If P_termination_source = 'IBTERMINATE' Then
5412               l_cancel_reason := 'TERMINATED';
5413          Else
5414               l_cancel_reason := 'TRANSFER';
5415          End If;
5416          oks_change_status_pvt.Update_line_status (
5417                               x_return_status       => l_return_status,
5418                               x_msg_data            => l_msg_data,
5419                               x_msg_count           => l_msg_count,
5420                               p_init_msg_list       => 'F',
5421                               p_id                  => p_hdr_id,
5422                               p_cle_id              => p_cle_id,
5423                               p_new_sts_code        => get_status_code('CANCELLED'),--code fix for bug 6350309
5424                               p_canc_reason_code    => l_cancel_reason,
5425                               p_old_sts_code        => l_sts_code,
5426                               p_old_ste_code        => l_ste_code,
5427                               p_new_ste_code        => 'CANCELLED',
5428                               p_term_cancel_source  => P_termination_source,
5429                               p_date_cancelled      => p_cancellation_date,
5430                               p_comments            => NULL,
5431                               p_validate_status     => 'N') ;
5432 
5433        If not l_return_status = OKC_API.G_RET_STS_SUCCESS Then
5434                  x_return_status := l_return_status;
5435                  Raise G_EXCEPTION_HALT_VALIDATION;
5436        End if;
5437 
5438       ELSE
5439 
5440 
5441 
5442 
5443          oks_bill_rec_pub.pre_terminate_cp
5444                                    (p_calledfrom                => NULL,
5445                                     p_cle_id                    => p_cle_id,
5446                                     p_termination_date          => p_termination_date,
5447                                     p_terminate_reason          => p_terminate_reason,
5448                                     p_override_amount           => NULL,
5449                                     p_con_terminate_amount      => NULL,
5450                                     p_termination_amount        => NULL,
5451                                     p_suppress_credit           => p_suppress_credit,
5452                                     p_full_credit               => p_full_credit,
5453                                     P_Term_Date_flag            => p_term_flag,
5454                                     P_Term_Cancel_source        => P_termination_source,
5455                                     x_return_status             => l_return_status
5456                                    );
5457 
5458          IF NOT l_return_status = okc_api.g_ret_sts_success
5459          THEN
5460             x_return_status := l_return_status;
5461             RAISE g_exception_halt_validation;
5462          END IF;
5463       END IF;
5464       x_return_status  := l_return_status;
5465    EXCEPTION
5466       WHEN g_exception_halt_validation
5467       THEN
5468          x_return_status := okc_api.g_ret_sts_error;
5469          NULL;
5470       WHEN OTHERS
5471       THEN
5472          x_return_status := okc_api.g_ret_sts_unexp_error;
5473          okc_api.set_message (g_app_name,
5474                               g_unexpected_error,
5475                               g_sqlcode_token,
5476                               SQLCODE,
5477                               g_sqlerrm_token,
5478                               SQLERRM
5479                              );
5480    END terminate_subline;
5481 
5482    ------------*  function get_line_number *-------------
5483    -- Function to generate the line numbers for service
5484    -- line as well as sublines
5485    -- this function is used in the cursor statement
5486    ------------------------------------------------------
5487 
5488    FUNCTION get_line_number (
5489       p_type                              VARCHAR2
5490    )
5491       RETURN NUMBER
5492    IS
5493    BEGIN
5494       IF p_type = 'NEW'
5495       THEN
5496          l_lineno_new := 0;
5497       END IF;
5498 
5499       l_lineno_new := l_lineno_new + 1;
5500 
5501       RETURN (l_lineno_new);
5502    END get_line_number ;
5503 
5504 
5505    ------------*  function get_line_number *-------------
5506    -- Function to generate the line numbers for service
5507    -- line as well as sublines
5508    -- this function is used in the cursor statement
5509    ------------------------------------------------------
5510 
5511    FUNCTION get_Topline_number (
5512       p_type                              VARCHAR2
5513    )
5514       RETURN NUMBER
5515    IS
5516    BEGIN
5517 
5518 
5519       IF p_type = 'NEW'
5520       THEN
5521 
5522          l_Tlineno_new := 0;
5523       END IF;
5524 
5525       l_Tlineno_new := l_Tlineno_new + 1;
5526 
5527 
5528       RETURN (l_Tlineno_new);
5529    END get_Topline_number ;
5530    ------------*  function get_seq_number *-------------
5531    -- Function to generate the header and line sequenec
5532    -- this function is used in the cursor statement
5533    ------------------------------------------------------
5534 
5535    FUNCTION get_seq_no (
5536       p_type                              VARCHAR2,
5537       p_var                               VARCHAR2,
5538       p_end_date                          DATE
5539    )
5540       RETURN NUMBER
5541    IS
5542       CURSOR l_seq_csr
5543       IS
5544          SELECT okc_k_headers_b_s.NEXTVAL
5545            FROM DUAL;
5546    BEGIN
5547 
5548       IF trunc(p_end_date) < trunc(SYSDATE)
5549       THEN
5550          RETURN (Null);
5551       END IF;
5552 
5553       IF p_type = 'H'
5554       THEN
5555 
5556          IF p_var = 'NEW'
5557          THEN
5558             OPEN l_seq_csr;
5559             FETCH l_seq_csr INTO l_hdr_id;
5560             CLOSE l_seq_csr;
5561 
5562             RETURN (l_hdr_id);
5563          ELSE
5564             RETURN (l_hdr_id);
5565          END IF;
5566       ELSIF p_type = 'L'
5567       THEN
5568 
5569          IF p_var = 'NEW'
5570          THEN
5571             l_line_id := okc_p_util.raw_to_number (SYS_GUID ());
5572             RETURN (l_line_id);
5573          ELSE
5574             RETURN (l_line_id);
5575          END IF;
5576       ELSE
5577             RETURN (okc_p_util.raw_to_number (SYS_GUID ()));
5578       END IF;
5579    END get_seq_no;
5580 
5581    -----------*  function get_object_line_id *-----------
5582    -- Function to get the object line id for renewed
5583    -- contracts
5584    ------------------------------------------------------
5585 
5586    PROCEDURE get_object_line_id (
5587       p_line_id                  IN       NUMBER,
5588       x_object_cle_id            OUT NOCOPY     NUMBER,
5589       x_object_chr_id            OUT NOCOPY     NUMBER
5590    )
5591 
5592    IS
5593       CURSOR get_object_line_csr
5594       IS
5595          SELECT object_cle_id, OBJECT_CHR_ID
5596            FROM okc_operation_instances op,
5597                 okc_operation_lines ol,
5598                 okc_class_operations cls,
5599                  okc_subclasses_b sl
5600           WHERE ol.oie_id = op.ID
5601             AND cls.cls_code = sl.cls_code
5602            And  sl.code = 'SERVICE'
5603            And  op.cop_id = cls.id
5604            And  cls.opn_code in ('RENEWAL','REN_CON')
5605            AND ol.subject_cle_id = p_line_id;
5606 
5607       CURSOR get_transfer_link_csr (
5608          p_line_id                           NUMBER
5609       )
5610       IS
5611          SELECT ol.subject_cle_id, ol.subject_chr_id
5612            FROM okc_operation_instances op,
5613                 okc_operation_lines ol,
5614                 okc_class_operations cls,
5615                  okc_subclasses_b sl
5616           WHERE ol.oie_id = op.ID
5617             AND cls.cls_code = sl.cls_code
5618            And  sl.code = 'SERVICE'
5619            And  op.cop_id = cls.id
5620            And  cls.opn_code in ('TRANSFER')
5621             AND ol.object_cle_id = p_line_id;
5622 
5623       l_renew_object_id   NUMBER := NULL;
5624       l_renew_chr_id   NUMBER := NULL;
5625       l_trf_subject_id    NUMBER := NULL;
5626       l_trf_subj_chrid  Number := Null;
5627    BEGIN
5628 
5629       OPEN get_object_line_csr;
5630       FETCH get_object_line_csr  INTO l_renew_object_id, l_renew_chr_id;
5631 
5632       IF get_object_line_csr%FOUND
5633       THEN
5634 
5635          OPEN get_transfer_link_csr (l_renew_object_id);
5636          FETCH get_transfer_link_csr  INTO l_trf_subject_id,l_trf_subj_chrid;
5637          IF get_transfer_link_csr%FOUND THEN
5638               x_object_cle_id := l_trf_subject_id;
5639               x_object_chr_id := l_trf_subj_chrid;
5640          ELSE
5641               x_object_cle_id := l_renew_object_id;
5642               x_object_chr_id := l_renew_chr_id;
5643          END IF;
5644          CLOSE get_transfer_link_csr;
5645       ELSE
5646           x_object_cle_id := NULL;
5647           x_object_chr_id := NULL;
5648       END IF;
5649       CLOSE get_object_line_csr;
5650 
5651    EXCEPTION
5652       WHEN OTHERS
5653       THEN
5654          fnd_file.put_line(fnd_file.log,' Error while getting the object line id: '
5655          || SQLCODE||':'|| SQLERRM );
5656          okc_api.set_message (g_app_name,
5657                               g_unexpected_error,
5658                               g_sqlcode_token,
5659                               SQLCODE,
5660                               g_sqlerrm_token,
5661                               SQLERRM
5662                              );
5663    END get_object_line_id;
5664 
5665    -------------*  function get_end_date *---------------
5666    -- Function to get the end date for installation date
5667    -- change
5668    ------------------------------------------------------
5669 
5670    FUNCTION get_end_date (
5671       p_sdate                    IN       DATE,
5672       p_edate                    IN       DATE,
5673       p_ins_date                 IN       DATE
5674    )
5675       RETURN DATE
5676    IS
5677       l_duration        NUMBER;
5678       l_timeunits       VARCHAR2 (240);
5679       l_new_edt         DATE;
5680       l_return_status   VARCHAR2 (1)   := 'S';
5681    BEGIN
5682       okc_time_util_pub.get_duration (p_start_date         => trunc(p_sdate),
5683                                       p_end_date           => trunc(p_edate),
5684                                       x_duration           => l_duration,
5685                                       x_timeunit           => l_timeunits,
5686                                       x_return_status      => l_return_status
5687                                      );
5688 
5689       IF NOT l_return_status = 'S'
5690       THEN
5691          RAISE g_exception_halt_validation;
5692       END IF;
5693 
5694       l_new_edt := okc_time_util_pub.get_enddate (p_start_date      => trunc(p_ins_date),
5695                                                   p_duration        => l_duration,
5696                                                   p_timeunit        => l_timeunits
5697                                                  );
5698       RETURN (l_new_edt);
5699    END get_end_date;
5700 
5701    FUNCTION get_status (
5702       p_start_date                        VARCHAR2,
5703       p_end_date                          VARCHAR2
5704    )
5705       RETURN VARCHAR2
5706    IS
5707       l_ste_code   VARCHAR2 (30);
5708       l_sts_code   VARCHAR2 (30);
5709    BEGIN
5710       IF (p_start_date) > (SYSDATE)
5711       THEN
5712          get_sts_code ('SIGNED',
5713                         NULL,
5714                         l_ste_code,
5715                         l_sts_code
5716                        );
5717       ELSIF     (p_start_date) <= (SYSDATE)
5718             AND (p_end_date) >= (SYSDATE)
5719       THEN
5720          get_sts_code ('ACTIVE',
5721                         NULL,
5722                         l_ste_code,
5723                         l_sts_code
5724                        );
5725       ELSIF (p_end_date) < (SYSDATE)
5726       THEN
5727          get_sts_code ('EXPIRED',
5728                         NULL,
5729                         l_ste_code,
5730                         l_sts_code
5731                        );
5732       END IF;
5733 
5734       RETURN (l_sts_code);
5735    END;
5736 
5737    ------------*  function check_relation *-------------
5738    -- Function to check the relation between transfer
5739    -- parties
5740    ------------------------------------------------------
5741 
5742    FUNCTION check_relation (
5743       p_old_customer             IN       VARCHAR2,
5744       p_new_customer             IN       VARCHAR2,
5745       p_transfer_date            IN       DATE
5746    )
5747       RETURN VARCHAR2
5748    IS
5749       CURSOR l_cust_rel_csr (
5750          l_old_customer                      VARCHAR2,
5751          l_new_customer                      VARCHAR2,
5752          l_relation                          VARCHAR2
5753       )
5754       IS
5755          SELECT DISTINCT relationship_type
5756                     FROM hz_relationships
5757                    WHERE (   (    object_id = l_new_customer
5758                               AND subject_id = l_old_customer
5759                              )
5760                           OR (    object_id = l_old_customer
5761                               AND subject_id = l_new_customer
5762                              )
5763                          )
5764                      AND relationship_type = l_relation
5765                      AND status = 'A'
5766                      AND TRUNC (p_transfer_date) BETWEEN TRUNC (start_date)
5767                                                      AND TRUNC (end_date);
5768 
5769       l_old_party_id        NUMBER;
5770       l_new_party_id        NUMBER;
5771       l_relationship_type   VARCHAR2 (40);
5772       l_relationship        VARCHAR2 (40);
5773       l_date                DATE;
5774    BEGIN
5775       l_relationship_type := fnd_profile.VALUE ('OKS_TRF_PARTY_REL');
5776       get_party_id (p_new_customer, l_new_party_id);
5777       get_party_id (p_old_customer, l_old_party_id);
5778 
5779       OPEN l_cust_rel_csr (l_old_party_id,
5780                            l_new_party_id,
5781                            l_relationship_type
5782                           );
5783 
5784       FETCH l_cust_rel_csr
5785        INTO l_relationship;
5786 
5787       IF l_cust_rel_csr%FOUND
5788       THEN
5789          RETURN ('Y');
5790       ELSE
5791          RETURN ('N');
5792       END IF;
5793 
5794       CLOSE l_cust_rel_csr;
5795    END;
5796 
5797    ------------*  Procedure create_contract *-------------
5798    -- procedure to create contract
5799    -- which creates header, lines and sublines
5800    ------------------------------------------------------
5801 
5802    PROCEDURE create_contract (
5803       p_api_version              IN       NUMBER,
5804       p_batch_rules              IN       batch_rules_rec_type,
5805       p_transfer_date            IN       DATE,
5806       x_return_status            OUT NOCOPY VARCHAR2,
5807       x_msg_data                 OUT NOCOPY VARCHAR2,
5808       x_msg_count                OUT NOCOPY NUMBER
5809    )
5810    IS
5811       l_return_status   VARCHAR2 (1) := 'S';
5812    BEGIN
5813       create_contract_header (p_api_version        => 1.0,
5814                               p_batch_rules        => p_batch_rules,
5815                               p_transfer_date      => p_transfer_date,
5816                               x_return_status      => l_return_status,
5817                               x_msg_count          => x_msg_count,
5818                               x_msg_data           => x_msg_data
5819 
5820                              );
5821 
5822       fnd_file.put_line(fnd_file.log,'(OKS) -> Create contract header, status = ( '
5823                          || l_return_status || ' )');
5824 
5825       IF NOT l_return_status = okc_api.g_ret_sts_success
5826       THEN
5827          x_return_status := l_return_status;
5828          RAISE g_exception_halt_validation;
5829       END IF;
5830 
5831       create_contract_line (p_api_version        => 1.0,
5832                             p_batch_rules        => p_batch_rules,
5833                             p_transfer_date      => p_transfer_date,
5834                             x_return_status      => l_return_status,
5835                               x_msg_count          => x_msg_count,
5836                               x_msg_data           => x_msg_data
5837                            );
5838 
5839       fnd_file.put_line(fnd_file.log,'(OKS) -> Create contract Line, status = ( '
5840                          || l_return_status || ' )');
5841 
5842       IF NOT l_return_status = okc_api.g_ret_sts_success
5843       THEN
5844          x_return_status := l_return_status;
5845          RAISE g_exception_halt_validation;
5846       END IF;
5847 
5848       create_contract_subline (p_api_version        => 1.0,
5849                                p_batch_rules        => p_batch_rules,
5850                                p_transfer_date      => p_transfer_date,
5851                                x_return_status      => l_return_status,
5852                               x_msg_count          => x_msg_count,
5853                               x_msg_data           => x_msg_data
5854                               );
5855 
5856       fnd_file.put_line(fnd_file.log,'(OKS) -> Create contract subline, status = ( '
5857                          || l_return_status || ' )');
5858 
5859       IF NOT l_return_status = okc_api.g_ret_sts_success
5860       THEN
5861          x_return_status := l_return_status;
5862          RAISE g_exception_halt_validation;
5863       END IF;
5864 
5865      fnd_file.put_line(fnd_file.log,'(OKS) -> Create billing Schedule for biling profile id = ( '
5866                          || p_batch_rules.billing_profile_id ||' )');
5867      --call to create coverages and billing schedule
5868      -- Terminate Cancel top lines and Header
5869      CREATE_COV_BILLSCHD
5870      (
5871      P_contract_status => P_batch_rules.contract_status,
5872      p_billing_profile_id => p_batch_rules.billing_profile_id,
5873      Termination_reason   => p_batch_rules.termination_reason_code,
5874      x_msg_count => x_msg_count,
5875      x_msg_data =>  x_msg_data,
5876      x_return_status => l_return_status,
5877      P_batch_id    => p_batch_rules.batch_id,
5878      P_transfer_Attachments  => p_batch_rules.transfer_attachments_flag,
5879      P_transfer_notes  => p_batch_rules.transfer_notes_flag
5880      );
5881 
5882 
5883 
5884      fnd_file.put_line(fnd_file.log,'(OKS) -> CREATE_COV_BILLSCHD, status = ( '
5885                          || l_return_status || ' )');
5886      IF NOT l_return_status = okc_api.g_ret_sts_success
5887       THEN
5888          x_return_status := l_return_status;
5889          RAISE g_exception_halt_validation;
5890       END IF;
5891 
5892       x_return_status := l_return_status;
5893    EXCEPTION
5894       WHEN g_exception_halt_validation
5895       THEN
5896 
5897          fnd_file.put_line(fnd_file.log,' Error while creating the contract : '
5898          || SQLCODE||':'|| SQLERRM );
5899          NULL;
5900       WHEN OTHERS
5901       THEN
5902          x_return_status := okc_api.g_ret_sts_unexp_error;
5903          fnd_file.put_line(fnd_file.log,' Error while creating the contract : '
5904          || SQLCODE||':'|| SQLERRM );
5905          okc_api.set_message (g_app_name,
5906                               g_unexpected_error,
5907                               g_sqlcode_token,
5908                               SQLCODE,
5909                               g_sqlerrm_token,
5910                               SQLERRM
5911                              );
5912    END;
5913 
5914 Procedure Terminate_cancel
5915   (p_termination_reason  Varchar2,
5916    P_termcancel_source   VARCHAR2,
5917    P_cancel_reason       VARCHAR2,
5918    X_return_status      OUT NOCOPY Varchar2,
5919    X_msg_count          OUT NOCOPY Number,
5920    X_msg_data           OUT NOCOPY Varchar2)
5921    Is
5922 
5923     CURSOR get_srv_details_csr(p_contract_id Number)  IS
5924         Select Distinct temp.topline_id
5925               ,St.ste_code
5926               ,line.start_date
5927         From   Oks_instance_k_dtls_temp temp
5928              , okc_k_lines_b line
5929              , Okc_statuses_b St
5930         Where  line.id = temp.Topline_id
5931         And    temp.contract_id = p_contract_id
5932         And    St.code = line.sts_code;
5933 
5934    Cursor get_contract_csr Is
5935         Select distinct temp.contract_id
5936                , kh.authoring_org_id
5937                , kh.inv_organization_id
5938                , St.ste_code
5939                , Kh.start_date
5940         From   OKs_instance_k_dtls_temp temp
5941              , Okc_k_headers_all_b Kh
5942              , Okc_statuses_b St
5943         Where Kh.Id = temp.contract_id
5944         And   St.code = Kh.sts_code;
5945        contract_id               okc_datatypes.numbertabtyp;
5946        org_id                    okc_datatypes.numbertabtyp;
5947        organization_id           okc_datatypes.numbertabtyp;
5948        topline_id                okc_datatypes.numbertabtyp;
5949        hdr_sts                   okc_datatypes.var30tabtyp;
5950        topline_sts               okc_datatypes.var30tabtyp;
5951        l_return_status           Varchar2(1);
5952        line_start_date           okc_datatypes.datetabtyp;
5953        hdr_start_date            okc_datatypes.datetabtyp;
5954 
5955 
5956 Begin
5957 
5958 
5959       -- Update all the toplines and headers for termination/Cancellation
5960 
5961 
5962         contract_id.delete;
5963         org_id.delete;
5964         organization_id.delete;
5965         hdr_sts.delete;
5966         hdr_start_date.delete;
5967 
5968         OPEN get_contract_csr;
5969         FETCH get_contract_csr
5970         BULK COLLECT INTO
5971         contract_id,
5972         org_id,
5973         organization_id,
5974         hdr_sts,
5975         hdr_start_date;
5976         Close get_contract_csr;
5977         If contract_id.count > 0 Then
5978 
5979            For i in contract_id.first..contract_id.last
5980            Loop
5981                 topline_id.delete;
5982                 topline_sts.delete;
5983                 line_start_date.delete;
5984 
5985 
5986                 okc_context.set_okc_org_context(org_id(i),organization_id(i));
5987                 OPEN get_srv_details_csr(contract_id(i));
5988                 FETCH get_srv_details_csr
5989                 BULK COLLECT INTO
5990                   topline_id,
5991                   topline_sts,
5992                   line_start_date;
5993 
5994                 CLOSE get_srv_details_csr;
5995 
5996                 FOR j IN topline_id.first..topline_id.last LOOP
5997                            --Terminate Cancel Top lines if all the sublines are Terminated/Cancelled
5998                    Teminate_Cancel_Topline
5999                    (
6000                      line_status => topline_sts(j),
6001                      Service_line_id  => topline_id(j),
6002                      contract_id      => contract_id(i),
6003                      line_start_date  => line_start_date(j),
6004                      Term_cancel_source => P_termcancel_source, --'IBTERMINATE',
6005                      Termination_reason => P_termination_reason,
6006                      Cancel_reason => p_cancel_reason, --'TERMINATED',
6007                      x_msg_count   => x_msg_count,
6008                      x_msg_data   => x_msg_data,
6009                      x_return_status => l_return_status
6010                   );
6011 
6012                    IF NOT l_return_status = 'S'
6013                    THEN
6014 
6015                         RAISE g_exception_halt_validation;
6016                    END IF;
6017 
6018                  END LOOP; --For Service Lines
6019 
6020                  --Terminate Cancel Header if all the Toplines are Terminated/Cancelled
6021 
6022                    Teminate_Cancel_Header
6023                    (
6024                      P_Contract_status    => hdr_sts(i),
6025                      contract_id        => contract_id(i),
6026                      hdr_start_date     => hdr_start_date(i),
6027                      Term_cancel_source => P_termcancel_source, --'IBTERMINATE',
6028                      Termination_reason => P_termination_reason,
6029                      Cancel_reason      => p_cancel_reason, --'TERMINATED',
6030                       x_msg_count   => x_msg_count,
6031                      x_msg_data   => x_msg_data,
6032                      x_return_status => l_return_status
6033                    );
6034 
6035                    IF NOT l_return_status = 'S'
6036                    THEN
6037 
6038                         RAISE g_exception_halt_validation;
6039                     END IF;
6040 
6041 
6042 
6043             End Loop; -- Contracts
6044          End If;
6045             x_return_status := l_return_status;
6046    EXCEPTION
6047       WHEN g_exception_halt_validation
6048       THEN
6049 
6050          fnd_file.put_line(fnd_file.log,' Error while terminating/Canceling line/hdr: '
6051          || SQLCODE||':'|| SQLERRM );
6052          NULL;
6053       WHEN OTHERS
6054       THEN
6055          x_return_status := okc_api.g_ret_sts_unexp_error;
6056          fnd_file.put_line(fnd_file.log,' Error while terminating/Canceling line/hdr: '
6057          || SQLCODE||':'|| SQLERRM );
6058          okc_api.set_message (g_app_name,
6059                               g_unexpected_error,
6060                               g_sqlcode_token,
6061                               SQLCODE,
6062                               g_sqlerrm_token,
6063                               SQLERRM
6064                              );
6065    END;
6066 
6067    ------------*  Procedure update_contract *-------------
6068    -- procedure to terminate/cancel the impacted contracts
6069    -- and create new contract for the new party.
6070    -- creates transaction source, copy attachments, copy
6071    -- notes ,copy csi notes, run qa check, Roll up the
6072    -- amounts to header and lines.
6073    ------------------------------------------------------
6074 
6075    PROCEDURE update_contracts (
6076       p_api_version              IN       NUMBER,
6077       p_init_msg_list            IN       VARCHAR2,
6078       p_batch_type               IN       VARCHAR2,
6079       p_batch_id                 IN       NUMBER,
6080       p_new_acct_id              IN       NUMBER,
6081       p_old_acct_id              IN       NUMBER,
6082       x_return_status            OUT NOCOPY VARCHAR2,
6083       x_msg_count                OUT NOCOPY NUMBER,
6084       x_msg_data                 OUT NOCOPY VARCHAR2
6085    )
6086    IS
6087       CURSOR get_k_for_transfer_csr (
6088          p_transfer_rule                     VARCHAR2,
6089          l_relationship                      VARCHAR2,
6090          p_party_id                          NUMBER,
6091          P_credit_option                     Varchar2
6092       )
6093       IS
6094          SELECT ki.dnz_chr_id  contract_id,
6095                 kh.start_date  k_sdate,
6096                 kh.end_date    k_edate,
6097                 kh.sts_code    k_sts_code,
6098                 Hst.ste_code   Hdr_ste,
6099                 kh.contract_number,
6100                 kh.contract_number_modifier,
6101                 kl.cle_id      topline_id,
6102                 kl2.start_date l_sdate,
6103                 kl2.end_date   l_edate,
6104                 ki.cle_id      subline_id,
6105                 kl.start_date  sl_sdate,
6106                 TRUNC(CASE
6107                     WHEN trunc(tmp.transfer_date) < trunc(kl.start_date)
6108                        THEN trunc(kl.start_date)
6109                     ELSE tmp.transfer_date
6110                  END
6111                 ) subline_sdate,
6112                 kl.end_date subline_edate,
6113                 (decode(row_number() over (partition by kl.dnz_chr_id order by kl.cle_id), 1,
6114                      oks_mass_update_pvt.get_seq_no ('H', 'NEW',kh.end_date)
6115                     , oks_mass_update_pvt.get_seq_no ('H', 'OLD', kh.end_date))
6116 
6117                 ) newcontractid,
6118                (decode(row_number() over (partition by kl.dnz_chr_id, kl.cle_id order by kl.rowid), 1
6119                         , oks_mass_update_pvt.get_seq_no ('L', 'NEW',kl.end_date)
6120                         , oks_mass_update_pvt.get_seq_no ('L', 'OLD',kl.end_date))
6121                ) newlineid,
6122                 oks_mass_update_pvt.get_seq_no ('SL', 'NEW',kl.end_date) newsublineid,
6123                 st.ste_code subline_status,
6124                 tmp.transfer_date transfer_date,
6125                 tmp.old_customer_product_id custprod_id,
6126                 kl.price_negotiated,
6127                 kl.price_unit,
6128                 ki.number_of_items,
6129                 DECODE (kl2.lse_id ,14,'WARRANTY','OTHERS'),
6130                 tmp.transaction_date,
6131                 Party.object1_id1,
6132                 Kh.authoring_org_id,
6133                 NVL(P_credit_option
6134                     ,OKS_IB_UTIL_PVT.get_credit_option(party.object1_id1,kh.authoring_org_id,tmp.transaction_date)),
6135                 Kh.inv_organization_id
6136            FROM okc_k_items ki,
6137                 okc_k_headers_all_b kh,
6138                 oks_k_headers_b ks,
6139                 okc_k_lines_b kl,
6140                 okc_statuses_b st,
6141                 okc_statuses_b Hst,
6142                 oks_k_lines_b ks1,
6143                 oks_k_lines_b ks2,
6144                 okc_k_lines_b kl2,
6145                 oks_instance_temp tmp,
6146                 okc_k_party_roles_b party
6147           WHERE ki.object1_id1 = to_char(tmp.old_customer_product_id)
6148             AND tmp.trf = 'Y'
6149             AND ki.jtot_object1_code = 'OKX_CUSTPROD'
6150             AND ki.dnz_chr_id = kh.ID
6151             AND kh.scs_code IN ('WARRANTY', 'SERVICE', 'SUBSCRIPTION')
6152             And Kh.sts_code = Hst.code
6153             AND ki.cle_id = kl.ID
6154             AND kl.sts_code = st.code
6155             AND st.ste_code NOT IN ('TERMINATED', 'CANCELLED')
6156             AND kl.date_terminated IS NULL
6157             AND kh.template_yn = 'N'
6158             --AND kl.cle_id = kl1.cle_id
6159             --AND ks1.cle_id = kl1.ID
6160             --AND kl1.lse_id IN (2, 20, 15)
6161             AND kl2.ID = kl.cle_id
6162             AND kl2.cle_id IS NULL
6163             AND kl2.id = ks1.cle_id              -- Added for coverage
6164             and ks1.coverage_id = ks2.cle_id(+)  -- Added for coverage
6165             AND party.dnz_chr_id = kh.ID
6166             AND party.chr_id IS NOT NULL
6167             AND party.cle_id IS NULL
6168             AND party.rle_code IN ('CUSTOMER', 'SUBSCRIBER')
6169             AND party.jtot_object1_code = 'OKX_PARTY'
6170             AND party.object1_id1 <> p_party_id
6171             AND kh.ID = ks.chr_id(+)
6172             AND (   (    TRUNC (tmp.transfer_date) <= TRUNC (kl.end_date)
6173                      AND TRUNC (tmp.transfer_date) >= TRUNC (kl.start_date)
6174                     )
6175                  OR (TRUNC (tmp.transfer_date) <= TRUNC (kl.start_date))
6176                  OR (    TRUNC (kl.end_date) < TRUNC (tmp.transfer_date)
6177                      AND kl.Date_renewed is Null and kl.lse_id <> 18
6178                     )
6179                 )
6180             AND (   ('TRANSFER' = p_transfer_rule)
6181                  OR (    'COVERAGE' = p_transfer_rule
6182                      AND (   ks2.transfer_option = 'TRANS'
6183                           OR (    ks2.transfer_option = 'TRANS_NO_REL'
6184                               AND NVL (l_relationship, 'Y') = 'Y'
6185                              )
6186                          )
6187                     )
6188                 )
6189                 ;
6190 
6191 
6192       CURSOR get_k_for_trfterm_csr (
6193          p_transfer_rule                     VARCHAR2,
6194          l_relationship                      VARCHAR2,
6195          p_party_id                          NUMBER,
6196          P_credit_option                     Varchar2
6197 
6198       )
6199       IS
6200 
6201          SELECT ki.dnz_chr_id     contract_id,
6202                 ki.cle_id         subline_id,
6203                 sl.start_date     subline_sdate,
6204                 sl.end_date       subline_edate,
6205                 st.ste_code       subline_sts,
6206                 kh.start_date     hdr_sdt,
6207                 kh.end_date       hdr_edt,
6208                 kh.sts_code       hdr_sts,
6209                 Hst.ste_code      hdr_ste,
6210                 kh.contract_number,
6211                 kh.contract_number_modifier,
6212                 Tl.id             top_line_id,
6213                 Tl.start_date     top_line_sdt,
6214                 Tl.end_date       Top_line_edt,
6215                 party.object1_id1 party_id,
6216                 tmp.transfer_date,
6217                 tmp.old_customer_product_id custprod_id,
6218                 sl.price_negotiated,
6219                 sl.price_unit,
6220                 ki.number_of_items,
6221                 tmp.transaction_date,
6222                 Kh.authoring_org_id,
6223                 NVL(P_credit_option
6224                     ,OKS_IB_UTIL_PVT.get_credit_option(party.object1_id1,kh.authoring_org_id,tmp.transaction_date)),
6225                 Kh.inv_organization_id
6226 
6227            FROM okc_k_items ki,
6228                 okc_k_headers_all_b kh,
6229                 oks_k_headers_b ks,
6230                 okc_k_lines_b sl,
6231                 okc_k_lines_b Tl,
6232                 oks_k_lines_b okl,
6233                 oks_k_lines_b okl1,
6234                 okc_statuses_b st,
6235                 okc_k_party_roles_b party,
6236                 oks_instance_temp tmp,
6237                 okc_statuses_b Hst
6238           WHERE tmp.trf = 'Y'
6239             AND ki.object1_id1 = to_char(tmp.old_customer_product_id)
6240             AND ki.jtot_object1_code = 'OKX_CUSTPROD'
6241             AND ki.dnz_chr_id = kh.ID
6242             AND ks.chr_id(+) = kh.ID
6243             AND kh.scs_code IN ('WARRANTY', 'SERVICE', 'SUBSCRIPTION')
6244             And kh.sts_code = Hst.code
6245             AND ki.cle_id = sl.ID
6246             AND sl.cle_id = Tl.id                 -- Added for coverage re-arc
6247             AND Tl.cle_id IS NULL                 -- Added for coverage re-arc
6248             AND Tl.id = okl.cle_id                -- Added for coverage re-arc
6249             AND okl.coverage_id = okl1.cle_id(+)   -- Added for coverage re-arc
6250             AND sl.sts_code = st.code
6251             AND st.ste_code NOT IN ('TERMINATED', 'CANCELLED')
6252             AND sl.date_terminated IS NULL
6253             AND kh.template_yn = 'N'
6254             AND party.dnz_chr_id = kh.ID
6255             AND party.chr_id IS NOT NULL
6256             AND party.cle_id IS NULL
6257             AND party.rle_code IN ('CUSTOMER', 'SUBSCRIBER')
6258             AND party.jtot_object1_code = 'OKX_PARTY'
6259             AND party.object1_id1 <> p_party_id
6260             AND (   (    TRUNC (tmp.transfer_date) <= TRUNC (sl.end_date)
6261                      AND TRUNC (tmp.transfer_date) >= TRUNC (sl.start_date)
6262                     )
6263                  OR (TRUNC (tmp.transfer_date) <= TRUNC (sl.start_date))
6264                  OR (    TRUNC (sl.end_date) < TRUNC (tmp.transfer_date)
6265                      AND sl.date_renewed is null and sl.lse_id <> 18
6266 
6267                     )
6268                 )
6269             AND (   ('TERMINATE' = p_transfer_rule)
6270                  OR (    'COVERAGE' = p_transfer_rule
6271                      AND (   okl1.transfer_option = 'TERM'
6272                           OR (    okl1.transfer_option = 'TERM_NO_REL'
6273                               AND NVL (l_relationship, 'Y') = 'Y'
6274                              )
6275                          )
6276                     )
6277                 )
6278                ;
6279 
6280       CURSOR get_k_for_trm_csr(P_credit_option Varchar2)
6281       IS
6282          SELECT ki.dnz_chr_id AS contract_id,
6283                 kl.cle_id     AS topline_id,
6284                 ki.cle_id     AS subline_id,
6285                 kh.start_date AS hdr_sdt,
6286                 kh.end_date   AS hdr_edt,
6287                 Kh.sts_code   AS hdr_sts,
6288                 HSt.ste_code   AS hdr_ste,
6289                 kh.contract_number,
6290                 kh.contract_number_modifier,
6291                 tl.start_date AS srv_sdt,
6292                 tl.end_date   AS srv_edt,
6293                 Lst.ste_code   AS srv_sts,
6294                 kl.start_date AS prod_sdate,
6295                 kl.end_date   AS prod_edate,
6296                 st.ste_code   AS prod_sts,
6297                 tmp.termination_date        AS term_date,
6298                 tmp.old_customer_product_id AS instance_id,
6299                 tmp.transaction_date        AS transaction_date,
6300                 ki.number_of_items          AS qty,
6301                 kl.price_negotiated         AS price_negotiated,
6302                 party.object1_id1 party_id,
6303                 kh.authoring_org_id,
6304                 NVL(P_credit_option
6305                     ,OKS_IB_UTIL_PVT.get_credit_option(party.object1_id1,kh.authoring_org_id,tmp.transaction_date)),
6306                 Kh.inv_organization_id
6307            FROM okc_k_items ki,
6308                 okc_k_headers_all_b kh,
6309                 okc_k_lines_b kl,
6310                 okc_statuses_b st,
6311                 oks_instance_temp tmp,
6312                 okc_k_lines_b tl,
6313                 okc_k_party_roles_b party,
6314                 Okc_statuses_b Hst,
6315                 Okc_statuses_b Lst
6316           WHERE tmp.trm = 'Y'
6317             AND ki.object1_id1 = to_char(tmp.old_customer_product_id)
6318             AND ki.jtot_object1_code = 'OKX_CUSTPROD'
6319             AND ki.dnz_chr_id = kh.ID
6320             AND kh.scs_code IN ('WARRANTY', 'SERVICE', 'SUBSCRIPTION')
6321             And Kh.sts_code = Hst.code
6322             AND ki.cle_id = kl.ID
6323             AND tl.ID = kl.cle_id
6324             And tl.sts_code = Lst.code
6325             AND kl.sts_code = st.code
6326             AND st.ste_code NOT IN ('TERMINATED', 'CANCELLED')
6327             AND kl.date_terminated IS NULL
6328             AND kh.template_yn = 'N'
6329             AND party.dnz_chr_id = kh.ID
6330             AND party.chr_id IS NOT NULL
6331             AND party.cle_id IS NULL
6332             AND party.rle_code IN ('CUSTOMER', 'SUBSCRIBER')
6333             AND party.jtot_object1_code = 'OKX_PARTY'
6334             AND (   (    TRUNC (tmp.Termination_date) <= TRUNC (kl.end_date)
6335                      AND TRUNC (tmp.Termination_date) >= TRUNC (kl.start_date)
6336                     )
6337                  OR (TRUNC (tmp.Termination_date) <= TRUNC (kl.start_date))
6338                  OR (    TRUNC (kl.end_date) < TRUNC (tmp.Termination_date)
6339                      AND Kl.date_renewed is null and kl.lse_id <> 18
6340                     )
6341                 )
6342          UNION
6343          SELECT ki.dnz_chr_id AS contract_id,
6344                 kl.cle_id AS topline_id,
6345                 ki.cle_id AS subline_id,
6346                 kh.start_date AS hdr_sdt,
6347                 kh.end_date AS hdr_edt,
6348                 kh.sts_code AS hdr_sts,
6349                 HSt.ste_code   AS hdr_ste,
6350                 kh.contract_number,
6351                 kh.contract_number_modifier,
6352                 tl.start_date AS srv_sdt,
6353                 tl.end_date AS srv_edt,
6354                 Lst.ste_code AS srv_sts,
6355                 kl.start_date AS prod_sdate,
6356                 kl.end_date AS prod_edate,
6357                 st.ste_code AS prod_sts,
6358                 tmp.termination_date AS term_date,
6359                 tmp.old_customer_product_id AS instance_id,
6360                 tmp.transaction_date AS transaction_date,
6361                 ki.number_of_items AS qty,
6362                 kl.price_negotiated AS price_negotiated,
6363                 party.object1_id1 party_id,
6364                 kh.authoring_org_id,
6365                 NVL(P_credit_option
6366                     ,OKS_IB_UTIL_PVT.get_credit_option(party.object1_id1,kh.authoring_org_id,tmp.transaction_date)),
6367                 Kh.inv_organization_id
6368 
6369 
6370 
6371            FROM okc_k_items ki,
6372                 okc_k_headers_all_b kh,
6373                 okc_k_lines_b kl,
6374                 okc_k_lines_b tl,
6375                 okc_statuses_b st,
6376                 csi_counter_associations ctrAsc,
6377                 oks_instance_temp tmp,
6378                 okc_k_party_roles_b party,
6379                 okc_statuses_b Hst,
6380                 okc_statuses_b Lst
6381           WHERE tmp.trm = 'Y'
6382             AND ki.object1_id1 = to_char(ctrAsc.counter_id)
6383             AND ctrAsc.source_object_id = tmp.old_customer_product_id
6384             And ctrAsc.source_object_code = 'CP'
6385             AND ki.jtot_object1_code = 'OKX_COUNTER'
6386             AND ki.dnz_chr_id = kh.ID
6387             AND kh.scs_code IN ('SERVICE', 'SUBSCRIPTION')
6388             And Kh.sts_code = Hst.code
6389             AND ki.cle_id = kl.ID
6390             AND tl.ID = kl.cle_id
6391             And tl.sts_code = Lst.code
6392             AND kl.sts_code = st.code
6393             AND st.ste_code NOT IN ('TERMINATED', 'CANCELLED')
6394             AND kl.date_terminated IS NULL
6395             AND kh.template_yn = 'N'
6396             AND party.dnz_chr_id = kh.ID
6397             AND party.chr_id IS NOT NULL
6398             AND party.cle_id IS NULL
6399             AND party.rle_code IN ('CUSTOMER', 'SUBSCRIBER')
6400             AND party.jtot_object1_code = 'OKX_PARTY'
6401 
6402             AND (   (    TRUNC (tmp.Termination_date) <= TRUNC (kl.end_date)
6403                      AND TRUNC (tmp.Termination_date) >= TRUNC (kl.start_date)
6404                     )
6405                  OR (TRUNC (tmp.Termination_date) <= TRUNC (kl.start_date))
6406                  OR (    TRUNC (kl.end_date) < TRUNC (tmp.Termination_date)
6407                      AND Kl.date_renewed is null and kl.lse_id <> 18
6408                     )
6409                 );
6410 
6411       CURSOR get_k_for_idc_csr
6412       IS
6413            select a.*, cs.creation_date
6414          from ( SELECT ki.dnz_chr_id AS contract_id,
6415                 kl.cle_id AS topline_id,
6416                 ki.cle_id AS subline_id,
6417                 kh.start_date AS hdr_sdt,
6418                 kh.end_date AS hdr_edt,
6419                 kh.sts_code AS hdr_sts,
6420                 tl.start_date AS srv_sdt,
6421                 tl.end_date AS srv_edt,
6422                 tl.sts_code AS srv_sts,
6423                 kl.start_date AS prod_sdate,
6424                 kl.end_date AS prod_edate,
6425                 kl.sts_code AS prod_sts,
6426                 tmp.installation_date AS idc_date,
6427                 TRUNC (oks_mass_update_pvt.get_end_date (kl.start_date,
6428                                                      kl.end_date,
6429                                                      tmp.installation_date
6430                                                     )
6431                       ) AS new_edt,
6432                       ki.number_of_items,
6433                       tmp.transaction_date,
6434                       tmp.old_customer_product_id,
6435                 (Kh.COntract_number||' '||Kh.Contract_number_Modifier)COntract_number,
6436                 kl.line_number
6437 
6438 
6439 
6440            FROM okc_k_items ki,
6441                 okc_k_headers_all_b kh,
6442                 okc_k_lines_b kl,
6443                 okc_statuses_b st,
6444                 oks_instance_temp tmp,
6445                 okc_k_lines_b tl,
6446                 oks_k_lines_v ksl,
6447                 oks_k_lines_b ks11
6448           WHERE tmp.idc = 'Y'
6449             AND NVL(tmp.trm, 'N') = 'N'
6450             AND ki.object1_id1 = to_char(tmp.old_customer_product_id)
6451             AND ki.jtot_object1_code = 'OKX_CUSTPROD'
6452             AND ki.dnz_chr_id = kh.ID
6453             AND kh.scs_code IN ('WARRANTY')
6454             AND ki.cle_id = kl.ID
6455             AND tl.ID = kl.cle_id
6456             AND kl.sts_code = st.code
6457             AND st.ste_code NOT IN ('TERMINATED', 'CANCELLED', 'HOLD')
6458             AND kl.date_terminated IS NULL
6459             AND kh.template_yn = 'N'
6460             AND kl.lse_id = 18
6461             And Ksl.cle_id = Tl.id
6462             And ks11.cle_id = Ksl.coverage_id
6463             And Nvl(ks11.sync_date_install,'N') = 'Y'
6464             ) a, cs_incidents_all_b cs
6465             where cs.customer_product_id(+) = a.old_customer_product_id
6466             AND cs.contract_service_id(+) = a.topline_ID;
6467 
6468       CURSOR get_batch_rules_trm_csr
6469       IS
6470       SELECT credit_option,
6471              nvl(termination_reason_code,'EXP')
6472        FROM  oks_batch_rules
6473       WHERE  batch_id = p_batch_id;
6474 
6475       CURSOR get_batch_rules_csr
6476       IS
6477          SELECT b.ID biling_profile_id,
6478                 NVL (b.invoice_object1_id1, -2) invoicing_rule,
6479                 NVL (b.account_object1_id1, 1) accounting_rule,
6480                 a.transaction_date transfer_date,
6481                 a.credit_option,
6482                 nvl(a.termination_reason_code,'TRF') termination_reason_code,
6483                 a.retain_contract_number_flag,
6484                 a.contract_modifier,
6485                 a.contract_status,
6486                 a.transfer_notes_flag,
6487                 a.transfer_attachments_flag,
6488                 a.bill_lines_flag,
6489                 a.transfer_option_code transfer_option,
6490                 a.bill_account_id,
6491                 a.ship_account_id,
6492                 a.bill_address_id,
6493                 a.ship_address_id,
6494                 a.bill_contact_id,
6495 --              a.ship_contact_id,
6496                 NVL(a.new_account_id,p_new_acct_id) new_customer_id,
6497                 c.party_id new_party_id,
6498                 d.party_name party_name,
6499                 a.batch_id batch_id
6500            FROM oks_batch_rules a,
6501                 oks_billing_profiles_b b,
6502                 hz_cust_accounts c,
6503                 hz_parties d
6504           WHERE a.batch_id = p_batch_id
6505             AND b.ID(+) = a.billing_profile_id
6506             AND c.cust_account_id = NVL(a.new_account_id, p_new_acct_id)
6507             AND c.party_id = d.party_id;
6508 
6509       CURSOR get_topline_dates_csr
6510 
6511       IS
6512          SELECT distinct temp.topline_id
6513          ,line.start_date,
6514                 line.end_date
6515            FROM okc_k_lines_b line
6516                , oks_instance_k_dtls_temp temp
6517           WHERE line.ID = temp.topline_id;
6518 
6519       CURSOR check_renewal_link (
6520          p_line_id                           NUMBER
6521       )
6522       IS
6523          SELECT subject_cle_id
6524            FROM okc_operation_instances op,
6525                 okc_operation_lines ol
6526           WHERE ol.oie_id = op.ID
6527             AND op.cop_id = 41
6528             AND ol.subject_cle_id = p_line_id;
6529 
6530       CURSOR get_qclid_csr (
6531          p_id                                NUMBER
6532       )
6533       IS
6534          SELECT qcl_id
6535            FROM okc_k_headers_all_b
6536           WHERE ID = p_id;
6537 
6538       CURSOR check_relation_csr
6539       IS
6540          SELECT DISTINCT a.relationship_type
6541                     FROM hz_relationships a,
6542                          hz_cust_accounts b1,
6543                          hz_cust_accounts b2,
6544                          oks_instance_temp c
6545                    WHERE (   (    a.object_id = b1.party_id
6546                               AND a.subject_id = b2.party_id
6547                              )
6548                           OR (    a.object_id = b2.party_id
6549                               AND a.subject_id = b1.party_id
6550                              )
6551                          )
6552                      AND a.relationship_type =
6553                                        fnd_profile.VALUE ('OKS_TRF_PARTY_REL')
6554                      AND a.status = 'A'
6555                      AND TRUNC (c.transfer_date) BETWEEN TRUNC (a.start_date)
6556                                                      AND TRUNC (a.end_date)
6557                      AND b1.cust_account_id = c.new_customer_acct_id
6558                      AND b2.cust_account_id = c.old_customer_acct_id
6559                      AND ROWNUM < 2;
6560 
6561 
6562 
6563       CURSOR Check_batch_csr (
6564          p_batch_id                          NUMBER
6565       )
6566       IS
6567          SELECT 'x'
6568            FROM oks_batch_rules
6569           WHERE batch_id = p_batch_id;
6570 
6571 
6572 
6573       CURSOR get_inst_hist_csr (
6574          p_batch_id                          NUMBER
6575       )
6576       IS
6577         SELECT b.ID,
6578                (SELECT start_date
6579                   FROM okc_k_headers_all_b
6580                  WHERE ID = new_contract_id),
6581                (SELECT end_date
6582                   FROM okc_k_headers_all_b
6583                  WHERE ID = new_contract_id),
6584                (SELECT sts_code
6585                   FROM okc_k_headers_all_b
6586                  WHERE ID = new_contract_id),
6587                (SELECT start_date
6588                   FROM okc_k_lines_b
6589                  WHERE ID = new_serviceline_id),
6590                (SELECT end_date
6591                   FROM okc_k_lines_b
6592                  WHERE ID = new_serviceline_id),
6593                (SELECT price_negotiated
6594                   FROM okc_k_lines_b
6595                  WHERE ID = new_subline_id)
6596           FROM oks_instance_k_dtls_temp a,
6597                oks_instance_history b
6598          WHERE b.batch_id = p_batch_id
6599            AND a.instance_id = b.instance_id
6600            AND b.transaction_type = 'TRF';
6601 
6602 
6603 
6604 
6605       Cursor l_subline_invtext_csr Is
6606       Select  Kl.Id
6607             ,(substr(ksl.invoice_text,1,instr(ksl.invoice_text,':',1,3))||kl.start_date||' - '|| kl.end_date)
6608       From   Okc_k_lines_b Kl
6609              ,Oks_k_lines_v Ksl
6610             ,OKs_instance_k_dtls_temp temp
6611       Where kl.id = temp.subline_id
6612       And   Ksl.cle_id = Kl.id;
6613 
6614       Cursor L_topline_csr Is
6615       Select distinct a.Topline_id, a.start_date, a.end_date
6616       From (select line.cle_id topline_id
6617             , min(line.start_date) start_date
6618             , max(line.end_date) end_date
6619              From  OKs_instance_k_dtls_temp temp
6620                   , okc_K_lines_b line
6621              Where line.cle_id = temp.topline_id
6622              And   line.lse_id = 18
6623              group by line.cle_id) a;
6624 
6625       Cursor l_invoice_text_csr Is
6626       Select distinct Kl.Id
6627             ,(substr(ksl.invoice_text,1,instr(ksl.invoice_text,':',1,1))||kl.start_date||' - '|| kl.end_date)
6628       From   Okc_k_lines_b Kl
6629              ,Oks_k_lines_v Ksl
6630             ,OKs_instance_k_dtls_temp temp
6631       Where kl.id = temp.topline_id
6632       And   Ksl.cle_id = Kl.id;
6633 
6634       Cursor L_contract_csr Is
6635       Select distinct a.Contract_id, a.start_date, a.end_date
6636       From   (Select line.dnz_chr_id contract_id
6637                     ,min(line.start_date) start_date
6638                    , max(line.end_date) end_date
6639               From  OKs_instance_k_dtls_temp temp
6640                   , okc_k_lines_b line
6641               Where line.dnz_chr_id = temp.contract_id
6642               And   line.lse_id = 14
6643               group by line.dnz_chr_id) a;
6644 
6645 
6646     CURSOR get_srv_details_csr(p_contract_id Number)  IS
6647         Select Distinct temp.topline_id
6648               ,St.ste_code
6649         From   Oks_instance_k_dtls_temp temp
6650              , okc_k_lines_b line
6651              , Okc_statuses_b St
6652         Where  line.id = temp.Topline_id
6653         And    temp.contract_id = p_contract_id
6654         And    St.code = line.sts_code;
6655 
6656    Cursor get_contract_csr Is
6657         Select distinct temp.contract_id
6658                , kh.authoring_org_id
6659                , kh.inv_organization_id
6660                , St.ste_code
6661         From   OKs_instance_k_dtls_temp temp
6662              , Okc_k_headers_all_b Kh
6663              , Okc_statuses_b St
6664         Where Kh.Id = temp.contract_id
6665         And   St.code = Kh.sts_code;
6666 
6667 
6668       -- Local Variables
6669       l_renewal_id              NUMBER;
6670       l_source_line_id          NUMBER;
6671       l_object_line_id          NUMBER;
6672       l_object_chr_id           NUMBER;
6673       l_transfer_id             NUMBER;
6674       l_qcl_id                  NUMBER;
6675 
6676       j                         NUMBER;
6677       l_count                   NUMBER                                   := 1;
6678       l_sts_code                VARCHAR2 (30);
6679       l_ste_code                VARCHAR2 (30);
6680       l_relationship            VARCHAR2 (40);
6681       l_term_date               DATE;
6682       l_cancel_date             DATE;
6683       l_ctr                     NUMBER                                   := 1;
6684       l_found                   BOOLEAN                                  := FALSE;
6685       l_dummy_var               VARCHAR2(1);
6686       -- Variables for attachments
6687       l_entity_name             VARCHAR2 (30);
6688       l_from_entity_name        VARCHAR2 (30);
6689       l_to_entity_name          VARCHAR2 (30);
6690       l_from_version            fnd_attached_documents.pk2_value%TYPE;
6691       -- Valiables for notes
6692       l_jtf_note_id             NUMBER;
6693       l_jtf_note_contexts_tab   jtf_notes_pub.jtf_note_contexts_tbl_type;
6694       l_note_details            csi_mass_edit_entries_tl.Description%TYPE;
6695       --Contract Line Table
6696       l_clev_tbl_in             okc_contract_pub.clev_tbl_type;
6697       l_clev_tbl_out            okc_contract_pub.clev_tbl_type;
6698       --Contract Header
6699       l_chrv_tbl_in             okc_contract_pub.chrv_tbl_type;
6700       l_chrv_tbl_out            okc_contract_pub.chrv_tbl_type;
6701       -- workflow variabled
6702       l_wf_attributes           oks_wf_k_process_pvt.wf_attr_details;
6703       -- Instance History
6704       l_inst_dtls_tbl           oks_ihd_pvt.ihdv_tbl_type;
6705       x_inst_dtls_tbl           oks_ihd_pvt.ihdv_tbl_type;
6706       l_insthist_rec            oks_ins_pvt.insv_rec_type;
6707       x_insthist_rec            oks_ins_pvt.insv_rec_type;
6708       l_warn_return_status       Varchar2(1);
6709       -- plsql collections for old and new contract ids and other
6710       -- attributes
6711       contract_number           okc_datatypes.var120tabtyp;
6712       contract_number_modifier  okc_datatypes.var120tabtyp;
6713       contractnumber_modifier   okc_datatypes.var240tabtyp;
6714       line_number               okc_datatypes.var240tabtyp;
6715       qa_contract_id            okc_datatypes.numbertabtyp;
6716       customer_product_tbl      okc_datatypes.numbertabtyp;
6717       contract_id               okc_datatypes.numbertabtyp;
6718       old_contract_id           okc_datatypes.numbertabtyp;
6719       subline_id                okc_datatypes.numbertabtyp;
6720       topline_id                okc_datatypes.numbertabtyp;
6721       subline_old_sdate         okc_datatypes.datetabtyp;
6722       subline_sdate             okc_datatypes.datetabtyp;
6723       subline_edate             okc_datatypes.datetabtyp;
6724       subline_sts               okc_datatypes.var30tabtyp;
6725       hdr_sdt                   okc_datatypes.datetabtyp;
6726       hdr_edt                   okc_datatypes.datetabtyp;
6727       hdr_sts                   okc_datatypes.var30tabtyp;
6728       hdr_ste                   okc_datatypes.var30tabtyp;
6729       topline_sdate             okc_datatypes.datetabtyp;
6730       topline_edate             okc_datatypes.datetabtyp;
6731       topline_sts               okc_datatypes.var30tabtyp;
6732       sr_date                   okc_datatypes.datetabtyp;
6733       new_edt                   okc_datatypes.datetabtyp;
6734       party_id                  okc_datatypes.numbertabtyp;
6735       term_date                 okc_datatypes.datetabtyp;
6736       trf_date                  okc_datatypes.datetabtyp;
6737       idc_date                  okc_datatypes.datetabtyp;
6738       new_contract_id           okc_datatypes.numbertabtyp;
6739       new_line_id               okc_datatypes.numbertabtyp;
6740       new_subline_id            okc_datatypes.numbertabtyp;
6741       custprod_id               okc_datatypes.numbertabtyp;
6742       price_unit                okc_datatypes.numbertabtyp;
6743       price_negotiated          okc_datatypes.numbertabtyp;
6744       number_of_items           okc_datatypes.numbertabtyp;
6745       new_k_sdate               okc_datatypes.datetabtyp;
6746       new_k_edate               okc_datatypes.datetabtyp;
6747       new_l_sdate               okc_datatypes.datetabtyp;
6748       new_l_edate               okc_datatypes.datetabtyp;
6749       new_k_status              okc_datatypes.var30tabtyp;
6750       new_price_negotiated      okc_datatypes.numbertabtyp;
6751       ins_id                    okc_datatypes.numbertabtyp;
6752       header_id                 okc_datatypes.numbertabtyp;
6753       top_line_id               okc_datatypes.numbertabtyp;
6754       sub_line_id               okc_datatypes.numbertabtyp;
6755       Hdr_new_Sdate             okc_datatypes.datetabtyp;
6756       line_new_sdate            okc_datatypes.datetabtyp;
6757       Hdr_new_edate             okc_datatypes.datetabtyp;
6758       line_new_edate            okc_datatypes.datetabtyp;
6759       transaction_date          okc_datatypes.datetabtyp;
6760       hdr_warranty              okc_datatypes.var30tabtyp;
6761       org_id                    okc_datatypes.numbertabtyp;
6762       organization_id           okc_datatypes.numbertabtyp;
6763       credit_option             okc_datatypes.var30tabtyp;
6764       inv_text                  var2000tabtyp;
6765       invoice_text              var2000tabtyp;
6766       l_return_status           VARCHAR2 (1)                            := 'S';
6767       l_msg_count               NUMBER;
6768       l_msg_data                VARCHAR2 (2000);
6769       l_suppress_credit         VARCHAR2 (2)                            := 'N';
6770       l_full_credit             VARCHAR2 (2)                            := 'N';
6771       l_trf_dt                  DATE;
6772       l_trm_dt                  DATE;
6773       l_idc_dt                  DATE;
6774       l_top_sdt                 DATE;
6775       l_top_edt                 DATE;
6776       l_rnrl_rec_out            oks_renew_util_pvt.rnrl_rec_type;
6777       batch_rules_rec           batch_rules_rec_type;
6778       batch_rules_trm_rec       batch_rules_trm_type;
6779       l_cancel_source           Varchar2(30);
6780       l_cancel_reason           Varchar2(30);
6781       l_new_acct_id             Number;
6782       l_old_acct_id             Number;
6783       l_instance_history_created Varchar2(1) := 'N';
6784       l_date_cancel             Date;
6785       l_term_flag               VARCHAR2(1) := 'N';
6786       l_termination_source      Varchar2(30);
6787       l_sr_flag                 varchar2(1);
6788       l_credit_option           Varchar(30);
6789       l_termination_reason      Varchar2(240);
6790       L_line_date_renewed  Date;
6791       L_hdr_date_renewed   Date;
6792 
6793 
6794 
6795       FUNCTION check_contract_duplicate (
6796           p_k_id                     IN       NUMBER
6797         )
6798       RETURN BOOLEAN
6799       IS
6800       BEGIN
6801          IF l_gl_dummy = p_k_id
6802          THEN
6803             l_gl_dummy := p_k_id;
6804             RETURN (TRUE);
6805          ELSE
6806             l_gl_dummy := p_k_id;
6807             RETURN (FALSE);
6808          END IF;
6809        END;
6810 
6811    -- Begin Update Contracts
6812    BEGIN
6813       IF (p_init_msg_list = 'Y') then
6814           fnd_msg_pub.initialize();
6815       END IF;
6816 
6817       fnd_file.put_line(fnd_file.log,'(OKS) -> ***********OKS**********Begin*********OKS***********');
6818 
6819       fnd_file.put_line(fnd_file.log,'(OKS) -> Batch Id = ( '|| p_batch_id||' ) New Account Id = ( '||p_new_acct_id ||' )');
6820       l_return_status := 'S';
6821 
6822 
6823 
6824       If p_batch_id IS NULL
6825       THEN
6826          fnd_file.put_line(fnd_file.log,'(OKS) -> Batch id is not passed to Contracts.');
6827 
6828          RAISE G_EXCEPTION_HALT_VALIDATION;
6829       ELSE
6830 
6831          OPEN Check_batch_csr (p_batch_id);
6832          FETCH Check_batch_csr into l_dummy_var;
6833          IF Check_batch_csr%NOTFOUND
6834          THEN
6835             fnd_file.put_line(fnd_file.log,'(OKS) -> No batch rules defined');
6836 
6837             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6838             THEN
6839                fnd_log.STRING (fnd_log.level_event,
6840                          g_module_current || 'oks_mass_update.Update_contracts',
6841                          'No Batch rules defined' );
6842             END IF;
6843 
6844             oks_ibint_pub.create_batch_rules
6845             (
6846              P_Api_Version           => 1.0,
6847              P_init_msg_list         => 'F',
6848              P_Batch_ID              => p_batch_id,
6849              p_batch_type            => p_batch_type,
6850              x_return_status         => l_return_status,
6851              x_msg_count             => l_msg_count,
6852              x_msg_data	             => l_msg_data );
6853 
6854              fnd_file.put_line(fnd_file.log,'(OKS) -> Forms Batch Rules status = ( '||l_return_status||' )');
6855              IF l_return_status <> 'S'
6856              THEN
6857                  Okc_api.set_message
6858                 (g_app_name,
6859                 'OKS_BATCH_ERROR'
6860                 );
6861 
6862                  RAISE g_exception_halt_validation;
6863              END IF;
6864 
6865          END IF;
6866          CLOSE Check_batch_csr;
6867 
6868       END IF;
6869 
6870     IF p_batch_type = 'XFER'
6871     THEN
6872       OPEN get_batch_rules_csr;
6873       FETCH get_batch_rules_csr  INTO batch_rules_rec;
6874 
6875       IF get_batch_rules_csr%NOTFOUND
6876       THEN
6877 
6878          Okc_api.set_message
6879                 (g_app_name,
6880                 'OKS_NO_BATCH_RULES_EXIST' ,
6881                  'BATCHID',
6882                  P_batch_id
6883                 );
6884 
6885          RAISE G_EXCEPTION_HALT_VALIDATION ;
6886 
6887          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6888          THEN
6889          fnd_log.STRING (fnd_log.level_event,
6890                          g_module_current || 'oks_mass_update.Update_contracts',
6891                          'No Batch rules created' );
6892          END IF;
6893 
6894       END IF;
6895 
6896       CLOSE get_batch_rules_csr;
6897     ELSIF p_batch_type = 'TRM' Then
6898       OPEN get_batch_rules_trm_csr;
6899       FETCH get_batch_rules_trm_csr  INTO batch_rules_trm_rec;
6900 
6901       IF get_batch_rules_trm_csr%NOTFOUND
6902       THEN
6903          Okc_api.set_message
6904                 (g_app_name,
6905                 'OKS_NO_BATCH_RULES_EXIST',
6906                  'BATCHID',
6907                  P_batch_id
6908                 );
6909 
6910          RAISE G_EXCEPTION_HALT_VALIDATION ;
6911          IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6912          THEN
6913          fnd_log.STRING (fnd_log.level_event,
6914                          g_module_current || 'oks_mass_update.Update_contracts',
6915                          'No Batch rules created' );
6916          END IF;
6917        END IF;
6918      CLOSE get_batch_rules_trm_csr;
6919    END IF;
6920 
6921       fnd_file.put_line(fnd_file.log,'(OKS) -> Batch Type = ( ' || p_batch_type
6922                          || ' ) Batch id = ( ' || p_batch_id || ' ) Transfer Option = ( ' || batch_rules_rec.transfer_option|| ' )');
6923 
6924       IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
6925       THEN
6926       fnd_log.STRING (fnd_log.level_event,
6927                      g_module_current || 'oks_mass_update.Update_contracts',
6928                      'Batch Type = ( '|| p_batch_type || ') Batch id = ( '
6929                      || p_batch_id || ')' );
6930       END IF;
6931 
6932       IF p_batch_type = 'XFER' -- 'CSI_MU_TRANSFER_OWNER'
6933       THEN
6934 
6935          IF P_new_acct_id IS NULL
6936          THEN
6937                 fnd_file.put_line(fnd_file.log,'(OKS) -> New Account id is not passed to Contracts.');
6938                 okc_api.set_message
6939                 (
6940                  g_app_name,
6941                 'OKS_NULL_ACCOUNT_ID',
6942                 'BATCHID',
6943                 P_batch_id
6944                 );
6945 
6946                 RAISE G_EXCEPTION_HALT_VALIDATION;
6947          END IF;
6948          IF UPPER (batch_rules_rec.transfer_option) = 'NOCHANGE'
6949          THEN
6950             NULL;
6951          END IF;
6952 
6953          IF UPPER (batch_rules_rec.transfer_option) = 'COVERAGE'
6954          THEN
6955             l_relationship := NULL;
6956 
6957             OPEN check_relation_csr;
6958             FETCH check_relation_csr  INTO l_relationship;
6959             CLOSE check_relation_csr;
6960             fnd_file.put_line(fnd_file.log,'(OKS) -> Relationship = ( '|| l_relationship|| ' )');
6961          END IF;
6962          l_termination_source := 'IBTRANSFER';
6963 
6964          IF    batch_rules_rec.transfer_option = 'TERMINATE'
6965             OR batch_rules_rec.transfer_option = 'COVERAGE'
6966          THEN
6967             OPEN get_k_for_trfterm_csr (batch_rules_rec.transfer_option,
6968                                         l_relationship,
6969                                         batch_rules_rec.new_party_id,
6970                                         batch_rules_rec.credit_option
6971                                        );
6972 
6973             IF get_k_for_trfterm_csr%ISOPEN
6974             THEN
6975                FETCH get_k_for_trfterm_csr
6976                BULK COLLECT INTO contract_id,
6977                       subline_id,
6978                       subline_sdate,
6979                       subline_edate,
6980                       subline_sts,
6981                       hdr_sdt,
6982                       hdr_edt,
6983                       hdr_sts,
6984                       hdr_ste,
6985                       contract_number,
6986                       contract_number_modifier,
6987                       topline_id,
6988                       topline_sdate,
6989                       topline_edate,
6990                       party_id,
6991                       trf_date,
6992                       custprod_id,
6993                       price_negotiated,
6994                       price_unit,
6995                       number_of_items,
6996                       transaction_date,
6997                       Org_id,
6998                       credit_option,
6999                       organization_id;
7000             END IF;
7001 
7002             CLOSE get_k_for_trfterm_csr;
7003 
7004             fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate/Coverage: Number of impacted contracts = ( '
7005             || contract_id.COUNT || ' )');
7006 
7007             IF contract_id.count>0
7008             THEN
7009             FOR i IN 1..subline_sts.COUNT
7010             LOOP
7011             IF hdr_ste(i) = 'HOLD'
7012             THEN
7013                 l_found := TRUE;
7014                 IF FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
7015                 fnd_log.string(FND_LOG.LEVEL_ERROR,G_MODULE_CURRENT||'.oks_mass_update.Update_contracts',
7016                    ' Contract '||contract_number(i) ||' in QA_HOLD status' );
7017                 END IF;
7018 
7019                 OKC_API.SET_MESSAGE(
7020                 g_app_name,
7021                 'OKS_CONTRACT_HOLD',
7022                 'CONTRACTNUMBER',
7023                 CONTRACT_NUMBER(i)||' '||CONTRACT_NUMBER_MODIFIER(i)
7024                 );
7025 
7026             END IF;
7027             END LOOP;
7028 
7029             IF l_found
7030             THEN
7031                 l_return_status  := OKC_API.G_RET_STS_ERROR;
7032                 RAISE G_EXCEPTION_HALT_VALIDATION;
7033             END IF;
7034             FORALL i IN contract_id.FIRST .. contract_id.LAST
7035                INSERT INTO oks_instance_k_dtls_temp
7036                            (parent_id,
7037                             contract_id,
7038                             topline_id,
7039                             subline_id,
7040                             instance_id
7041                            )
7042                     VALUES (p_batch_id,
7043                             contract_id (i),
7044                             topline_id (i),
7045                             subline_id (i),
7046                             custprod_id (i)
7047                            );
7048             fnd_file.put_line(fnd_file.log,'(OKS) -> Insert into global temp table Successful');
7049 
7050            fnd_file.put_line(fnd_file.log,'subline_id.count'||subline_id.count);
7051 
7052             IF subline_id.COUNT > 0
7053             THEN
7054                FOR i IN subline_id.FIRST .. subline_id.LAST
7055                LOOP
7056 
7057 
7058                   l_trf_dt := trf_date (i);
7059                   l_date_cancel := trf_date(i);
7060                   l_term_flag:= 'N';
7061 
7062                   IF (TRUNC (l_date_cancel) <= TRUNC (subline_sdate (i)))
7063                   Then
7064                        l_date_cancel := subline_sdate(i);
7065                   Elsif ( TRUNC (subline_edate (i)) < TRUNC (l_date_cancel) )
7066                   Then
7067                        l_date_cancel := subline_edate(i) + 1;
7068                   End If;
7069 
7070                   IF    (TRUNC (l_trf_dt) <= TRUNC (subline_sdate (i)))
7071                   THEN
7072                      l_trf_dt := subline_sdate(i);
7073                   END IF;
7074                   IF ( TRUNC (subline_edate (i)) < TRUNC (l_trf_dt) )
7075                   THEN
7076                      l_trf_dt := subline_edate(i) + 1;
7077                      l_suppress_credit := 'Y';
7078                      l_full_credit := 'N';
7079                      l_term_flag := 'Y';
7080                   Else
7081                      IF UPPER (credit_option(i)) = 'FULL'
7082                      THEN
7083                         l_full_credit := 'Y';
7084                         l_suppress_credit := 'N';
7085 
7086                      ELSIF UPPER (credit_option(i)) = 'NONE'
7087                      THEN
7088                         l_suppress_credit := 'Y';
7089                      ELSIF UPPER (credit_option(i)) = 'CALCULATED'
7090                      THEN
7091                         l_suppress_credit := 'N';
7092                         l_full_credit := 'N';
7093                      End If;
7094                   End If;
7095 
7096 
7097 
7098 
7099 
7100                   fnd_file.put_line(fnd_file.log,'(OKS) -> For Subline = ( '||subline_id(i)||' ) Status = ( '
7101                                      ||subline_sts(i) ||' ) Transfer Date is = ( '|| l_trf_dt||' )');
7102 
7103                   fnd_file.put_line(fnd_file.log,'(OKS) -> Credit Option = ( '|| batch_rules_rec.credit_option
7104                   ||' ) Supress Credit = ( ' || l_suppress_credit || ' ) Full Credit = ( '
7105                   || l_full_credit || ' )');
7106                   okc_context.set_okc_org_context(org_id(i),organization_id(i));
7107 
7108                   terminate_subline
7109                      (p_status                    => subline_sts (i),
7110                       p_hdr_id                    => contract_id (i),
7111                       p_end_date                  => subline_edate (i),
7112                       p_cle_id                    => subline_id (i),
7113                       p_termination_date          => TRUNC (l_trf_dt),
7114                       p_cancellation_date         => TRUNC (l_date_cancel),
7115                       P_term_flag                 => l_term_flag,
7116                       p_terminate_reason          => batch_rules_rec.termination_reason_code,
7117                       p_termination_source        => l_termination_source,
7118                       p_suppress_credit           => l_suppress_credit,
7119                       p_full_credit               => l_full_credit,
7120                       x_return_status             => l_return_status
7121                      );
7122 
7123                   IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7124                   THEN
7125                   fnd_log.STRING (fnd_log.level_event,
7126                                  g_module_current || 'oks_mass_update.Update_contracts',
7127                                  'Terminate_subline status = ( '|| l_return_status);
7128                   END IF;
7129 
7130                   fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate_subline status = ( '|| l_return_status|| ' )');
7131 
7132                   IF NOT l_return_status = okc_api.g_ret_sts_success
7133                   THEN
7134                      x_return_status := l_return_status;
7135                      OKC_API.SET_MESSAGE
7136                     (
7137                      g_app_name,
7138                      'OKS_TERMINATE_ERROR',
7139                      'CONTRACTNUMBER',
7140                        CONTRACT_NUMBER(i)||' '||CONTRACT_NUMBER_MODIFIER(i)
7141 
7142                      );
7143 
7144                      RAISE g_exception_halt_validation;
7145                   END IF;
7146 
7147                END LOOP;
7148             END IF;
7149 
7150 
7151           --Terminate/Cancel the TOpl Line/Header if all the sublines/Lines are terminated/Canceled.
7152           Terminate_cancel
7153          (p_termination_reason  => batch_rules_rec.termination_reason_code ,
7154           P_termcancel_source   => 'IBTRANSFER',
7155           p_cancel_reason       => 'TRANSFER',
7156           X_return_status       => l_return_status,
7157           X_msg_count           => x_msg_count,
7158           X_msg_data            => x_msg_data);
7159 
7160 
7161           fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate/cancel Line/Hdr status = ( '|| l_return_status|| ' )');
7162 
7163           IF NOT l_return_status = okc_api.g_ret_sts_success
7164           THEN
7165                     x_return_status := l_return_status;
7166                      OKC_API.SET_MESSAGE
7167                     (
7168                      g_app_name,
7169                      'OKS_TERMINATE_CANCEL_ERROR'
7170                      );
7171                   RAISE g_exception_halt_validation;
7172           END IF;
7173    -- Insert into Instance History and Details
7174 
7175             -- Create instance History
7176             INSERT INTO oks_instance_history
7177                         (ID,
7178                          object_version_number,
7179                          instance_id,
7180                          transaction_type,
7181                          transaction_date,
7182                          reference_number,
7183                          PARAMETERS,
7184                          created_by,
7185                          creation_date,
7186                          last_updated_by,
7187                          last_update_date,
7188                          last_update_login,
7189                          batch_id
7190                         )
7191                (SELECT okc_p_util.raw_to_number (SYS_GUID ()),
7192                        1,
7193                        b.instance_id,
7194                        'TRF',
7195                        a.transaction_date,
7196                        b.instance_number,
7197                        NULL,                                      -- parameter
7198                        fnd_global.user_id,
7199                        SYSDATE,
7200                        fnd_global.user_id,
7201                        SYSDATE,
7202                        fnd_global.login_id,
7203                        p_batch_id
7204                   FROM oks_instance_temp a,
7205                        csi_item_instances b
7206                  WHERE a.old_customer_product_id = b.instance_id);
7207 
7208          fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History Created  ');
7209          --Set Variable to identify Instance history record is created to avoid duplicates.
7210           l_instance_history_created := 'Y';
7211             -- create instance history details
7212 
7213 
7214             FORALL i IN subline_id.FIRST .. subline_id.LAST
7215                INSERT INTO oks_inst_hist_details
7216                            (ID,
7217                             ins_id,
7218                             transaction_date,
7219                             transaction_type,
7220                             instance_id_new,
7221                             instance_qty_old,
7222                             instance_qty_new,
7223                             instance_amt_old,
7224                             instance_amt_new,
7225                             old_contract_id,
7226                             old_contact_start_date,
7227                             old_contract_end_date,
7228                             new_contract_id,
7229                             new_contact_start_date,
7230                             new_contract_end_date,
7231                             old_service_line_id,
7232                             old_service_start_date,
7233                             old_service_end_date,
7234                             new_service_line_id,
7235                             new_service_start_date,
7236                             new_service_end_date,
7237                             old_subline_id,
7238                             old_subline_start_date,
7239                             old_subline_end_date,
7240                             new_subline_id,
7241                             new_subline_start_date,
7242                             new_subline_end_date,
7243                             old_customer,
7244                             new_customer,
7245                             old_k_status,
7246                             new_k_status,
7247                             subline_date_terminated,
7248                             object_version_number,
7249                             created_by,
7250                             creation_date,
7251                             last_updated_by,
7252                             last_update_date,
7253                             last_update_login,
7254                             Date_Cancelled,
7255                             transfer_option
7256 
7257                            )
7258                            (SELECT
7259                            okc_p_util.raw_to_number (SYS_GUID ()),
7260                             ins_hist.id  ,
7261                             transaction_date(1),
7262                             'TRF',
7263                             custprod_id (i),
7264                             number_of_items (i),
7265                             number_of_items (i),
7266                             price_negotiated (i),
7267                             lines_b.PRICE_NEGOTIATED ,
7268                             contract_id (i),
7269                             hdr_sdt (i),
7270                             hdr_edt (i),
7271                             contract_id (i),
7272                             hdr_sdt (i),
7273                             hdr_edt (i),
7274                             topline_id(i),
7275                             topline_sdate (i),
7276                             topline_edate (i),
7277                             topline_id (i),
7278                             topline_sdate(i),
7279                             topline_edate (i),
7280                             subline_id (i),
7281                             subline_sdate (i),
7282                             subline_edate (i),
7283                             subline_id (i),
7284                             subline_sdate (i),
7285                             subline_edate (i),
7286                             p_old_acct_id, --  old_customer,
7287                             p_old_acct_id, --  new_customer,
7288                             hdr_sts (i),
7289                             hdr.sts_code,
7290                             lines_b.date_terminated,  -- subline_date_terminated,
7291                             1,
7292                             fnd_global.user_id,
7293                             SYSDATE,
7294                             fnd_global.user_id,
7295                             SYSDATE,
7296                             fnd_global.login_id,
7297                             lines_b.date_cancelled, --Date cancelled,
7298                             'TERM'
7299                             from oks_instance_history ins_hist,
7300                                Okc_k_lines_b lines_b,
7301                                okc_k_headers_all_b hdr
7302                                 Where   ins_hist.batch_id = p_batch_id
7303                              and instance_id = custprod_id(i) and  lines_b.id = subline_id (i)
7304                              And hdr.id =contract_id (i) )       ;
7305 
7306            fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History Details created successfully');
7307 
7308 
7309             END IF;
7310          END IF;
7311 
7312          IF    batch_rules_rec.transfer_option = 'TRANSFER'
7313             OR batch_rules_rec.transfer_option = 'COVERAGE'
7314          THEN
7315 
7316             OPEN get_k_for_transfer_csr (batch_rules_rec.transfer_option,
7317                                          l_relationship,
7318                                          batch_rules_rec.new_party_id,
7319                                          batch_rules_rec.credit_option
7320                                         );
7321 
7322             IF get_k_for_transfer_csr%ISOPEN
7323             THEN
7324                FETCH get_k_for_transfer_csr
7325                BULK COLLECT INTO contract_id,
7326                       hdr_sdt,
7327                       hdr_edt,
7328                       hdr_sts,
7329                       hdr_ste,
7330                       contract_number,
7331                       contract_number_modifier,
7332                       topline_id,
7333                       topline_sdate,
7334                       topline_edate,
7335                       subline_id,
7336                       subline_old_sdate,
7337                       subline_sdate,
7338                       subline_edate,
7339                       new_contract_id,
7340                       new_line_id,
7341                       new_subline_id,
7342                       subline_sts,
7343                       trf_date,
7344                       custprod_id,
7345                       price_negotiated,
7346                       price_unit,
7347                       number_of_items,
7348                       hdr_warranty,
7349                       transaction_date,
7350                       party_id,
7351                       org_id,
7352                       credit_option,
7353                       organization_id;
7354             END IF;
7355 
7356             CLOSE get_k_for_transfer_csr;
7357 
7358             fnd_file.put_line(fnd_file.log,'(OKS) -> Transfer/Coverage: Number of impacted contracts = ( '
7359             || contract_id.COUNT || ' )');
7360 
7361             IF contract_id.count > 0
7362             THEN
7363             FOR i IN 1..subline_sts.COUNT
7364             LOOP
7365             IF hdr_ste(i) = 'HOLD'
7366             THEN
7367                 l_found := TRUE;
7368                 IF FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
7369                 fnd_log.string(FND_LOG.LEVEL_ERROR,G_MODULE_CURRENT||'.oks_mass_update.Update_contracts',
7370                    ' Contract '||contract_number(i) ||' in QA_HOLD status' );
7371                 END IF;
7372 
7373 
7374                 OKC_API.SET_MESSAGE(
7375                 g_app_name,
7376                 'OKS_CONTRACT_HOLD',
7377                 'CONTRACTNUMBER',
7378                 CONTRACT_NUMBER(i)||' '||CONTRACT_NUMBER_MODIFIER(i)
7379                 );
7380 
7381             END IF;
7382             END LOOP;
7383 
7384             IF l_found
7385             THEN
7386                 l_return_status  := OKC_API.G_RET_STS_ERROR;
7387                 RAISE G_EXCEPTION_HALT_VALIDATION;
7388             END IF;
7389 
7390             Delete  Oks_Instance_k_dtls_temp where parent_id = p_batch_id;
7391 
7392             FORALL i IN contract_id.FIRST .. contract_id.LAST
7393                INSERT INTO oks_instance_k_dtls_temp
7394                            (parent_id,
7395                             contract_id,
7396                             topline_id,
7397                             subline_id,
7398                             new_contract_id,
7399                             new_serviceline_id,
7400                             new_subline_id,
7401                             instance_id,
7402                             new_start_date,
7403                             new_end_date,
7404                             amount
7405                            )
7406                     VALUES (p_batch_id,
7407                             contract_id (i),
7408                             topline_id (i),
7409                             subline_id (i),
7410                             new_contract_id (i),
7411                             new_line_id (i),
7412                             new_subline_id (i),
7413                             custprod_id (i),
7414                             subline_sdate (i),
7415                             subline_edate (i),
7416                             price_negotiated (i)
7417                            );
7418             fnd_file.put_line(fnd_file.log,'(OKS) -> Insert into global temp table Successful');
7419 
7420             -- Terminate/Cancel all the eligible lines
7421 
7422 
7423             fnd_file.put_line(fnd_file.log,'(OKS) -> **********Terminate All the impacted Sublines ********** ');
7424 
7425             FOR i IN 1 .. subline_id.COUNT
7426             LOOP
7427                   l_trf_dt := trf_date (i);
7428                   l_date_cancel := trf_date(i);
7429                   l_term_flag   := 'N';
7430                   IF (TRUNC (l_date_cancel) <= TRUNC (subline_old_sdate (i)))
7431                   Then
7432                        l_date_cancel := subline_old_sdate(i);
7433                   Elsif ( TRUNC (l_date_cancel)  > TRUNC (subline_edate (i))  )
7434                   Then
7435                        l_date_cancel := subline_edate(i) + 1;
7436                   End If;
7437 
7438                   IF    (TRUNC (l_trf_dt) <= TRUNC (subline_old_sdate (i)))
7439                   THEN
7440                      l_trf_dt := subline_old_sdate(i);
7441                   END IF;
7442 
7443                   IF ( TRUNC (subline_edate (i)) < TRUNC (l_trf_dt) )
7444                   THEN
7445                      l_trf_dt := subline_edate(i) + 1;
7446                      l_suppress_credit := 'Y';
7447                      l_full_credit := 'N';
7448                      l_term_flag   := 'Y';
7449                   ELse
7450                      IF UPPER (credit_option(i)) = 'FULL'
7451                      THEN
7452                         l_full_credit := 'Y';
7453                         l_suppress_credit := 'N';
7454 
7455                      ELSIF UPPER (credit_option(i)) = 'NONE'
7456                      THEN
7457                         l_suppress_credit := 'Y';
7458                      ELSIF UPPER (credit_option(i)) = 'CALCULATED'
7459                      THEN
7460                         l_suppress_credit := 'N';
7461                         l_full_credit := 'N';
7462                      End If;
7463                    End If;
7464 
7465 
7466 
7467 
7468                fnd_file.put_line(fnd_file.log,'(OKS) -> For Subline = ( '||subline_id(i)||' ) Status = ( '
7469                                   ||subline_sts(i) ||' ) Transfer Date is = ( '|| l_trf_dt || ' )');
7470 
7471                fnd_file.put_line(fnd_file.log,'(OKS) -> Credit Option = ( '|| batch_rules_rec.credit_option
7472                ||' ) Supress Credit = ( ' || l_suppress_credit || ' ) Full Credit = ( '
7473                || l_full_credit|| ' )');
7474                okc_context.set_okc_org_context(org_id(i),organization_id(i));
7475 
7476                terminate_subline
7477                   (p_status                    => subline_sts (i),
7478                    p_hdr_id                    => contract_id (i),
7479                    p_end_date                  => subline_edate (i),
7480                    p_cle_id                    => subline_id (i),
7481                    p_termination_date          => TRUNC (l_trf_dt),
7482                    p_cancellation_date          => TRUNC (l_date_cancel),
7483                    p_term_flag                  => l_term_flag,
7484                    p_terminate_reason          => batch_rules_rec.termination_reason_code,
7485                    p_termination_source        => l_termination_source,
7486                    p_suppress_credit           => l_suppress_credit,
7487                    p_full_credit               => l_full_credit,
7488                    x_return_status             => l_return_status
7489                   );
7490 
7491                fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate_subline status = ( '|| l_return_status|| ' )');
7492 
7493                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7494                THEN
7495                fnd_log.STRING (fnd_log.level_event,
7496                              g_module_current || 'oks_mass_update.Update_contracts',
7497                              'Terminate_subline status = ( '|| l_return_status);
7498                END IF;
7499 
7500                IF NOT l_return_status = okc_api.g_ret_sts_success
7501                THEN
7502                   x_return_status := l_return_status;
7503                      OKC_API.SET_MESSAGE
7504                     (
7505                      g_app_name,
7506                      'OKS_TERMINATE_ERROR',
7507                      'CONTRACTNUMBER',
7508                        CONTRACT_NUMBER(i)||' '||CONTRACT_NUMBER_MODIFIER(i),
7509                      'SUBLINE',
7510                      subline_id (i)
7511                      );
7512                   RAISE g_exception_halt_validation;
7513                END IF;
7514             END LOOP;
7515 
7516 
7517 
7518 
7519 
7520             fnd_file.put_line(fnd_file.log,'(OKS) -> *****************Create New Contracts****************');
7521 
7522             -- Create new contract
7523             create_contract (p_api_version        => 1.0,
7524                              p_batch_rules        => batch_rules_rec,
7525                              P_transfer_date      => trf_date(1),
7526                              x_return_status      => l_return_status,
7527                              x_msg_data           => x_msg_data,
7528                              x_msg_count          => x_msg_count
7529                             );
7530 
7531             IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7532             THEN
7533             fnd_log.STRING (fnd_log.level_event,
7534                              g_module_current || 'oks_mass_update.Update_contracts',
7535                              'create_contract status = ( '|| l_return_status || ')');
7536             END IF;
7537 
7538             fnd_file.put_line(fnd_file.log,'(OKS) -> Create contracts Status = ( '|| l_return_status|| ' )');
7539 
7540             IF NOT l_return_status = okc_api.g_ret_sts_success
7541             THEN
7542                x_return_status := l_return_status;
7543 
7544                RAISE g_exception_halt_validation;
7545             END IF;
7546 
7547             -- Update the topline amount
7548             FORALL i IN 1 .. new_line_id.COUNT
7549                UPDATE okc_k_lines_b
7550                   SET price_negotiated =
7551                          (SELECT NVL (SUM (NVL (price_negotiated, 0)), 0)
7552                             FROM okc_k_lines_b
7553                            WHERE cle_id = new_line_id (i)
7554                              AND lse_id IN (9, 25))
7555                 WHERE ID = new_line_id (i);
7556 
7557             fnd_file.put_line(fnd_file.log,'(OKS) -> Topline amounts updated successfully');
7558 
7559             -- Update the contract amount
7560             FORALL i IN 1 .. new_contract_id.COUNT
7561                UPDATE okc_k_headers_all_b
7562                   SET estimated_amount =
7563                          (SELECT NVL (SUM (NVL (price_negotiated, 0)), 0)
7564                             FROM okc_k_lines_b
7565                            WHERE dnz_chr_id = new_contract_id (i)
7566                              AND lse_id IN (1, 19))
7567                 WHERE ID = new_contract_id (i);
7568 
7569             fnd_file.put_line(fnd_file.log,'(OKS) -> Header amounts updated successfully');
7570 
7571           --Terminate/Cancel the TOpl Line/Header if all the sublines/Lines are terminated/Canceled.
7572           Terminate_cancel
7573          (p_termination_reason  => batch_rules_rec.termination_reason_code,
7574           P_termcancel_source   => 'IBTRANSFER',
7575           p_cancel_reason       => 'TRANSFER',
7576           X_return_status       => l_return_status,
7577           X_msg_count           => x_msg_count,
7578           X_msg_data            => x_msg_data);
7579 
7580           fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate/cancel Line/Hdr status = ( '|| l_return_status|| ' )');
7581 
7582           IF NOT l_return_status = okc_api.g_ret_sts_success
7583           THEN
7584                     x_return_status := l_return_status;
7585                      OKC_API.SET_MESSAGE
7586                     (
7587                      g_app_name,
7588                      'OKS_TERMINATE_CANCEL_ERROR'
7589                      );
7590                   RAISE g_exception_halt_validation;
7591           END IF;
7592 
7593 
7594             l_gl_dummy := 0;
7595 
7596             fnd_file.put_line(fnd_file.log,'(OKS) -> Create transfer Transaction Source');
7597 
7598             -- create 'transfer' transaction source
7599             FOR i IN 1 .. new_subline_id.COUNT
7600             LOOP
7601 
7602             IF new_subline_id(i) IS NOT NULL
7603             THEN
7604                create_transaction_source
7605                                       (p_batch_id            => p_batch_id,
7606                                        p_source_line_id      => subline_id (i),
7607                                        p_target_line_id      => new_subline_id (i),
7608                                        p_source_chr_id       => contract_id (i),
7609                                        p_target_chr_id       => new_contract_id(i),
7610                                        p_transaction         => 'TRANSFER',
7611                                        x_return_status       => l_return_status,
7612                                        x_msg_count           => l_msg_count,
7613                                        x_msg_data            => l_msg_data
7614                                       );
7615                IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)
7616                THEN
7617                fnd_log.STRING (fnd_log.level_event,
7618                                  g_module_current || 'oks_mass_update.Update_contracts',
7619                                  'create_transaction_source(transfer) status = ( '|| l_return_status || ')');
7620                END IF;
7621 
7622                fnd_file.put_line(fnd_file.log,'(OKS) -> Create transfer transaction source ( '
7623                                   ||i||' )' || 'status = ( ' || l_return_status ||' )');
7624 
7625                IF NOT l_return_status = okc_api.g_ret_sts_success
7626                THEN
7627                   x_return_status := l_return_status;
7628                   RAISE g_exception_halt_validation;
7629                END IF;
7630             END IF;
7631 
7632             END LOOP;
7633 
7634             fnd_file.put_line(fnd_file.log,'(OKS) -> Create Renewal Transaction Source');
7635 
7636             -- create 'Renewal'transaction source
7637             FOR i IN 1 .. new_subline_id.COUNT
7638             LOOP
7639             IF new_subline_id(i) IS NOT NULL
7640             THEN
7641 --             l_object_line_id := get_object_line_id (subline_id (i));
7642 
7643                get_object_line_id(subline_id (i),l_object_line_id,l_object_chr_id);
7644 
7645                IF l_object_line_id IS NOT NULL
7646                THEN
7647                   --Oks_Ib_Util_Pub.
7648                   create_transaction_source
7649                                       (p_batch_id            => p_batch_id,
7650                                        p_source_line_id      => l_object_line_id,
7651                                        p_target_line_id      => new_subline_id (i),
7652                                        p_source_chr_id       => l_object_chr_id,
7653                                        p_target_chr_id       => new_contract_id(i),
7654                                        p_transaction         => 'RENEWAL',
7655                                        x_return_status       => l_return_status,
7656                                        x_msg_count           => l_msg_count,
7657                                        x_msg_data            => l_msg_data
7658                                       );
7659 
7660                   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
7661                   THEN
7662                   fnd_log.STRING (fnd_log.level_statement,
7663                                      g_module_current || 'oks_mass_update.Update_contracts',
7664                                      'create_transaction_source (Renewal) status = ( '|| l_return_status || ')');
7665                   END IF;
7666 
7667                   fnd_file.put_line(fnd_file.log,'(OKS) -> Create renewal transaction source ( '
7668                                      ||i||' )' || 'status = ( '|| l_return_status || ' )');
7669 
7670                   IF NOT l_return_status = okc_api.g_ret_sts_success
7671                   THEN
7672                      x_return_status := l_return_status;
7673 
7674                      RAISE g_exception_halt_validation;
7675                   END IF;
7676                  Update okc_k_lines_b set date_renewed = trf_date(1)
7677                   Where id =  l_object_line_id
7678                   And date_renewed is null;
7679 
7680                   L_line_date_renewed := OKS_IB_UTIL_PVT.Check_renewed_Sublines(l_object_line_id);
7681                   Update okc_k_lines_b set date_renewed = l_line_date_renewed
7682                   Where id = (select cle_id from okc_k_lines_b where id = l_object_line_id)
7683                   And date_renewed Is Null;
7684 
7685                   l_hdr_date_renewed := OKS_IB_UTIL_PVT.Check_renewed_lines(l_object_line_id);
7686                   Update okc_k_headers_all_b set date_renewed = l_line_date_renewed
7687                   Where id = (select dnz_chr_id from okc_k_lines_b where id = l_object_line_id)
7688                   And date_renewed Is Null;
7689 
7690 
7691 
7692 
7693                END IF;
7694             END IF;
7695             END LOOP;
7696 
7697            fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History created successfully');
7698 
7699                -- Insert into Instance History and Details
7700             If l_instance_history_created = 'N' Then
7701             -- Create instance History
7702             INSERT INTO oks_instance_history
7703                         (ID,
7704                          object_version_number,
7705                          instance_id,
7706                          transaction_type,
7707                          transaction_date,
7708                          reference_number,
7709                          PARAMETERS,
7710                          created_by,
7711                          creation_date,
7712                          last_updated_by,
7713                          last_update_date,
7714                          last_update_login,
7715                          batch_id
7716                         )
7717                (SELECT okc_p_util.raw_to_number (SYS_GUID ()),
7718                        1,
7719                        b.instance_id,
7720                        'TRF',
7721                        a.transaction_date,
7722                        b.instance_number,
7723                        NULL,                                      -- parameter
7724                        fnd_global.user_id,
7725                        SYSDATE,
7726                        fnd_global.user_id,
7727                        SYSDATE,
7728                        fnd_global.login_id,
7729                        p_batch_id
7730                   FROM oks_instance_temp a,
7731                        csi_item_instances b
7732                  WHERE a.old_customer_product_id = b.instance_id);
7733 
7734           End If;
7735             -- create instance history details
7736 fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History created successfully');
7737 
7738             FORALL i IN subline_id.FIRST .. subline_id.LAST
7739                INSERT INTO oks_inst_hist_details
7740                            (ID,
7741                             ins_id,
7742                             transaction_date,
7743                             transaction_type,
7744                             instance_id_new,
7745                             instance_qty_old,
7746                             instance_qty_new,
7747                             instance_amt_old,
7748                             instance_amt_new,
7749                             old_contract_id,
7750                             old_contact_start_date,
7751                             old_contract_end_date,
7752                             new_contract_id,
7753                             new_contact_start_date,
7754                             new_contract_end_date,
7755                             old_service_line_id,
7756                             old_service_start_date,
7757                             old_service_end_date,
7758                             new_service_line_id,
7759                             new_service_start_date,
7760                             new_service_end_date,
7761                             old_subline_id,
7762                             old_subline_start_date,
7763                             old_subline_end_date,
7764                             new_subline_id,
7765                             new_subline_start_date,
7766                             new_subline_end_date,
7767                             old_customer,
7768                             new_customer,
7769                             old_k_status,
7770                             new_k_status,
7771                             subline_date_terminated,
7772                             object_version_number,
7773                             created_by,
7774                             creation_date,
7775                             last_updated_by,
7776                             last_update_date,
7777                             last_update_login,
7778                             Date_Cancelled
7779                            )
7780                           (Select okc_p_util.raw_to_number (SYS_GUID ()),
7781                             inshist.id ,
7782                             transaction_date(i),
7783                             'TRF',
7784                             custprod_id (i),
7785                             number_of_items (i),
7786                             number_of_items (i),
7787                             price_negotiated (i),
7788                             Line.PRICE_NEGOTIATED ,
7789                             contract_id (i),
7790                             hdr_sdt (i),
7791                             hdr_edt (i),
7792                             contract_id (i),
7793                             hdr_sdt (i),
7794                             hdr_edt (i),
7795                             topline_id(i),
7796                             topline_sdate (i),
7797                             topline_edate (i),
7798                             topline_id (i),
7799                             topline_sdate(i),
7800                             topline_edate (i),
7801                             subline_id (i),
7802                             subline_old_sdate (i),
7803                             subline_edate (i),
7804                             subline_id (i),
7805                             subline_old_sdate (i),
7806                             subline_edate (i),
7807                             p_old_acct_id,--  old_customer,
7808                             p_old_acct_id,  --  new_customer
7809                             hdr_sts (i),
7810                             hdr.sts_code,
7811                             line.date_terminated,  -- subline_date_terminated,
7812                             1,
7813                             fnd_global.user_id,
7814                             SYSDATE,
7815                             fnd_global.user_id,
7816                             SYSDATE,
7817                             fnd_global.login_id,
7818                             line.date_cancelled  --Date cancelled
7819                             from Oks_instance_history inshist, Okc_k_lines_b line
7820                             ,okc_k_headers_all_b hdr
7821                             Where inshist.instance_id = custprod_id(i)
7822                             and batch_id = p_batch_id
7823                             And line.id = subline_id(i)
7824                             And hdr.id = contract_id(i)
7825                            );
7826            fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History Details created successfully');
7827             -- create instance history details
7828             /*OPEN get_inst_hist_csr (p_batch_id);
7829 
7830             FETCH get_inst_hist_csr
7831             BULK COLLECT INTO ins_id,
7832                    new_k_sdate,
7833                    new_k_edate,
7834                    new_k_status,
7835                    new_l_sdate,
7836                    new_l_edate,
7837                    new_price_negotiated;
7838                    --ins_id;
7839 
7840             CLOSE get_inst_hist_csr;
7841 */
7842             FORALL i IN new_subline_id.FIRST .. new_subline_id.LAST
7843                INSERT INTO oks_inst_hist_details
7844                            (ID,
7845                             ins_id,
7846                             transaction_date,
7847                             transaction_type,
7848                             instance_id_new,
7849                             instance_qty_old,
7850                             instance_qty_new,
7851                             instance_amt_old,
7852                             instance_amt_new,
7853                             old_contract_id,
7854                             old_contact_start_date,
7855                             old_contract_end_date,
7856                             new_contract_id,
7857                             new_contact_start_date,
7858                             new_contract_end_date,
7859                             old_service_line_id,
7860                             old_service_start_date,
7861                             old_service_end_date,
7862                             new_service_line_id,
7863                             new_service_start_date,
7864                             new_service_end_date,
7865                             old_subline_id,
7866                             old_subline_start_date,
7867                             old_subline_end_date,
7868                             new_subline_id,
7869                             new_subline_start_date,
7870                             new_subline_end_date,
7871                             old_customer,
7872                             new_customer,
7873                             old_k_status,
7874                             new_k_status,
7875                             subline_date_terminated,
7876                             object_version_number,
7877                             created_by,
7878                             creation_date,
7879                             last_updated_by,
7880                             last_update_date,
7881                             last_update_login
7882                            )
7883                            (Select okc_p_util.raw_to_number (SYS_GUID ()),
7884                             inshist.id,
7885                             transaction_date(i),
7886                             'TRF',
7887                             custprod_id (i),
7888                             number_of_items (i),
7889                             number_of_items (i),
7890                             price_negotiated (i),
7891                             subline.price_negotiated,--new_price_negotiated (i),
7892                             contract_id (i),
7893                             hdr_sdt (i),
7894                             hdr_edt (i),
7895                             new_contract_id (i),
7896                             hdr.start_date,--new_k_sdate (i),
7897                             hdr.end_date,--new_k_edate (i),
7898                             topline_id (i),
7899                             topline_sdate (i),
7900                             topline_edate (i),
7901                             new_line_id (i),
7902                             line.start_date,--new_l_sdate (i),
7903                             line.end_date,--new_l_edate (i),
7904                             subline_id (i),
7905                             subline_old_sdate (i),
7906                             subline_edate (i),
7907                             new_subline_id (i),
7908                             subline_sdate (i),
7909                             subline_edate (i),
7910                             p_old_acct_id,                            --  old_customer,
7911                             p_new_acct_id,                            --  new_customer,
7912                             hdr_sts (i),
7913                             hdr.sts_code,--new_k_status (i),
7914                             NULL,                  -- subline_date_terminated,
7915                             1,
7916                             fnd_global.user_id,
7917                             SYSDATE,
7918                             fnd_global.user_id,
7919                             SYSDATE,
7920                             fnd_global.login_id
7921                             from Oks_instance_history inshist
7922                                , okc_k_headers_all_b hdr
7923                                , okc_k_lines_b line
7924                                , okc_k_lines_b subline
7925                             Where inshist.instance_id = custprod_id(i)
7926                             and batch_id = p_batch_id
7927                             and hdr.id = new_contract_id(i)
7928                             and line.id = new_line_id(i)
7929                             and subline.id = new_subline_id(i)
7930 
7931                            );
7932            fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History Details created successfully');
7933 
7934          END IF;
7935          END IF;                                            -- End contract_id.count>0
7936       END IF;                                               -- End 'Trf' batch
7937 
7938       -- General Batch
7939       IF p_batch_type in ('GEN','MOVE') --'CSI_MU_GENERAL'
7940       THEN
7941          l_return_status := OKC_API.G_RET_STS_SUCCESS;
7942          fnd_file.put_line(fnd_file.log,'(OKS) -> General Batch Processing');
7943 
7944          OPEN get_k_for_idc_csr;
7945 
7946          IF get_k_for_idc_csr%ISOPEN
7947          THEN
7948             FETCH get_k_for_idc_csr
7949             BULK COLLECT INTO contract_id,
7950                    topline_id,
7951                    subline_id,
7952                    hdr_sdt,
7953                    hdr_edt,
7954                    hdr_sts,
7955                    topline_sdate,
7956                    topline_edate,
7957                    topline_sts,
7958                    subline_sdate,
7959                    subline_edate,
7960                    subline_sts,
7961                    idc_date,
7962                    new_edt,
7963                    number_of_items,
7964                    transaction_date,
7965                    custprod_id,
7966                    ContractNumber_modifier,
7967                    line_number,
7968                    sr_date
7969 
7970                    ;
7971          END IF;
7972 
7973          CLOSE get_k_for_idc_csr;
7974          IF Contract_id.count > 0 THEN --Added for Bug#14183916
7975          FORALL i IN contract_id.FIRST .. contract_id.LAST
7976                INSERT INTO oks_instance_k_dtls_temp
7977                            (parent_id,
7978                             contract_id,
7979                             topline_id,
7980                             subline_id,
7981                             new_start_date,
7982                             new_end_date,
7983                             instance_id
7984                            )
7985                      (Select p_batch_id,
7986                             contract_id (i),
7987                             topline_id (i),
7988                             subline_id (i),
7989                             subline_sdate (i),
7990                             subline_edate (i),
7991                             custprod_id (i)
7992                             from dual
7993                             Where TRUNC (nvl(sr_date (i),idc_date (i))) >= TRUNC (idc_date (i))
7994                                     OR TRUNC (nvl(sr_date (i),new_edt (i))) <= TRUNC (new_edt (i))
7995                            );
7996 
7997      -- Log Warning messages if any
7998          FOR i IN 1..subline_id.count
7999          LOOP
8000               IF idc_date(i) IS NULL
8001               THEN
8002                    l_return_status := OKC_API.G_RET_STS_WARNING;
8003                    IF FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
8004                         fnd_log.string(FND_LOG.LEVEL_ERROR,G_MODULE_CURRENT||'.IB_INTERFACE',
8005                         'Installation date changed to null ' );
8006                    End If;
8007                    OKC_API.set_message(G_APP_NAME,'OKS_NULL_INSTALLATION_DATE');
8008                    Raise G_EXCEPTION_HALT_VALIDATION;
8009 
8010               END IF;
8011               If sr_date(i) Is Not Null Then
8012                  IF (trunc(sr_date(i)) <= trunc(idc_date(i))
8013                      OR TRUNC(sr_date(i)) >= TRUNC(new_edt(i)))
8014                  THEN
8015                      l_Warn_return_status := OKC_API.G_RET_STS_WARNING;
8016                      OKC_API.set_message(G_APP_NAME,'OKS_SR_EXISTS_FOR_CONTRACT'
8017                                         ,'CONTRACTNUMBER',COntractnumber_modifier(i)
8018                                         ,'CONTRACTLINE',line_number(i)
8019                                         ,'INSTANCE',custprod_id (i)
8020                                        );
8021 
8022                      IF FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
8023                         fnd_log.string(FND_LOG.LEVEL_ERROR,G_MODULE_CURRENT||'.UPDATE_CONTRACT_IDC.ERROR',
8024                        'SR is logged '||',status = ' ||  l_return_status);
8025                      END IF;
8026 
8027 
8028                  END IF;
8029               End If;
8030 
8031          END LOOP;
8032          /*cgopinee- Added who columns for all update statements for bug10303830 */
8033          -- Update Subline dates
8034          FORALL i IN 1 .. subline_id.COUNT
8035             UPDATE okc_k_lines_b
8036                SET start_date = idc_date (i),
8037                    end_date = new_edt (i),
8038                    sts_code = get_status (idc_date (i), new_edt (i)),
8039                    last_updated_by = fnd_global.user_id,
8040                    last_update_date = SYSDATE,
8041                    last_update_login = fnd_global.login_id
8042              WHERE ID = subline_id(i)
8043              And (trunc(nvl(sr_date(i),idc_date(i))) >= trunc(idc_date(i))
8044                  And TRUNC(nvl(sr_date(i),new_edt(i))) <= TRUNC(new_edt(i)));
8045 
8046             Open l_subline_invtext_csr;
8047             Fetch l_subline_invtext_csr Bulk collect into
8048                   sub_line_id,
8049                   inv_text;
8050             Close l_subline_invtext_csr;
8051 
8052            IF sub_line_id.COUNT > 0 THEN   -- Added for Bug#14183916
8053             Forall i in 1..sub_line_id.count
8054             UPDATE oks_k_lines_tl klt
8055             SET    invoice_text = inv_text(i),
8056                    last_updated_by = fnd_global.user_id,
8057                    last_update_date = SYSDATE,
8058                    last_update_login = fnd_global.login_id
8059             WHERE  id = (select id from oks_k_lines_b
8060                          where cle_id = sub_line_id(i))
8061             AND klt.language = USERENV('LANG');
8062            END IF; --Added for Bug#14183916
8063 
8064          -- Update topline dates
8065             Open l_topline_csr;
8066             Fetch l_topline_csr Bulk collect into
8067                   Top_line_id,
8068                   line_new_Sdate,
8069                   Line_new_edate;
8070 
8071             Close l_topline_csr;
8072 
8073             Forall i in 1..top_line_id.count
8074             UPDATE okc_k_lines_b
8075                SET start_date = line_new_Sdate (i),
8076                    end_date = line_new_edate (i),
8077                    sts_code = get_status (line_new_Sdate(i), line_new_edate(i)),
8078                    last_updated_by = fnd_global.user_id,
8079                    last_update_date = SYSDATE,
8080                    last_update_login = fnd_global.login_id
8081                    --invoice_text = inv_text(i)
8082             WHERE ID = top_line_id(i);
8083 
8084             Top_line_id.delete;
8085 
8086             Open l_invoice_text_csr;
8087             Fetch l_invoice_text_csr Bulk collect into
8088                   top_line_id,
8089                   inv_text;
8090             Close l_invoice_text_csr;
8091 
8092             Forall i in 1..top_line_id.count
8093             UPDATE oks_k_lines_tl
8094             SET    invoice_text = inv_text(i),
8095                    last_updated_by = fnd_global.user_id,
8096                    last_update_date = SYSDATE,
8097                    last_update_login = fnd_global.login_id
8098             WHERE  id = (select id from oks_k_lines_b
8099             where cle_id = top_line_id(i));
8100          -- Update Header dates
8101             header_id.delete;
8102             Open l_Contract_csr;
8103             Fetch l_Contract_csr Bulk collect into
8104                   Header_id,
8105                   Hdr_new_Sdate,
8106                   Hdr_new_edate;
8107             Close l_Contract_csr;
8108 
8109              FORALL i IN 1 .. header_id.COUNT
8110             UPDATE okc_k_headers_all_b
8111                SET start_date = Hdr_new_Sdate(i),
8112                    end_date = Hdr_new_edate(i),
8113                    sts_code = get_status (Hdr_new_Sdate(i), Hdr_new_edate(i)),
8114                    last_updated_by = fnd_global.user_id,
8115                    last_update_date = SYSDATE,
8116                    last_update_login = fnd_global.login_id
8117              WHERE ID = header_id(i);
8118 
8119 
8120            --Update status in contacts table
8121            /*cgopinee bugfix for 6882512*/
8122             FORALL i IN 1 .. header_id.COUNT
8123              UPDATE okc_contacts
8124 	     SET dnz_ste_code =get_ste_code(get_status (Hdr_new_Sdate(i), Hdr_new_edate(i)))
8125              WHERE dnz_chr_id=header_id(i);
8126 
8127          -- Create records in version history table OKC_K_VERS_NUMBERS_H
8128 
8129          If header_id.count > 0
8130          Then
8131          FORALL i IN header_id.first .. header_id.last
8132             INSERT INTO OKC_K_VERS_NUMBERS_H (
8133                 chr_id,
8134                 major_version,
8135                 minor_version,
8136                 object_version_number,
8137                 created_by,
8138                 creation_date,
8139                 last_updated_by,
8140                 last_update_date,
8141                 last_update_login
8142             )
8143             (
8144              SELECT max(chr_id ),
8145                 max(major_version) major_version,
8146                 max(minor_version)  minor_version,
8147                 max(object_version_number) object_version_number
8148                 , fnd_global.user_id
8149                , SYSDATE
8150                , fnd_global.user_id
8151                , SYSDATE
8152                , fnd_global.login_id
8153                 FROM OKC_K_VERS_NUMBERS
8154                 WHERE chr_id = header_id(i)
8155               );
8156            End If;
8157          -- Update the minor version and object version numbers
8158          FORALL i IN 1 .. header_id.COUNT
8159             UPDATE OKC_K_VERS_NUMBERS
8160                SET minor_version = minor_version+1,
8161                    object_version_number = object_version_number+1,
8162                    last_updated_by = fnd_global.user_id,
8163                    last_update_date = SYSDATE,
8164                    last_update_login = fnd_global.login_id
8165              WHERE chr_ID = header_id(i);
8166 
8167          -- Update coverage effectivity
8168            FOR i in 1..top_line_id.count
8169             LOOP
8170 
8171                oks_pm_programs_pvt.ADJUST_PM_PROGRAM_SCHEDULE(
8172                      p_api_version	            => 1.0,
8173                      p_init_msg_list            => 'F',
8174                      p_contract_line_id         => top_line_id(i) ,
8175                      p_new_start_date           => line_new_Sdate(i),
8176                      p_new_end_date             => line_new_edate(i),
8177                      x_return_status            => l_return_status,
8178                      x_msg_count                => x_msg_count,
8179                      x_msg_data                 => x_msg_data );
8180 
8181               IF NOT l_return_status = 'S' THEN
8182 
8183 
8184                     x_return_status := l_return_status;
8185 
8186                     OKC_API.SET_MESSAGE(
8187                          g_app_name,
8188                          g_required_value,
8189                          g_col_name_token,
8190                          'Adjust PM Program Schedule(SUB LINE)'
8191                      );
8192 
8193                     RAISE G_EXCEPTION_HALT_VALIDATION;
8194               End If;
8195 
8196             END LOOP;
8197 
8198 
8199          If header_id.COUNT > 0 Then
8200           -- Create instance History
8201             INSERT INTO oks_instance_history
8202                         (ID,
8203                          object_version_number,
8204                          instance_id,
8205                          transaction_type,
8206                          transaction_date,
8207                          reference_number,
8208                          PARAMETERS,
8209                          created_by,
8210                          creation_date,
8211                          last_updated_by,
8212                          last_update_date,
8213                          last_update_login,
8214                          batch_id
8215                         )
8216                (SELECT okc_p_util.raw_to_number (SYS_GUID ()),
8217                        1,
8218                        b.instance_id,
8219                        'IDC',
8220                        transaction_date (1),
8221                        b.instance_number,
8222                        NULL,                                      -- parameter
8223                        fnd_global.user_id,
8224                        SYSDATE,
8225                        fnd_global.user_id,
8226                        SYSDATE,
8227                        fnd_global.login_id,
8228                        p_batch_id
8229                   FROM oks_instance_k_dtls_temp a,
8230                        csi_item_instances b
8231                  WHERE a.instance_id = b.instance_id);
8232 
8233            fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History created successfully');
8234 
8235             --- create instance history details
8236             FORALL i IN subline_id.FIRST .. subline_id.LAST
8237                INSERT INTO oks_inst_hist_details
8238                            (ID,
8239                             ins_id,
8240                             transaction_date,
8241                             transaction_type,
8242                             instance_id_new,
8243                             instance_qty_old,
8244                             instance_qty_new,
8245                             instance_amt_old,
8246                             instance_amt_new,
8247                             old_contract_id,
8248                             old_contact_start_date,
8249                             old_contract_end_date,
8250                             new_contract_id,
8251                             new_contact_start_date,
8252                             new_contract_end_date,
8253                             old_service_line_id,
8254                             old_service_start_date,
8255                             old_service_end_date,
8256                             new_service_line_id,
8257                             new_service_start_date,
8258                             new_service_end_date,
8259                             old_subline_id,
8260                             old_subline_start_date,
8261                             old_subline_end_date,
8262                             new_subline_id,
8263                             new_subline_start_date,
8264                             new_subline_end_date,
8265                             old_customer,
8266                             new_customer,
8267                             old_k_status,
8268                             new_k_status,
8269                             subline_date_terminated,
8270                             object_version_number,
8271                             created_by,
8272                             creation_date,
8273                             last_updated_by,
8274                             last_update_date,
8275                             last_update_login,
8276                             date_cancelled
8277                            )
8278                   (SELECT okc_p_util.raw_to_number (SYS_GUID ()),
8279                           a.ID,
8280                           transaction_date (i),
8281                           'IDC',
8282                           custprod_id (i),
8283                           number_of_items (i),
8284                           number_of_items (i),
8285                           null,
8286                           null,
8287                           contract_id (i),
8288                           hdr_sdt (i),
8289                           hdr_edt (i),
8290                           contract_id (i),
8291                           hdr.start_date,
8292                           hdr.end_date,
8293                           topline_id (i),
8294                           topline_sdate (i),
8295                           topline_edate (i),
8296                           topline_id (i),
8297                           line.start_date,
8298                           line.end_date,
8299                           subline_id (i),
8300                           subline_sdate (i),
8301                           subline_edate (i),
8302                           subline_id (i),
8303                           subline.start_date,
8304                           subline.end_date,
8305                           p_old_acct_id,                        --  old_customer,
8306                           p_old_acct_id,                        --  new_customer,
8307                           hdr_sts (i),
8308                           hdr.sts_code,
8309                           null,                       -- subline_date_terminated,
8310                           1,
8311                           fnd_global.user_id,
8312                           SYSDATE,
8313                           fnd_global.user_id,
8314                           SYSDATE,
8315                           fnd_global.login_id,
8316                           null
8317                      FROM oks_instance_history a, Okc_k_headers_all_b hdr
8318                           , okc_k_lines_b line
8319                           , okc_k_lines_b subline
8320                     WHERE a.batch_id = p_batch_id
8321                       AND a.transaction_type = 'IDC'
8322                       AND a.instance_id = custprod_id(i)
8323                       And hdr.id = contract_id(i)
8324                       And line.id = topline_id (i)
8325                       And subline.id = subline_id (i)
8326                       And TRUNC (nvl(sr_date (i),idc_date (i))) >= TRUNC (idc_date (i))
8327                                     And TRUNC (nvl(sr_date (i),new_edt (i))) <= TRUNC (new_edt (i))
8328                       );
8329            fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History Details created successfully');
8330          End If;
8331 	END IF; -- Added for Bug#14183916
8332       END IF;
8333 
8334       -- Terminate Batch
8335       IF p_batch_type = 'TRM' --'CSI_MU_TERMINATE'
8336       THEN
8337          fnd_file.put_line(fnd_file.log,'in term');
8338          OPEN get_k_for_trm_csr(batch_rules_trm_rec.credit_option);
8339 
8340          IF get_k_for_trm_csr%ISOPEN
8341          THEN
8342             FETCH get_k_for_trm_csr
8343             BULK COLLECT INTO contract_id,
8344                    topline_id,
8345                    subline_id,
8346                    hdr_sdt,
8347                    hdr_edt,
8348                    hdr_sts,
8349                    hdr_ste,
8350                    contract_number,
8351                    contract_number_modifier,
8352                    topline_sdate,
8353                    topline_edate,
8354                    topline_sts,
8355                    subline_sdate,
8356                    subline_edate,
8357                    subline_sts,
8358                    term_date,
8359                    custprod_id,
8360                    transaction_date,
8361                    number_of_items,
8362                    price_negotiated,
8363                    Party_id,
8364                    Org_Id,
8365                    Credit_option,
8366                    organization_id;
8367          END IF;
8368 
8369          CLOSE get_k_for_trm_csr;
8370 
8371         IF Contract_id.Count > 0 THEN --Added for Bug#14183916
8372          FORALL i IN contract_id.FIRST .. contract_id.LAST
8373          INSERT INTO oks_instance_k_dtls_temp
8374                            (parent_id,
8375                             contract_id,
8376                             topline_id,
8377                             subline_id,
8378                             new_start_date,
8379                             new_end_date,
8380                             instance_id
8381                             )
8382                             Values
8383                            ( p_batch_id,
8384                             contract_id (i),
8385                             topline_id (i),
8386                             subline_id (i),
8387                             subline_sdate (i),
8388                             subline_edate (i),
8389                             custprod_id (i)
8390                             );
8391 
8392          fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate: Number of impacted contracts = ( '
8393                             || contract_id.COUNT || ' )');
8394 
8395          -- QA HOLD lines can't be terminated
8396          FOR i IN 1..subline_sts.COUNT
8397          LOOP
8398             IF hdr_ste(i) = 'HOLD'
8399             THEN
8400                 l_found := TRUE;
8401                 IF FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
8402                 fnd_log.string(FND_LOG.LEVEL_ERROR,G_MODULE_CURRENT||'.oks_mass_update.Update_contracts',
8403                    ' Contract '||contract_number(i) ||' in QA_HOLD status' );
8404                 END IF;
8405 
8406                 OKC_API.SET_MESSAGE(
8407                        g_app_name,
8408                        'OKS_CONTRACT_HOLD',
8409                        'CONTRACTNUMBER',
8410                        CONTRACT_NUMBER(i)||' '||CONTRACT_NUMBER_MODIFIER(i)
8411                        );
8412 
8413             END IF;
8414          END LOOP;
8415 
8416          IF l_found
8417          THEN
8418                 l_return_status  := OKC_API.G_RET_STS_ERROR;
8419                 RAISE G_EXCEPTION_HALT_VALIDATION;
8420          END IF;
8421 
8422 
8423 
8424 
8425          IF subline_id.COUNT > 0
8426          THEN
8427             FOR i IN subline_id.FIRST .. subline_id.LAST
8428             LOOP
8429 
8430                   fnd_file.put_line(fnd_file.log,'(OKS) -> For Subline term_date '||term_date (i)||subline_edate(i)||subline_sdate(i));
8431                   l_trm_dt := term_date (i);
8432                   l_date_cancel :=  term_date(i);
8433                   l_term_flag:= 'N';
8434                   IF (TRUNC (l_date_cancel) <= TRUNC (subline_sdate (i)))
8435                   Then
8436                        l_date_cancel := subline_sdate(i);
8437                   Elsif ( TRUNC (subline_edate (i)) < TRUNC (l_date_cancel) )
8438                   Then
8439                        l_date_cancel := subline_edate(i) + 1;
8440                   End If;
8441 
8442 
8443 
8444                   IF    (TRUNC (l_trm_dt) <= TRUNC (subline_sdate (i)))
8445 
8446                   THEN
8447                      l_trm_dt := subline_sdate(i);
8448                   END IF;
8449 
8450                   IF ( TRUNC (subline_edate (i))< TRUNC (l_trm_dt) )
8451                   THEN
8452                      l_trm_dt := subline_edate(i) + 1;
8453                      l_suppress_credit := 'Y';
8454                      l_full_credit := 'N';
8455                      l_term_flag := 'Y';
8456                  Else
8457 
8458                      IF UPPER (credit_option(i)) = 'FULL'
8459                      THEN
8460                         l_full_credit := 'Y';
8461                         l_suppress_credit := 'N';
8462 
8463                      ELSIF UPPER (credit_option(i)) = 'NONE'
8464                      THEN
8465                         l_suppress_credit := 'Y';
8466                      ELSIF UPPER (credit_option(i)) = 'CALCULATED'
8467                      THEN
8468                         l_suppress_credit := 'N';
8469                         l_full_credit := 'N';
8470                      End If;
8471                    End If;
8472 
8473               fnd_file.put_line(fnd_file.log,'(OKS) -> For Subline = ( '||subline_id (i)||'l_full_credit'||l_full_credit);
8474 
8475 
8476                fnd_file.put_line(fnd_file.log,'(OKS) -> For Subline = contract_number ( '||contract_number(i)||':'||contract_number_modifier(i)||' ) l_suppress_credit = ( '
8477                                   ||l_suppress_credit ||' ) Termination Date is = ( '|| l_trm_dt|| ' )');
8478                okc_context.set_okc_org_context(org_id(i),organization_id(i));
8479                terminate_subline
8480                   (p_status                    => subline_sts (i),
8481                    p_hdr_id                    => contract_id (i),
8482                    p_end_date                  => subline_edate (i),
8483                    p_cle_id                    => subline_id (i),
8484                    p_termination_date          => TRUNC (l_trm_dt),
8485                    p_cancellation_date         => trunc(l_date_cancel),
8486                    p_term_flag                 => l_term_flag,
8487                    p_terminate_reason          => batch_rules_trm_rec.termination_reason_code,
8488                    p_termination_source        => 'IBTERMINATE',
8489                    p_suppress_credit           => l_suppress_credit,
8490                    p_full_credit               => l_full_credit,
8491                    x_return_status             => l_return_status
8492                   );
8493 
8494                fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate_subline status = ( '|| l_return_status|| ' )');
8495 
8496                IF NOT l_return_status = okc_api.g_ret_sts_success
8497                THEN
8498                   x_return_status := l_return_status;
8499                      OKC_API.SET_MESSAGE
8500                     (
8501                      g_app_name,
8502                      'OKS_TERMINATE_ERROR',
8503                      'CONTRACTNUMBER',
8504                        CONTRACT_NUMBER(i)||' '||CONTRACT_NUMBER_MODIFIER(i),
8505                      'SUBLINE',
8506                      subline_id (i)
8507                      );
8508                   RAISE g_exception_halt_validation;
8509                END IF;
8510 
8511             END LOOP;
8512 
8513           --Terminate/Cancel the TOpl Line/Header if all the sublines/Lines are terminated/Canceled.
8514           Terminate_cancel
8515          (p_termination_reason  => batch_rules_trm_rec.termination_reason_code ,
8516           P_termcancel_source   => 'IBTERMINATE',
8517           p_cancel_reason       => 'TERMINATED',
8518           X_return_status       => l_return_status,
8519           X_msg_count           => x_msg_count,
8520           X_msg_data            => x_msg_data);
8521 
8522           fnd_file.put_line(fnd_file.log,'(OKS) -> Terminate/cancel Line/Hdr status = ( '|| l_return_status|| ' )');
8523 
8524           IF NOT l_return_status = okc_api.g_ret_sts_success
8525           THEN
8526                     x_return_status := l_return_status;
8527                      OKC_API.SET_MESSAGE
8528                     (
8529                      g_app_name,
8530                      'OKS_TERMINATE_CANCEL_ERROR'
8531                      );
8532                   RAISE g_exception_halt_validation;
8533           END IF;
8534 
8535             -- Create instance History
8536             INSERT INTO oks_instance_history
8537                         (ID,
8538                          object_version_number,
8539                          instance_id,
8540                          transaction_type,
8541                          transaction_date,
8542                          reference_number,
8543                          PARAMETERS,
8544                          created_by,
8545                          creation_date,
8546                          last_updated_by,
8547                          last_update_date,
8548                          last_update_login,
8549                          batch_id
8550                         )
8551                (SELECT okc_p_util.raw_to_number (SYS_GUID ()),
8552                        1,
8553                        b.instance_id,
8554                        'TRM',
8555                        transaction_date (1),
8556                        b.instance_number,
8557                        NULL,                                      -- parameter
8558                        fnd_global.user_id,
8559                        SYSDATE,
8560                        fnd_global.user_id,
8561                        SYSDATE,
8562                        fnd_global.login_id,
8563                        p_batch_id
8564                   FROM oks_instance_temp a,
8565                        csi_item_instances b
8566                  WHERE a.old_customer_product_id = b.instance_id);
8567 
8568            fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History created successfully');
8569 
8570             --- create instance history details
8571             FORALL i IN subline_id.FIRST .. subline_id.LAST
8572                INSERT INTO oks_inst_hist_details
8573                            (ID,
8574                             ins_id,
8575                             transaction_date,
8576                             transaction_type,
8577                             instance_id_new,
8578                             instance_qty_old,
8579                             instance_qty_new,
8580                             instance_amt_old,
8581                             instance_amt_new,
8582                             old_contract_id,
8583                             old_contact_start_date,
8584                             old_contract_end_date,
8585                             new_contract_id,
8586                             new_contact_start_date,
8587                             new_contract_end_date,
8588                             old_service_line_id,
8589                             old_service_start_date,
8590                             old_service_end_date,
8591                             new_service_line_id,
8592                             new_service_start_date,
8593                             new_service_end_date,
8594                             old_subline_id,
8595                             old_subline_start_date,
8596                             old_subline_end_date,
8597                             new_subline_id,
8598                             new_subline_start_date,
8599                             new_subline_end_date,
8600                             old_customer,
8601                             new_customer,
8602                             old_k_status,
8603                             new_k_status,
8604                             subline_date_terminated,
8605                             object_version_number,
8606                             created_by,
8607                             creation_date,
8608                             last_updated_by,
8609                             last_update_date,
8610                             last_update_login,
8611                             date_cancelled
8612                            )
8613                   (SELECT okc_p_util.raw_to_number (SYS_GUID ()),
8614                           a.ID,
8615                           transaction_date (i),
8616                           'TRM',
8617                           custprod_id (i),
8618                           number_of_items (i),
8619                           number_of_items (i),
8620                           price_negotiated (i),
8621                           price_negotiated (i),
8622                           contract_id (i),
8623                           hdr_sdt (i),
8624                           hdr_edt (i),
8625                           contract_id (i),
8626                           hdr_sdt (i),
8627                           hdr_edt (i),
8628                           topline_id (i),
8629                           topline_sdate (i),
8630                           topline_edate (i),
8631                           topline_id (i),
8632                           topline_sdate (i),
8633                           topline_edate (i),
8634                           subline_id (i),
8635                           subline_sdate (i),
8636                           subline_edate (i),
8637                           subline_id (i),
8638                           subline_sdate (i),
8639                           subline_edate (i),
8640                           p_old_acct_id,                        --  old_customer,
8641                           p_old_acct_id,                        --  new_customer,
8642                           hdr_sts (i),
8643                           hdr.sts_code,
8644                           line.date_terminated,                       -- subline_date_terminated,
8645                           1,
8646                           fnd_global.user_id,
8647                           SYSDATE,
8648                           fnd_global.user_id,
8649                           SYSDATE,
8650                           fnd_global.login_id,
8651                           line.date_cancelled
8652                      FROM oks_instance_history a,
8653                           Okc_k_lines_b line,
8654                           Okc_k_headers_all_b hdr
8655                     WHERE a.batch_id = p_batch_id
8656                       AND a.transaction_type = 'TRM'
8657                       AND a.instance_id = custprod_id(i)
8658                       AND line.id = subline_id(i)
8659                       And hdr.id = contract_id(i));
8660            fnd_file.put_line(fnd_file.log,'(OKS) -> Instance History Details created successfully');
8661 
8662          END IF;
8663        END IF; -- Added for Bug#14183916
8664 
8665 
8666 
8667 
8668       END IF;
8669 
8670 
8671       If l_warn_return_status = 'W' Then
8672          x_return_status := l_warn_return_status;
8673       Else
8674 
8675         x_return_status := l_return_status;
8676       End If;
8677    EXCEPTION
8678       WHEN g_exception_halt_validation
8679       THEN
8680          x_return_status := okc_api.g_ret_sts_error;
8681          fnd_file.put_line(fnd_file.log,' Error while updating the contract ' );
8682          FND_MSG_PUB.Count_And_Get
8683 		(
8684 				p_count	=>	x_msg_count,
8685 				p_data	=>	x_msg_data
8686 		);
8687 
8688          NULL;
8689       WHEN OTHERS
8690       THEN
8691          x_return_status := okc_api.g_ret_sts_unexp_error;
8692          fnd_file.put_line(fnd_file.log,' Error while updating the contract : '
8693          || SQLCODE||':'|| SQLERRM );
8694          okc_api.set_message (g_app_name,
8695                               g_unexpected_error,
8696                               g_sqlcode_token,
8697                               SQLCODE,
8698                               g_sqlerrm_token,
8699                               SQLERRM
8700                              );
8701          FND_MSG_PUB.Count_And_Get
8702 		(
8703 				p_count	=>	x_msg_count,
8704 				p_data	=>	x_msg_data
8705 		);
8706 
8707    END;-- End Update Contracts
8708 END;
8709