DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_CONTRACT_REBOOK_PVT

Source


1 PACKAGE BODY OKL_CONTRACT_REBOOK_PVT AS
2 /* $Header: OKLRRBKB.pls 120.50.12010000.2 2008/10/20 18:33:34 apaul ship $*/
3 
4     G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5     G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6     G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7 
8 -- Global Variables
9    G_INIT_NUMBER NUMBER := -9999;
10    G_PKG_NAME    CONSTANT VARCHAR2(200) := 'OKL_CONTRACT_REBOOK_PVT';
11    G_APP_NAME    CONSTANT VARCHAR2(3)   :=  OKL_API.G_APP_NAME;
12    G_API_TYPE    CONSTANT VARCHAR2(4)   := '_PVT';
13 
14    --Bug# 4212626
15    G_INSURANCE_LSE_ID CONSTANT NUMBER := 47;
16 
17 --   subtype tcnv_rec_type IS OKL_TRX_CONTRACTS_PVT.tcnv_rec_type;
18    SUBTYPE stmv_rec_type IS OKL_STREAMS_PUB.stmv_rec_type;
19    SUBTYPE stmv_tbl_type IS OKL_STREAMS_PUB.stmv_tbl_type;
20    SUBTYPE selv_rec_type IS OKL_STREAMS_PUB.selv_rec_type;
21    SUBTYPE selv_tbl_type IS OKL_STREAMS_PUB.selv_tbl_type;
22    SUBTYPE khrv_rec_type IS OKL_CONTRACT_PUB.khrv_rec_type;
23    SUBTYPE chrv_rec_type IS OKL_OKC_MIGRATION_PVT.chrv_rec_type;
24    SUBTYPE clev_tbl_type IS OKL_OKC_MIGRATION_PVT.clev_tbl_type;
25    SUBTYPE klev_tbl_type IS OKL_CONTRACT_PUB.klev_tbl_type;
26    SUBTYPE klev_rec_type IS OKL_CONTRACT_PUB.klev_rec_type;
27    SUBTYPE clev_rec_type IS OKL_OKC_MIGRATION_PVT.clev_rec_type;
28    SUBTYPE rulv_rec_type IS OKL_RULE_PUB.rulv_rec_type;
29    SUBTYPE rulv_tbl_type IS OKL_RULE_PUB.rulv_tbl_type;
30    SUBTYPE rgpv_rec_type IS OKL_RULE_PUB.rgpv_rec_type;
31    SUBTYPE cvmv_rec_type IS OKL_VERSION_PUB.cvmv_rec_type;
32    --SUBTYPE cimv_rec_type IS Okl_Okc_Migration_Pvt.cimv_rec_type;
33    --SUBTYPE talv_rec_type IS Okl_Txl_Assets_Pub.tlpv_rec_type;
34    --SUBTYPE itiv_tbl_type IS Okl_Txl_Itm_Insts_Pub.iipv_tbl_type;
35    SUBTYPE cplv_rec_type IS OKL_OKC_MIGRATION_PVT.cplv_rec_type;
36    SUBTYPE rmpv_rec_type IS OKL_RULE_PUB.rmpv_rec_type;
37    SUBTYPE inv_agmt_chr_id_tbl_type IS okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
38 
39    -- sjalasut: added global constants to support fee types; changes added as part of Rebook Change Control Enhancement. START
40    G_ROLLOVER_FEE CONSTANT fnd_lookups.lookup_code%TYPE DEFAULT 'ROLLOVER';
41    -- sjalasut: added global constants to support fee types; changes added as part of Rebook Change Control Enhancement. END
42 
43    /*
44    -- mvasudev, 08/23/2004
45    -- Added Constants to enable Business Event
46    */
47    G_WF_EVT_KHR_REBOOK_REQUESTED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.lease_contract.rebook_requested';
48 
49    G_WF_ITM_SRC_CONTRACT_ID CONSTANT VARCHAR2(20)  := 'SOURCE_CONTRACT_ID';
50    G_WF_ITM_REVISION_DATE CONSTANT VARCHAR2(15)    := 'REVISION_DATE';
51    G_WF_ITM_DEST_CONTRACT_ID CONSTANT VARCHAR2(25) := 'DESTINATION_CONTRACT_ID';
52 
53 
54 ------------------------------------------------------------------------------
55 -- PROCEDURE Report_Error
56 -- It is a generalized routine to display error on Concurrent Manager Log file
57 -- Calls:
58 -- Called by:
59 ------------------------------------------------------------------------------
60 
61   PROCEDURE Report_Error(
62                          x_msg_count OUT NOCOPY NUMBER,
63                          x_msg_data  OUT NOCOPY VARCHAR2
64                         ) IS
65 
66   x_msg_index_out NUMBER;
67   x_msg_out       VARCHAR2(2000);
68 
69   BEGIN
70 
71     okl_api.end_activity(
72                          X_msg_count => x_msg_count,
73                          X_msg_data  => x_msg_data
74                         );
75 
76     FOR i IN 1..x_msg_count
77     LOOP
78       FND_MSG_PUB.GET(
79                       p_msg_index     => i,
80                       p_encoded       => FND_API.G_FALSE,
81                       p_data          => x_msg_data,
82                       p_msg_index_out => x_msg_index_out
83                      );
84 
85     END LOOP;
86     RETURN;
87   EXCEPTION
88     WHEN OTHERS THEN
89       NULL;
90   END Report_Error;
91 
92 
93   ---------------------------------------------------------------------------
94   -- FUNCTION get_chrv_rec for: OKC_K_HEADERS_V
95   ---------------------------------------------------------------------------
96   FUNCTION get_chrv_rec (p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
97                          x_return_status OUT NOCOPY VARCHAR2)
98   RETURN chrv_rec_type IS
99     CURSOR okc_chrv_pk_csr(p_id OKC_K_HEADERS_V.ID%TYPE) IS
100     SELECT ID,
101            OBJECT_VERSION_NUMBER,
102            SFWT_FLAG,
103            CHR_ID_RESPONSE,
104            CHR_ID_AWARD,
105            INV_ORGANIZATION_ID,
106            STS_CODE,
107            QCL_ID,
108            SCS_CODE,
109            CONTRACT_NUMBER,
110            CURRENCY_CODE,
111            CONTRACT_NUMBER_MODIFIER,
112            ARCHIVED_YN,
113            DELETED_YN,
114            CUST_PO_NUMBER_REQ_YN,
115            PRE_PAY_REQ_YN,
116            CUST_PO_NUMBER,
117            SHORT_DESCRIPTION,
118            COMMENTS,
119            DESCRIPTION,
120            DPAS_RATING,
121            COGNOMEN,
122            TEMPLATE_YN,
123            TEMPLATE_USED,
124            DATE_APPROVED,
125            DATETIME_CANCELLED,
126            AUTO_RENEW_DAYS,
127            DATE_ISSUED,
128            DATETIME_RESPONDED,
129            NON_RESPONSE_REASON,
130            NON_RESPONSE_EXPLAIN,
131            RFP_TYPE,
132            CHR_TYPE,
133            KEEP_ON_MAIL_LIST,
134            SET_ASIDE_REASON,
135            SET_ASIDE_PERCENT,
136            RESPONSE_COPIES_REQ,
137            DATE_CLOSE_PROJECTED,
138            DATETIME_PROPOSED,
139            DATE_SIGNED,
140            DATE_TERMINATED,
141            DATE_RENEWED,
142            TRN_CODE,
143            START_DATE,
144            END_DATE,
145            AUTHORING_ORG_ID,
146            BUY_OR_SELL,
147            ISSUE_OR_RECEIVE,
148            ESTIMATED_AMOUNT,
149            ESTIMATED_AMOUNT_RENEWED,
150            CURRENCY_CODE_RENEWED,
151            UPG_ORIG_SYSTEM_REF,
152            UPG_ORIG_SYSTEM_REF_ID,
153            APPLICATION_ID,
154            ORIG_SYSTEM_SOURCE_CODE,
155            ORIG_SYSTEM_ID1,
156            ORIG_SYSTEM_REFERENCE1,
157            ATTRIBUTE_CATEGORY,
158            ATTRIBUTE1,
159            ATTRIBUTE2,
160            ATTRIBUTE3,
161            ATTRIBUTE4,
162            ATTRIBUTE5,
163            ATTRIBUTE6,
164            ATTRIBUTE7,
165            ATTRIBUTE8,
166            ATTRIBUTE9,
167            ATTRIBUTE10,
168            ATTRIBUTE11,
169            ATTRIBUTE12,
170            ATTRIBUTE13,
171            ATTRIBUTE14,
172            ATTRIBUTE15,
173            CREATED_BY,
174            CREATION_DATE,
175            LAST_UPDATED_BY,
176            LAST_UPDATE_DATE,
177            LAST_UPDATE_LOGIN
178      FROM okc_k_headers_v chrv
179      WHERE chrv.id = p_id;
180      x_chrv_rec chrv_rec_type;
181   BEGIN
182     OPEN okc_chrv_pk_csr (p_chr_id);
183     FETCH okc_chrv_pk_csr INTO
184           x_chrv_rec.ID,
185           x_chrv_rec.OBJECT_VERSION_NUMBER,
186           x_chrv_rec.SFWT_FLAG,
187           x_chrv_rec.CHR_ID_RESPONSE,
188           x_chrv_rec.CHR_ID_AWARD,
189           x_chrv_rec.INV_ORGANIZATION_ID,
190           x_chrv_rec.STS_CODE,
191           x_chrv_rec.QCL_ID,
192           x_chrv_rec.SCS_CODE,
193           x_chrv_rec.CONTRACT_NUMBER,
194           x_chrv_rec.CURRENCY_CODE,
195           x_chrv_rec.CONTRACT_NUMBER_MODIFIER,
196           x_chrv_rec.ARCHIVED_YN,
197           x_chrv_rec.DELETED_YN,
198           x_chrv_rec.CUST_PO_NUMBER_REQ_YN,
199           x_chrv_rec.PRE_PAY_REQ_YN,
200           x_chrv_rec.CUST_PO_NUMBER,
201           x_chrv_rec.SHORT_DESCRIPTION,
202           x_chrv_rec.COMMENTS,
203           x_chrv_rec.DESCRIPTION,
204           x_chrv_rec.DPAS_RATING,
205           x_chrv_rec.COGNOMEN,
206           x_chrv_rec.TEMPLATE_YN,
207           x_chrv_rec.TEMPLATE_USED,
208           x_chrv_rec.DATE_APPROVED,
209           x_chrv_rec.DATETIME_CANCELLED,
210           x_chrv_rec.AUTO_RENEW_DAYS,
211           x_chrv_rec.DATE_ISSUED,
212           x_chrv_rec.DATETIME_RESPONDED,
213           x_chrv_rec.NON_RESPONSE_REASON,
214           x_chrv_rec.NON_RESPONSE_EXPLAIN,
215           x_chrv_rec.RFP_TYPE,
216           x_chrv_rec.CHR_TYPE,
217           x_chrv_rec.KEEP_ON_MAIL_LIST,
218           x_chrv_rec.SET_ASIDE_REASON,
219           x_chrv_rec.SET_ASIDE_PERCENT,
220           x_chrv_rec.RESPONSE_COPIES_REQ,
221           x_chrv_rec.DATE_CLOSE_PROJECTED,
222           x_chrv_rec.DATETIME_PROPOSED,
223           x_chrv_rec.DATE_SIGNED,
224           x_chrv_rec.DATE_TERMINATED,
225           x_chrv_rec.DATE_RENEWED,
226           x_chrv_rec.TRN_CODE,
227           x_chrv_rec.START_DATE,
228           x_chrv_rec.END_DATE,
229           x_chrv_rec.AUTHORING_ORG_ID,
230           x_chrv_rec.BUY_OR_SELL,
231           x_chrv_rec.ISSUE_OR_RECEIVE,
232           x_chrv_rec.ESTIMATED_AMOUNT,
233           x_chrv_rec.ESTIMATED_AMOUNT_RENEWED,
234           x_chrv_rec.CURRENCY_CODE_RENEWED,
235           x_chrv_rec.UPG_ORIG_SYSTEM_REF,
236           x_chrv_rec.UPG_ORIG_SYSTEM_REF_ID,
237           x_chrv_rec.APPLICATION_ID,
238           x_chrv_rec.ORIG_SYSTEM_SOURCE_CODE,
239           x_chrv_rec.ORIG_SYSTEM_ID1,
240           x_chrv_rec.ORIG_SYSTEM_REFERENCE1,
241           x_chrv_rec.ATTRIBUTE_CATEGORY,
242           x_chrv_rec.ATTRIBUTE1,
243           x_chrv_rec.ATTRIBUTE2,
244           x_chrv_rec.ATTRIBUTE3,
245           x_chrv_rec.ATTRIBUTE4,
246           x_chrv_rec.ATTRIBUTE5,
247           x_chrv_rec.ATTRIBUTE6,
248           x_chrv_rec.ATTRIBUTE7,
249           x_chrv_rec.ATTRIBUTE8,
250           x_chrv_rec.ATTRIBUTE9,
251           x_chrv_rec.ATTRIBUTE10,
252           x_chrv_rec.ATTRIBUTE11,
253           x_chrv_rec.ATTRIBUTE12,
254           x_chrv_rec.ATTRIBUTE13,
255           x_chrv_rec.ATTRIBUTE14,
256           x_chrv_rec.ATTRIBUTE15,
257           x_chrv_rec.CREATED_BY,
258           x_chrv_rec.CREATION_DATE,
259           x_chrv_rec.LAST_UPDATED_BY,
260           x_chrv_rec.LAST_UPDATE_DATE,
261           x_chrv_rec.LAST_UPDATE_LOGIN;
262     IF okc_chrv_pk_csr%NOTFOUND THEN
263        x_return_status := OKL_API.G_RET_STS_ERROR;
264     END IF;
265     CLOSE okc_chrv_pk_csr;
266     RETURN(x_chrv_rec);
267   EXCEPTION
268     WHEN OTHERS THEN
269       -- store SQL error message on message stack for caller
270       OKL_API.set_message(
271               G_APP_NAME,
272               G_UNEXPECTED_ERROR,
273               'SQLcode',
274               SQLCODE,
275               'SQLerrm',
276               SQLERRM);
277       -- notify caller of an UNEXPECTED error
278       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
279       -- if the cursor is open
280       IF okc_chrv_pk_csr%ISOPEN THEN
281          CLOSE okc_chrv_pk_csr;
282       END IF;
283 
284   END get_chrv_rec;
285 
286   ---------------------------------------------------------------------------
287   -- FUNCTION get_khrv_rec for: OKL_K_HEADERS_V
288   ---------------------------------------------------------------------------
289   FUNCTION get_khrv_rec (
290     p_khr_id                       IN  OKL_K_HEADERS_V.ID%TYPE,
291     x_return_status                OUT NOCOPY VARCHAR2
292   ) RETURN khrv_rec_type IS
293     CURSOR okl_k_headers_v_pk_csr (p_id IN OKL_K_HEADERS_V.ID%TYPE) IS
294       SELECT
295 	ID,
296         OBJECT_VERSION_NUMBER,
297         ISG_ID,
298         KHR_ID,
299         PDT_ID,
300         AMD_CODE,
301         DATE_FIRST_ACTIVITY,
302         GENERATE_ACCRUAL_YN,
303         GENERATE_ACCRUAL_OVERRIDE_YN,
304         DATE_REFINANCED,
305         CREDIT_ACT_YN,
306         TERM_DURATION,
307         CONVERTED_ACCOUNT_YN,
308         DATE_CONVERSION_EFFECTIVE,
309         SYNDICATABLE_YN,
310         SALESTYPE_YN,
311         DATE_DEAL_TRANSFERRED,
312         DATETIME_PROPOSAL_EFFECTIVE,
313         DATETIME_PROPOSAL_INEFFECTIVE,
314         DATE_PROPOSAL_ACCEPTED,
315         ATTRIBUTE_CATEGORY,
316         ATTRIBUTE1,
317         ATTRIBUTE2,
318         ATTRIBUTE3,
319         ATTRIBUTE4,
320         ATTRIBUTE5,
321         ATTRIBUTE6,
322         ATTRIBUTE7,
323         ATTRIBUTE8,
324         ATTRIBUTE9,
325         ATTRIBUTE10,
326         ATTRIBUTE11,
327         ATTRIBUTE12,
328         ATTRIBUTE13,
329         ATTRIBUTE14,
330         ATTRIBUTE15,
331         CREATED_BY,
332         CREATION_DATE,
333         LAST_UPDATED_BY,
334         LAST_UPDATE_DATE,
335         LAST_UPDATE_LOGIN,
336         PRE_TAX_YIELD,
337         AFTER_TAX_YIELD,
338         IMPLICIT_INTEREST_RATE,
339         IMPLICIT_NON_IDC_INTEREST_RATE,
340         TARGET_PRE_TAX_YIELD,
341         TARGET_AFTER_TAX_YIELD,
342         TARGET_IMPLICIT_INTEREST_RATE,
343         TARGET_IMPLICIT_NONIDC_INTRATE,
344         DATE_LAST_INTERIM_INTEREST_CAL,
345         DEAL_TYPE,
346         PRE_TAX_IRR,
347         AFTER_TAX_IRR,
348         EXPECTED_DELIVERY_DATE,
349         ACCEPTED_DATE,
350         PREFUNDING_ELIGIBLE_YN,
351         REVOLVING_CREDIT_YN
352       FROM OKL_K_HEADERS_V
353       WHERE OKL_K_HEADERS_V.id     = p_id;
354       l_okl_k_headers_v_pk     okl_k_headers_v_pk_csr%ROWTYPE;
355       l_khrv_rec               khrv_rec_type;
356   BEGIN
357 
358     x_return_status := OKL_API.G_RET_STS_SUCCESS;
359     -- Get current database values
360     OPEN okl_k_headers_v_pk_csr (p_khr_id);
361     FETCH okl_k_headers_v_pk_csr INTO
362        l_khrv_rec.ID,
363         l_khrv_rec.OBJECT_VERSION_NUMBER,
364         l_khrv_rec.ISG_ID,
365         l_khrv_rec.KHR_ID,
366         l_khrv_rec.PDT_ID,
367         l_khrv_rec.AMD_CODE,
368         l_khrv_rec.DATE_FIRST_ACTIVITY,
369         l_khrv_rec.GENERATE_ACCRUAL_YN,
370         l_khrv_rec.GENERATE_ACCRUAL_OVERRIDE_YN,
371         l_khrv_rec.DATE_REFINANCED,
372         l_khrv_rec.CREDIT_ACT_YN,
373         l_khrv_rec.TERM_DURATION,
374         l_khrv_rec.CONVERTED_ACCOUNT_YN,
375         l_khrv_rec.DATE_CONVERSION_EFFECTIVE,
376         l_khrv_rec.SYNDICATABLE_YN,
377         l_khrv_rec.SALESTYPE_YN,
378         l_khrv_rec.DATE_DEAL_TRANSFERRED,
379         l_khrv_rec.DATETIME_PROPOSAL_EFFECTIVE,
380         l_khrv_rec.DATETIME_PROPOSAL_INEFFECTIVE,
381         l_khrv_rec.DATE_PROPOSAL_ACCEPTED,
382         l_khrv_rec.ATTRIBUTE_CATEGORY,
383         l_khrv_rec.ATTRIBUTE1,
384         l_khrv_rec.ATTRIBUTE2,
385         l_khrv_rec.ATTRIBUTE3,
386         l_khrv_rec.ATTRIBUTE4,
387         l_khrv_rec.ATTRIBUTE5,
388         l_khrv_rec.ATTRIBUTE6,
389         l_khrv_rec.ATTRIBUTE7,
390         l_khrv_rec.ATTRIBUTE8,
391         l_khrv_rec.ATTRIBUTE9,
392         l_khrv_rec.ATTRIBUTE10,
393         l_khrv_rec.ATTRIBUTE11,
394         l_khrv_rec.ATTRIBUTE12,
395         l_khrv_rec.ATTRIBUTE13,
396         l_khrv_rec.ATTRIBUTE14,
397         l_khrv_rec.ATTRIBUTE15,
398         l_khrv_rec.CREATED_BY,
399         l_khrv_rec.CREATION_DATE,
400         l_khrv_rec.LAST_UPDATED_BY,
401         l_khrv_rec.LAST_UPDATE_DATE,
402         l_khrv_rec.LAST_UPDATE_LOGIN,
403         l_khrv_rec.PRE_TAX_YIELD,
404         l_khrv_rec.AFTER_TAX_YIELD,
405         l_khrv_rec.IMPLICIT_INTEREST_RATE,
406         l_khrv_rec.IMPLICIT_NON_IDC_INTEREST_RATE,
407         l_khrv_rec.TARGET_PRE_TAX_YIELD,
408         l_khrv_rec.TARGET_AFTER_TAX_YIELD,
409         l_khrv_rec.TARGET_IMPLICIT_INTEREST_RATE,
410         l_khrv_rec.TARGET_IMPLICIT_NONIDC_INTRATE,
411         l_khrv_rec.DATE_LAST_INTERIM_INTEREST_CAL,
412         l_khrv_rec.DEAL_TYPE,
413         l_khrv_rec.PRE_TAX_IRR,
414         l_khrv_rec.AFTER_TAX_IRR,
415         l_khrv_rec.EXPECTED_DELIVERY_DATE,
416         l_khrv_rec.ACCEPTED_DATE,
417         l_khrv_rec.PREFUNDING_ELIGIBLE_YN,
418         l_khrv_rec.REVOLVING_CREDIT_YN
419         ;
420     IF okl_k_headers_v_pk_csr%NOTFOUND THEN
421        x_return_status := OKL_API.G_RET_STS_ERROR;
422     END IF;
423     CLOSE okl_k_headers_v_pk_csr;
424     RETURN(l_khrv_rec);
425   EXCEPTION
426     WHEN OTHERS THEN
427       -- store SQL error message on message stack for caller
428       OKL_API.set_message(
429               G_APP_NAME,
430               G_UNEXPECTED_ERROR,
431               'SQLcode',
432               SQLCODE,
433               'SQLerrm',
434               SQLERRM);
435       -- notify caller of an UNEXPECTED error
436       -- if the cursor is open
437       IF okl_k_headers_v_pk_csr%ISOPEN THEN
438          CLOSE okl_k_headers_v_pk_csr;
439       END IF;
440       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
441   END get_khrv_rec;
442 
443 ------------------------------------------------------------------------------
444 -- PROCEDURE validate_rebook_reason
445 --
446 --  This procedure validate rebook reason code
447 --
448 -- Calls:
449 -- Called By:
450 ------------------------------------------------------------------------------
451   PROCEDURE validate_rebook_reason(
452                                    x_return_status      OUT NOCOPY VARCHAR2,
453                                    x_msg_count          OUT NOCOPY NUMBER,
454                                    x_msg_data           OUT NOCOPY VARCHAR2,
455                                    p_rebook_reason_code IN  VARCHAR2
456                                   ) IS
457 
458   l_proc_name VARCHAR2(35) := 'VALIDATE_REBOOK_REASON';
459   l_dummy     VARCHAR2(1);
460 
461   CURSOR rebook_csr (p_rebook_reason_code VARCHAR2) IS
462   SELECT 'X'
463   FROM   FND_LOOKUPS
464   WHERE  lookup_type = 'OKL_REBOOK_REASON'
465   AND    lookup_code = p_rebook_reason_code;
466 
467   rebook_failed EXCEPTION;
468 
469   BEGIN
470     IF (G_DEBUG_ENABLED = 'Y') THEN
471       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
472     END IF;
473     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
474           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
475     END IF;
476     x_return_status := OKC_API.G_RET_STS_SUCCESS;
477 
478     OPEN rebook_csr(p_rebook_reason_code);
479     FETCH rebook_csr INTO l_dummy;
480     IF rebook_csr%NOTFOUND THEN
481        RAISE rebook_failed;
482     END IF;
483     CLOSE rebook_csr;
484 
485     RETURN;
486 
487   EXCEPTION
488     WHEN rebook_failed THEN
489        okl_api.set_message(
490                             G_APP_NAME,
491                             G_INVALID_VALUE,
492                             'COL_NAME',
493                             'REBOOK REASON'
494                            );
495        x_return_status := OKC_API.G_RET_STS_ERROR;
496 
497   END validate_rebook_reason;
498 
499 ------------------------------------------------------------------------------
500 -- PROCEDURE copy_rebook_stream
501 --
502 --  This procedure copys streams from Rebook Contract to Original Contract
503 --
504 -- Calls:
505 -- Called By:
506 ------------------------------------------------------------------------------
507   PROCEDURE copy_rebook_stream(
508                                x_return_status OUT NOCOPY VARCHAR2,
509                                x_msg_count     OUT NOCOPY NUMBER,
510                                x_msg_data      OUT NOCOPY VARCHAR2,
511                                p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE,
512                                p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE
513                               ) IS
514   l_proc_name VARCHAR2(35) := 'COPY_REBOOK_STREAM';
515   l_stmv_rec  stmv_rec_type;
516   l_selv_tbl  selv_tbl_type;
517   x_stmv_rec  stmv_rec_type;
518   x_selv_tbl  selv_tbl_type;
519   l_no_of_ele NUMBER := 0;
520   copy_failed EXCEPTION;
521 
522   CURSOR strm_hdr_csr (p_rebook_chr_id OKC_K_HEADERS_V.ID%TYPE) IS -- Bug 3984890
523   SELECT
524     str.id,
525     str.sty_id,
526     str.khr_id,
527     str.kle_id,
528     str.sgn_code,
529     str.say_code,
530     str.transaction_number,
531     str.active_yn,
532     str.object_version_number,
533     str.created_by,
534     str.creation_date,
535     str.last_updated_by,
536     str.last_update_date,
537     str.date_current,
538     str.date_working,
539     str.date_history,
540     str.comments,
541     str.program_id,
542     str.request_id,
543     str.program_application_id,
544     str.program_update_date,
545     str.last_update_login,
546     str.purpose_code,
547     sty.stream_type_purpose,
548     --Bug# 4212626
549     trx_id,
550     link_hist_stream_id
551     -- sty_code -- dropped after inclusion
552   FROM   okl_streams str,
553          okl_strm_type_v sty
554   WHERE  str.khr_id   = p_rebook_chr_id
555   AND    str.sty_id   = sty.id
556   AND    str.say_code = 'CURR';
557 
558 
559   -- Bug# 2857333
560   CURSOR orig_strm_csr (p_khr_id       OKC_K_HEADERS_V.ID%TYPE,
561                         p_kle_id       OKC_K_LINES_V.ID%TYPE,
562                         p_sty_id       OKL_STREAMS.sty_id%TYPE,
563                         p_purpose_code OKL_STREAMS.PURPOSE_CODE%TYPE) IS
564   SELECT id
565   FROM   okl_streams
566   WHERE  khr_id = p_khr_id
567   AND    sty_id = p_sty_id
568   AND    NVL(kle_id,-1) = NVL(p_kle_id, -1)
569   AND    say_code <> 'HIST'
570   --  AND    sgn_code <> 'INTC' -- bug 4737555
571   AND    sgn_code NOT IN ('INTC','LATE_CALC') -- Bug 6472228
572   AND    NVL(purpose_code,'XXXX') = NVL(p_purpose_code, 'XXXX');
573 
574   CURSOR strm_element_csr(p_stm_id okl_strm_elements.stm_id%TYPE) IS
575   SELECT *
576   FROM   okl_strm_elements
577   WHERE  stm_id = p_stm_id;
578 
579   CURSOR orig_line_csr (p_line_id OKC_K_LINES_B.ID%TYPE) IS
580   SELECT orig_system_id1
581   FROM   okc_k_lines_b
582   WHERE  id = p_line_id;
583 
584   CURSOR new_line_csr (p_line_id OKC_K_LINES_B.ID%TYPE) IS
585   SELECT id
586   FROM   okc_k_lines_b
587   WHERE  orig_system_id1 = p_line_id;
588 
589   CURSOR unbill_adj_csr( khrId NUMBER,
590                          kleid NUMBER ) IS
591   SELECT NVL(ele.amount,0) amount
592   FROM   okl_strm_elements ele,
593          okl_streams str,
594          --okl_strm_type_tl sty
595          okl_strm_type_v sty
596   WHERE  NVL(str.kle_id,-1) = kleid
597   AND    str.khr_id      = khrId
598   AND    str.sty_id      = sty.id
599   AND    str.say_code    = 'CURR'
600   AND    str.active_yn   = 'Y'
601   --AND    sty.name        = 'BILLING ADJUSTMENT'
602   AND    sty.stream_type_purpose = 'REBOOK_BILLING_ADJUSTMENT'
603   --AND    sty.LANGUAGE    = 'US'
604   AND    ele.stm_id      = str.id
605   AND    ele.date_billed IS NULL;
606 
607   CURSOR undesb_adj_csr( khrId NUMBER,
608                          kleid NUMBER ) IS
609   SELECT NVL(ele.amount,0) amount
610   FROM   okl_strm_elements ele,
611          okl_streams str,
612          --okl_strm_type_tl sty
613          okl_strm_type_v sty
614   WHERE  NVL(str.kle_id,-1) = kleid
615   AND    str.khr_id      = khrId
616   AND    str.sty_id      = sty.id
617   AND    str.say_code    = 'CURR'
618   AND    str.active_yn   = 'Y'
619   --AND    sty.name        = 'INVESTOR DISBURSEMENT ADJUSTMENT'
620   AND    sty.stream_type_purpose = 'INVESTOR_DISB_ADJUSTMENT'
621   --AND    sty.LANGUAGE    = 'US'
622   AND    ele.stm_id      = str.id
623   AND    ele.date_billed IS NULL;
624 
625 /* not required after UDS
626   CURSOR strm_code_csr (p_sty_id NUMBER) IS
627   SELECT code
628   FROM   okl_strm_type_v
629   WHERE  id = p_sty_id;
630 */
631 
632   l_orig_line_id OKC_K_LINES_B.ID%TYPE;
633 
634   l_orig_strm_tbl stmv_tbl_type;
635   x_orig_strm_tbl stmv_tbl_type;
636 
637   l_orig_strm_count NUMBER := 0;
638   --l_strm_code OKL_STRM_TYPE_V.CODE%TYPE;
639   l_unbill_adj_amount NUMBER := 0;
640   l_undesb_adj_amount NUMBER := 0;
641 
642   x_billing_adj_sty_id  NUMBER;
643   x_inv_disb_adj_sty_id NUMBER;
644 
645   --Bug# 4212626
646   -- Cursor to fetch Streams deleted during rebook
647   CURSOR deleted_streams_csr(p_orig_chr_id  IN NUMBER,
648                              p_rebook_chr_id   IN NUMBER) IS
649   SELECT orig_stm.id orig_stm_id,
650          sty.stream_type_purpose,
651          cle.lse_id
652   FROM   okl_streams orig_stm,
653          okc_k_lines_b cle,
654          okl_strm_type_v sty
655   WHERE  orig_stm.khr_id = p_orig_chr_id
656   AND    orig_stm.say_code = 'CURR'
657   --AND    orig_stm.sgn_code <> 'INTC' -- bug 4737555
658   AND    orig_stm.sgn_code NOT IN ('INTC','LATE_CALC') -- Bug6472228
659   AND    cle.id(+) = orig_stm.kle_id
660   AND    cle.dnz_chr_id(+) = orig_stm.khr_id
661   AND    sty.id = orig_stm.sty_id
662   AND    NOT EXISTS (SELECT 1
663                      FROM okl_streams new_stm
664                      WHERE new_stm.khr_id = p_rebook_chr_id
665                      AND   new_stm.say_code = 'CURR'
666                      AND   new_stm.link_hist_stream_id = orig_stm.id);
667 
668   --Bug# 4212626
669   -- Cursor to determine if Stream is billed
670   CURSOR stm_not_billed_csr(p_stm_id IN NUMBER) IS
671   SELECT 1
672   FROM okl_strm_elements sel
673   WHERE sel.stm_id = p_stm_id
674   AND sel.date_billed IS NULL
675   AND rownum = 1;
676 
677   stm_not_billed_rec stm_not_billed_csr%ROWTYPE;
678 
679   BEGIN
680     IF (G_DEBUG_ENABLED = 'Y') THEN
681       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
682     END IF;
683      x_return_status := OKC_API.G_RET_STS_SUCCESS;
684      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
685             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
686      END IF;
687 
688 /*
689  * Not required, got purpose from driving cursor strm_hdr_csr
690  *
691      -- Get Stream id for purpose = BILLING ADJUSTMENT
692      OKL_STREAMS_UTIL.get_primary_stream_type(
693        p_khr_id               => p_orig_chr_id,
694        p_primary_sty_purpose  => 'REBOOK_BILLING_ADJUSTMENT',
695        x_return_status        => x_return_status,
696        x_primary_sty_id       => x_billing_adj_sty_id
697        );
698 
699      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
700         RAISE copy_failed;
701      END IF;
702 
703      -- Get Stream id for purpose = INVESTOR_DISB_ADJUSTMENT
704      x_inv_disb_adj_sty_id := NULL;
705      OPEN inv_adj_csr;
706      FETCH inv_adj_csr INTO x_inv_disb_adj_sty_id;
707      CLOSE inv_adj_csr;
708 
709      OKL_STREAMS_UTIL.get_primary_stream_type(
710        p_khr_id               => p_orig_chr_id,
711        p_primary_sty_purpose  => 'INVESTOR_DISB_ADJUSTMENT',
712        x_return_status        => x_return_status,
713        x_primary_sty_id       => x_inv_disb_adj_sty_id
714        );
715 
716      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
717         RAISE copy_failed;
718      END IF;
719 */
720 
721      --Bug# 4212626: start
722      -- Historize Streams in the original contract
723      -- which are deleted during rebook
724      -- This cursor ignores all streams linked to
725      -- the Insurance Line, so no Insurance Streams
726      -- will be historized by this process
727 
728      l_orig_strm_tbl.DELETE;
729      l_orig_strm_count := 0;
730 
731      FOR deleted_streams_rec IN deleted_streams_csr
732                                  (p_orig_chr_id   => p_orig_chr_id,
733                                   p_rebook_chr_id => p_rebook_chr_id)
734      LOOP
735 
736        -- Ignore Insurance Streams
737        IF (NVL(deleted_streams_rec.lse_id,-1) = G_INSURANCE_LSE_ID) THEN
738 
739          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
740                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Ignore Insurance Stream Line ID: '||deleted_streams_rec.orig_stm_id);
741          END IF;
742          NULL;
743 
744        -- Ignore Investor Disbursement Adjustment Streams when
745        -- historizing streams deleted during rebook.
746        ELSIF (deleted_streams_rec.stream_type_purpose = 'INVESTOR_DISB_ADJUSTMENT') THEN
747 
748          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
749                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Ignore Inv Disb Adj Stream Line ID: '||deleted_streams_rec.orig_stm_id);
750          END IF;
751          NULL;
752 
753        -- Bug# 4775555
754        -- Ignore all Investor Streams when historizing streams deleted during rebook.
755        ELSIF (deleted_streams_rec.stream_type_purpose IN
756              ('INVESTOR_CNTRCT_OBLIGATION_PAY','INVESTOR_DISB_ADJUSTMENT','INVESTOR_EVERGREEN_RENT_PAY',
757               'INVESTOR_INTEREST_INCOME','INVESTOR_INTEREST_PAYABLE','INVESTOR_LATE_FEE_PAYABLE',
758               'INVESTOR_LATE_INTEREST_PAY','INVESTOR_PAYABLE','INVESTOR_PRETAX_INCOME',
759               'INVESTOR_PRINCIPAL_PAYABLE','INVESTOR_RECEIVABLE','INVESTOR_RENTAL_ACCRUAL',
760               'INVESTOR_RENT_BUYBACK','INVESTOR_RENT_DISB_BASIS','INVESTOR_RENT_PAYABLE',
761               'INVESTOR_RESIDUAL_BUYBACK','INVESTOR_RESIDUAL_DISB_BASIS','INVESTOR_RESIDUAL_PAY',
762               'INVESTOR_VARIABLE_INTEREST','PV_RENT_SECURITIZED','PV_RV_SECURITIZED'))THEN
763 
764          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
765                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Ignore Investor Stream Line ID: '||deleted_streams_rec.orig_stm_id);
766          END IF;
767          NULL;
768 
769        -- Historize Billing Adjustment Streams only if they have been billed, else
770        -- ignore Billing Adjustment Streams.
771        ELSIF (deleted_streams_rec.stream_type_purpose = 'REBOOK_BILLING_ADJUSTMENT') THEN
772 
773          OPEN stm_not_billed_csr(p_stm_id => deleted_streams_rec.orig_stm_id);
774          FETCH stm_not_billed_csr INTO stm_not_billed_rec;
775          IF stm_not_billed_csr%FOUND THEN
776            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
777                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Ignore Billing Adj Stream Line ID: '||deleted_streams_rec.orig_stm_id);
778            END IF;
779            NULL;
780 
781          ELSE
782            l_orig_strm_count := l_orig_strm_count + 1;
783            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
784                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Historize Billing Adj Stream Line ID: '||deleted_streams_rec.orig_stm_id);
785            END IF;
786 
787            l_orig_strm_tbl(l_orig_strm_count).id        := deleted_streams_rec.orig_stm_id;
788            l_orig_strm_tbl(l_orig_strm_count).say_code  := 'HIST';
789            l_orig_strm_tbl(l_orig_strm_count).date_history  := SYSDATE;
790            l_orig_strm_tbl(l_orig_strm_count).active_yn := 'N';
791          END IF;
792          CLOSE stm_not_billed_csr;
793 
794        ELSE
795          l_orig_strm_count := l_orig_strm_count + 1;
796 
797          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
798                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Historize Deleted Stream Line ID: '||deleted_streams_rec.orig_stm_id);
799          END IF;
800 
801          l_orig_strm_tbl(l_orig_strm_count).id        := deleted_streams_rec.orig_stm_id;
802          l_orig_strm_tbl(l_orig_strm_count).say_code  := 'HIST';
803          l_orig_strm_tbl(l_orig_strm_count).date_history  := SYSDATE;
804          l_orig_strm_tbl(l_orig_strm_count).active_yn := 'N';
805        END IF;
806      END LOOP;
807      --Bug# 4212626: end
808 
809      IF (l_orig_strm_tbl.COUNT > 0) THEN
810        okl_streams_pub.update_streams(
811                                       p_api_version    => 1.0,
812                                       p_init_msg_list  => OKC_API.G_FALSE,
813                                       x_return_status  => x_return_status,
814                                       x_msg_count      => x_msg_count,
815                                       x_msg_data       => x_msg_data,
816                                       p_stmv_tbl       => l_orig_strm_tbl,
817                                       x_stmv_tbl       => x_orig_strm_tbl
818                                      );
819 
820        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
821                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of Deleted Orig strm to HIST '||x_return_status);
822        END IF;
823 
824        IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
825          RAISE copy_failed;
826        END IF;
827      END IF;
828 
829      FOR strm_hdr_rec IN strm_hdr_csr (p_rebook_chr_id)
830      LOOP
831 /*
832      OPEN strm_hdr_csr(p_rebook_chr_id);
833      FETCH strm_hdr_csr INTO l_stmv_rec;
834 
835      IF strm_hdr_csr%NOTFOUND THEN
836         okl_api.set_message(
837                             G_APP_NAME,
838                             G_LLA_NO_STREAM
839                            );
840 
841         RAISE copy_failed;
842      END IF;
843      CLOSE strm_hdr_csr;
844 */
845         --l_stmv_rec := strm_hdr_rec;
846 
847         l_stmv_rec.id                     := strm_hdr_rec.id;
848         l_stmv_rec.sty_id                 := strm_hdr_rec.sty_id;
849         l_stmv_rec.khr_id                 := strm_hdr_rec.khr_id;
850         l_stmv_rec.kle_id                 := strm_hdr_rec.kle_id;
851         l_stmv_rec.sgn_code               := strm_hdr_rec.sgn_code;
852         l_stmv_rec.say_code               := strm_hdr_rec.say_code;
853         l_stmv_rec.transaction_number     := strm_hdr_rec.transaction_number;
854         l_stmv_rec.active_yn              := strm_hdr_rec.active_yn;
855         l_stmv_rec.object_version_number  := strm_hdr_rec.object_version_number;
856         l_stmv_rec.created_by             := strm_hdr_rec.created_by;
857         l_stmv_rec.creation_date          := strm_hdr_rec.creation_date;
858         l_stmv_rec.last_updated_by        := strm_hdr_rec.last_updated_by;
859         l_stmv_rec.last_update_date       := strm_hdr_rec.last_update_date;
860         l_stmv_rec.date_current           := strm_hdr_rec.date_current;
861         l_stmv_rec.date_working           := strm_hdr_rec.date_working;
862         l_stmv_rec.date_history           := strm_hdr_rec.date_history;
863         l_stmv_rec.comments               := strm_hdr_rec.comments;
864         l_stmv_rec.program_id             := strm_hdr_rec.program_id;
865         l_stmv_rec.request_id             := strm_hdr_rec.request_id;
866         l_stmv_rec.program_application_id := strm_hdr_rec.program_application_id;
867         l_stmv_rec.program_update_date    := strm_hdr_rec.program_update_date;
868         l_stmv_rec.last_update_login      := strm_hdr_rec.last_update_login;
869         l_stmv_rec.purpose_code           := strm_hdr_rec.purpose_code;
870         --Bug# 4212626
871         l_stmv_rec.trx_id                 := strm_hdr_rec.trx_id;
872         l_stmv_rec.link_hist_stream_id    := strm_hdr_rec.link_hist_stream_id;
873 
874 
875 /* not required after UDS
876         -- Get Stream name
877         FOR strm_code_rec IN strm_code_csr (l_stmv_rec.sty_id)
878         LOOP
879            l_strm_code := strm_code_rec.code;
880         END LOOP;
881 */
882 
883         --
884         -- Get Original line id, Bug# 2745885
885         --
886         IF (l_stmv_rec.kle_id IS NOT NULL) THEN
887            OPEN orig_line_csr (l_stmv_rec.kle_id);
888            FETCH orig_line_csr INTO l_orig_line_id;
889            CLOSE orig_line_csr;
890 
891            IF( l_orig_line_id IS NULL) THEN -- New line added during rebook
892              OPEN new_line_csr(l_stmv_rec.kle_id);
893              FETCH new_line_csr INTO l_orig_line_id;
894              CLOSE new_line_csr;
895            END IF;
896 
897         ELSE
898            l_orig_line_id := NULL; -- Stream at header level
899         END IF;
900 
901         --
902         -- Get unbilled adjustment stream amount
903         --
904         l_unbill_adj_amount := 0;
905         --Bug# 4212626: Billing Adjustment is now calculated during Activation
906         /*
907         OPEN unbill_adj_csr (p_orig_chr_id,
908                              NVL(l_orig_line_id,-1));
909         FETCH unbill_adj_csr INTO l_unbill_adj_amount;
910         CLOSE unbill_adj_csr;
911         */
912 
913         --
914         -- Get undisbursed adjustment stream amount
915         --
916         l_undesb_adj_amount := 0;
917         OPEN undesb_adj_csr (p_orig_chr_id,
918                              NVL(l_orig_line_id,-1));
919         FETCH undesb_adj_csr INTO l_undesb_adj_amount;
920         CLOSE undesb_adj_csr;
921 
922         --
923         -- Bug# 2857333, 03/12/2003
924         -- Process to check and update stream to 'HIST'
925         -- on original contract
926         --
927         l_orig_strm_tbl.DELETE;
928         l_orig_strm_count := 0;
929 
930         FOR orig_strm_rec IN orig_strm_csr (p_orig_chr_id,
931                                             l_orig_line_id,
932                                             l_stmv_rec.sty_id,
933                                             l_stmv_rec.purpose_code)
934         LOOP
935           l_orig_strm_count := l_orig_strm_count + 1;
936 
937           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
938                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Stream Line ID: '||orig_strm_rec.id);
939           END IF;
940 
941           l_orig_strm_tbl(l_orig_strm_count).id        := orig_strm_rec.id;
942           l_orig_strm_tbl(l_orig_strm_count).say_code  := 'HIST';
943           l_orig_strm_tbl(l_orig_strm_count).active_yn := 'N';
944           l_orig_strm_tbl(l_orig_strm_count).date_history  := SYSDATE;
945         END LOOP;
946 
947         IF (l_orig_strm_tbl.COUNT > 0) THEN
948           okl_streams_pub.update_streams(
949                                       p_api_version    => 1.0,
950                                       p_init_msg_list  => OKC_API.G_FALSE,
951                                       x_return_status  => x_return_status,
952                                       x_msg_count      => x_msg_count,
953                                       x_msg_data       => x_msg_data,
954                                       p_stmv_tbl       => l_orig_strm_tbl,
955                                       x_stmv_tbl       => x_orig_strm_tbl
956                                      );
957 
958           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
959                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of Orig strm to HIST '||x_return_status);
960           END IF;
961 
962           IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
963              RAISE copy_failed;
964           END IF;
965         END IF;
966 
967         l_stmv_rec.khr_id             := p_orig_chr_id;  -- Overwriting Rebook CHR_ID with Original CHR_ID
968         l_stmv_rec.kle_id             := l_orig_line_id; -- Overwritting Rebook Line ID with Original Line ID
969         l_stmv_rec.say_code           := 'CURR';
970         -- l_stmv_rec.active_yn          := 'Y';  -- Commented for Multi-Gap enhancement
971         l_stmv_rec.sgn_code           := 'STMP-REBK';
972         l_stmv_rec.comments           := 'Copied Stream From Contract '||
973                                           l_stmv_rec.khr_id||', TRX_NUMBER='||l_stmv_rec.transaction_number||
974                                           ' during Rebooking.';
975         l_no_of_ele                   := 0;
976         l_stmv_rec.date_current       := SYSDATE;
977         l_selv_tbl.DELETE; -- initialize table
978 
979         FOR strm_element_rec IN strm_element_csr(l_stmv_rec.id)
980         LOOP
981            l_no_of_ele := l_no_of_ele + 1;
982 
983            l_selv_tbl(l_no_of_ele).object_version_number  := strm_element_rec.object_version_number;
984            l_selv_tbl(l_no_of_ele).stm_id                 := strm_element_rec.stm_id;
985 
986            --
987            -- Consider unbilled adjustment from orig contract, if any
988            --
989            --Bug# 4212626: Calculation of l_unbill_adj_amount has been commented out, so l_unbill_adj_amount
990            --will always be zero.
991            --IF (l_strm_code = 'BILLING ADJUSTMENT') THEN
992 
993            --debug_message('Adj: '||l_unbill_adj_amount);
994            --debug_message('x_billing_adj_sty_id : '||x_billing_adj_sty_id);
995            --debug_message('l_stmv_rec.sty_id : '||l_stmv_rec.sty_id);
996 
997            l_selv_tbl(l_no_of_ele).amount := strm_element_rec.amount;
998            --IF (x_billing_adj_sty_id = l_stmv_rec.sty_id) THEN
999 
1000            IF (strm_hdr_rec.stream_type_purpose = 'REBOOK_BILLING_ADJUSTMENT') THEN -- Bug 3984890
1001               l_selv_tbl(l_no_of_ele).amount := strm_element_rec.amount + NVL(l_unbill_adj_amount,0);
1002            END IF;
1003 
1004            --
1005            -- Consider undisbursed adjustment from orig contract, if any
1006            --
1007 
1008            --IF (l_strm_code = 'INVESTOR DISBURSEMENT ADJUSTMENT') THEN
1009            --IF (x_inv_disb_adj_sty_id = l_stmv_rec.sty_id) THEN
1010 
1011            IF (strm_hdr_rec.stream_type_purpose = 'INVESTOR_DISB_ADJUSTMENT') THEN -- Bug 3984890
1012               l_selv_tbl(l_no_of_ele).amount := strm_element_rec.amount + NVL(l_undesb_adj_amount,0);
1013            END IF;
1014 
1015            l_selv_tbl(l_no_of_ele).comments               := strm_element_rec.comments;
1016            l_selv_tbl(l_no_of_ele).accrued_yn             := strm_element_rec.accrued_yn;
1017            l_selv_tbl(l_no_of_ele).stream_element_date    := strm_element_rec.stream_element_date;
1018            l_selv_tbl(l_no_of_ele).program_id             := strm_element_rec.program_id;
1019            l_selv_tbl(l_no_of_ele).request_id             := strm_element_rec.request_id;
1020            l_selv_tbl(l_no_of_ele).program_application_id := strm_element_rec.program_application_id;
1021            l_selv_tbl(l_no_of_ele).program_update_date    := strm_element_rec.program_update_date;
1022            l_selv_tbl(l_no_of_ele).se_line_number         := strm_element_rec.se_line_number;
1023            l_selv_tbl(l_no_of_ele).date_billed            := strm_element_rec.date_billed;
1024            --Bug# 4212626
1025            l_selv_tbl(l_no_of_ele).bill_adj_flag          := strm_element_rec.bill_adj_flag;
1026            l_selv_tbl(l_no_of_ele).accrual_adj_flag       := strm_element_rec.accrual_adj_flag;
1027            --Bug#4884423
1028            l_selv_tbl(l_no_of_ele).date_disbursed         := strm_element_rec.date_disbursed;
1029 
1030         END LOOP;
1031 
1032         IF (l_no_of_ele = 0) THEN
1033            okl_api.set_message(
1034                                G_APP_NAME,
1035                                G_LLA_NO_STREAM_ELEMENT
1036                               );
1037            RAISE copy_failed;
1038         END IF;
1039 
1040         -- call API to create new streams
1041         okl_streams_pub.create_streams(
1042                                        p_api_version    => 1.0,
1043                                        p_init_msg_list  => OKC_API.G_FALSE,
1044                                        x_return_status  => x_return_status,
1045                                        x_msg_count      => x_msg_count,
1046                                        x_msg_data       => x_msg_data,
1047                                        p_stmv_rec       => l_stmv_rec,
1048                                        p_selv_tbl       => l_selv_tbl,
1049                                        x_stmv_rec       => x_stmv_rec,
1050                                        x_selv_tbl       => x_selv_tbl
1051                                       );
1052 
1053         IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1054            RAISE copy_failed;
1055         END IF;
1056 
1057      END LOOP; -- Header stream
1058 
1059 
1060      RETURN;
1061 
1062   EXCEPTION
1063      WHEN copy_failed THEN
1064         x_return_status := OKC_API.G_RET_STS_ERROR;
1065   END copy_rebook_stream;
1066 
1067 ------------------------------------------------------------------------------
1068 -- PROCEDURE get_orig_chr_id
1069 --
1070 --  This procedure gets the Oroginal Contract ID for a given contract.
1071 --  Used here to get Parent Contract Header ID from which rebooking got initiated
1072 --
1073 -- Calls:
1074 -- Called By:
1075 ------------------------------------------------------------------------------
1076   PROCEDURE get_orig_chr_id(
1077                             x_return_status OUT NOCOPY VARCHAR2,
1078                             p_chr_id        IN  NUMBER,
1079                             x_orig_chr_id   OUT NOCOPY OKC_K_HEADERS_V.ID%TYPE
1080                            ) IS
1081 
1082   l_proc_name      VARCHAR2(35) := 'GET_ORIG_CHR_ID';
1083   l_orig_system_id OKC_K_HEADERS_V.ID%TYPE;
1084   orig_failed      EXCEPTION;
1085 
1086   CURSOR orig_csr (p_chr_id OKC_K_HEADERS_V.id%TYPE) IS
1087   SELECT orig_system_id1
1088   FROM   OKC_K_HEADERS_V
1089   WHERE  id = p_chr_id;
1090 
1091   BEGIN
1092     IF (G_DEBUG_ENABLED = 'Y') THEN
1093       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1094     END IF;
1095 
1096     x_return_status := OKC_API.G_RET_STS_SUCCESS;
1097     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1098           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1099     END IF;
1100 
1101     OPEN orig_csr(p_chr_id);
1102     FETCH orig_csr INTO l_orig_system_id;
1103     IF orig_csr%NOTFOUND THEN
1104        RAISE orig_failed;
1105     END IF;
1106     IF (l_orig_system_id IS NULL) THEN
1107        RAISE orig_failed;
1108     END IF;
1109 
1110     CLOSE orig_csr;
1111     x_orig_chr_id := l_orig_system_id;
1112 
1113     RETURN;
1114 
1115   EXCEPTION
1116 
1117      WHEN orig_failed THEN
1118        IF orig_csr%ISOPEN THEN
1119          CLOSE orig_csr;
1120        END IF;
1121        x_return_status := OKC_API.G_RET_STS_ERROR;
1122 
1123   END get_orig_chr_id;
1124 
1125 ------------------------------------------------------------------------------
1126 -- PROCEDURE change_stream_status
1127 --
1128 --  This procedure changes Stream Status to 3rd parameter for a contract
1129 --
1130 -- Calls:
1131 -- Called By:
1132 ------------------------------------------------------------------------------
1133   PROCEDURE change_stream_status(
1134                                  x_return_status OUT NOCOPY VARCHAR2,
1135                                  x_msg_count     OUT NOCOPY NUMBER,
1136                                  x_msg_data      OUT NOCOPY VARCHAR2,
1137                                  p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
1138                                  p_status        IN  VARCHAR2,
1139                                  p_active_yn     IN  VARCHAR2
1140                                 ) IS
1141 
1142   l_proc_name VARCHAR2(35) := 'CHANGE_STREAM_STATUS';
1143   l_stmv_rec  stmv_rec_type;
1144   x_stmv_rec  stmv_rec_type;
1145   strm_failed EXCEPTION;
1146   l_id        NUMBER;
1147 
1148   CURSOR strm_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1149   SELECT id
1150   FROM   okl_streams
1151   WHERE  khr_id = p_chr_id
1152   -- BUg 4737555
1153 --  AND    SGN_CODE <> 'INTC';
1154   AND    SGN_CODE NOT IN ('INTC','LATE_CALC'); -- Bug 6472228
1155 
1156   BEGIN
1157     IF (G_DEBUG_ENABLED = 'Y') THEN
1158       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1159     END IF;
1160     x_return_status     := OKC_API.G_RET_STS_SUCCESS;
1161 
1162     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1163           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1164     END IF;
1165 
1166     FOR strm_rec IN strm_csr (p_chr_id)
1167     LOOP
1168 /*
1169     OPEN strm_csr(p_chr_id);
1170     FETCH strm_csr INTO l_id;
1171     IF strm_csr%NOTFOUND THEN
1172        okl_api.set_message(
1173                            G_APP_NAME,
1174                            G_LLA_NO_STREAM
1175                           );
1176        debug_message('Failed');
1177        RAISE strm_failed;
1178     END IF;
1179     CLOSE strm_csr;
1180 */
1181 
1182        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1183                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After CSR');
1184        END IF;
1185        l_stmv_rec.id       := strm_rec.id;
1186        l_stmv_rec.khr_id   := p_chr_id;
1187        l_stmv_rec.say_code := p_status;
1188        l_stmv_rec.active_yn := p_active_yn;
1189 
1190        IF p_status = 'WORK' THEN
1191          l_stmv_rec.date_working := SYSDATE;
1192        ELSIF p_status = 'CURR' THEN
1193          l_stmv_rec.date_current := SYSDATE;
1194        ELSIF p_status = 'HIST' THEN
1195          l_stmv_rec.date_history := SYSDATE;
1196        END IF;
1197 
1198        okl_streams_pub.update_streams(
1199                                       p_api_version    => 1.0,
1200                                       p_init_msg_list  => OKC_API.G_FALSE,
1201                                       x_return_status  => x_return_status,
1202                                       x_msg_count      => x_msg_count,
1203                                       x_msg_data       => x_msg_data,
1204                                       p_stmv_rec       => l_stmv_rec,
1205                                       x_stmv_rec       => x_stmv_rec
1206                                      );
1207        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1208                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update API Call');
1209        END IF;
1210        IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1211           RAISE strm_failed;
1212        END IF;
1213 
1214     END LOOP;
1215 
1216     RETURN;
1217 
1218   EXCEPTION
1219      WHEN strm_failed THEN
1220         IF strm_csr%ISOPEN THEN
1221            CLOSE strm_csr;
1222         END IF;
1223         x_return_status := OKC_API.G_RET_STS_ERROR;
1224   END change_stream_status;
1225 
1226 ------------------------------------------------------------------------------
1227 -- PROCEDURE get_sll_rules
1228 --
1229 --  This procedure retrieves all SLL related to given SLH rule under LALEVL Category
1230 --
1231 -- Calls:
1232 -- Called By:
1233 ------------------------------------------------------------------------------
1234    PROCEDURE get_rule_info(
1235                   x_return_status OUT NOCOPY VARCHAR2,
1236                   p_rebook_chr_id IN  NUMBER,
1237                   p_rebook_cle_id IN  NUMBER,
1238                   p_rgd_code      IN  VARCHAR2,
1239                   p_rule_code     IN  VARCHAR2,
1240                   x_rulv_rec      OUT NOCOPY rulv_rec_type,
1241                   x_rule_count    OUT NOCOPY NUMBER
1242                  ) IS
1243     CURSOR okc_rulv_csr (p_rgd_code  IN VARCHAR2,
1244                          p_rule_code IN VARCHAR2,
1245                          p_chr_id    IN NUMBER,
1246                          p_cle_id    IN NUMBER) IS
1247     SELECT
1248             rule.ID,
1249             rule.OBJECT_VERSION_NUMBER,
1250             rule.SFWT_FLAG,
1251             rule.OBJECT1_ID1,
1252             rule.OBJECT2_ID1,
1253             rule.OBJECT3_ID1,
1254             rule.OBJECT1_ID2,
1255             rule.OBJECT2_ID2,
1256             rule.OBJECT3_ID2,
1257             rule.JTOT_OBJECT1_CODE,
1258             rule.JTOT_OBJECT2_CODE,
1259             rule.JTOT_OBJECT3_CODE,
1260             rule.DNZ_CHR_ID,
1261             rule.RGP_ID,
1262             rule.PRIORITY,
1263             rule.STD_TEMPLATE_YN,
1264             rule.COMMENTS,
1265             rule.WARN_YN,
1266             rule.ATTRIBUTE_CATEGORY,
1267             rule.ATTRIBUTE1,
1268             rule.ATTRIBUTE2,
1269             rule.ATTRIBUTE3,
1270             rule.ATTRIBUTE4,
1271             rule.ATTRIBUTE5,
1272             rule.ATTRIBUTE6,
1273             rule.ATTRIBUTE7,
1274             rule.ATTRIBUTE8,
1275             rule.ATTRIBUTE9,
1276             rule.ATTRIBUTE10,
1277             rule.ATTRIBUTE11,
1278             rule.ATTRIBUTE12,
1279             rule.ATTRIBUTE13,
1280             rule.ATTRIBUTE14,
1281             rule.ATTRIBUTE15,
1282             rule.CREATED_BY,
1283             rule.CREATION_DATE,
1284             rule.LAST_UPDATED_BY,
1285             rule.LAST_UPDATE_DATE,
1286             rule.LAST_UPDATE_LOGIN,
1287             --rule.TEXT,
1288             rule.RULE_INFORMATION_CATEGORY,
1289             rule.RULE_INFORMATION1,
1290             rule.RULE_INFORMATION2,
1291             rule.RULE_INFORMATION3,
1292             rule.RULE_INFORMATION4,
1293             rule.RULE_INFORMATION5,
1294             rule.RULE_INFORMATION6,
1295             rule.RULE_INFORMATION7,
1296             rule.RULE_INFORMATION8,
1297             rule.RULE_INFORMATION9,
1298             rule.RULE_INFORMATION10,
1299             rule.RULE_INFORMATION11,
1300             rule.RULE_INFORMATION12,
1301             rule.RULE_INFORMATION13,
1302             rule.RULE_INFORMATION14,
1303             rule.RULE_INFORMATION15,
1304             rule.TEMPLATE_YN,
1305             rule.ans_set_jtot_object_code,
1306             rule.ans_set_jtot_object_id1,
1307             rule.ans_set_jtot_object_id2,
1308             rule.DISPLAY_SEQUENCE
1309      FROM OKC_RULE_GROUPS_V rgp,
1310           Okc_Rules_V rule
1311      WHERE rgp.id                    = rule.rgp_id
1312      AND   rgp.rgd_code              = p_rgd_code
1313      AND   RULE_INFORMATION_CATEGORY = p_rule_code
1314      AND   rgp.dnz_chr_id            = p_chr_id
1315      AND   NVL(rgp.cle_id, -1)       = p_cle_id;
1316 
1317      l_rulv_rec                  rulv_rec_type;
1318      i                           NUMBER DEFAULT 0;
1319      l_proc_name                 VARCHAR2(35) := 'GET_RULE_INFO';
1320   BEGIN
1321     IF (G_DEBUG_ENABLED = 'Y') THEN
1322       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1323     END IF;
1324 
1325     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1326           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1327       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rgd_code : '||p_rgd_code);
1328       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rule_code : '||p_rule_code);
1329       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'chr_id : '||p_rebook_chr_id);
1330     END IF;
1331     -- Get current database values
1332     OPEN okc_rulv_csr (p_rgd_code,
1333                        p_rule_code,
1334                        p_rebook_chr_id,
1335                        p_rebook_cle_id);
1336     LOOP
1337     FETCH okc_rulv_csr INTO
1338               l_rulv_rec.ID,
1339               l_rulv_rec.OBJECT_VERSION_NUMBER,
1340               l_rulv_rec.SFWT_FLAG,
1341               l_rulv_rec.OBJECT1_ID1,
1342               l_rulv_rec.OBJECT2_ID1,
1343               l_rulv_rec.OBJECT3_ID1,
1344               l_rulv_rec.OBJECT1_ID2,
1345               l_rulv_rec.OBJECT2_ID2,
1346               l_rulv_rec.OBJECT3_ID2,
1347               l_rulv_rec.JTOT_OBJECT1_CODE,
1348               l_rulv_rec.JTOT_OBJECT2_CODE,
1349               l_rulv_rec.JTOT_OBJECT3_CODE,
1350               l_rulv_rec.DNZ_CHR_ID,
1351               l_rulv_rec.RGP_ID,
1352               l_rulv_rec.PRIORITY,
1353               l_rulv_rec.STD_TEMPLATE_YN,
1354               l_rulv_rec.COMMENTS,
1355               l_rulv_rec.WARN_YN,
1356               l_rulv_rec.ATTRIBUTE_CATEGORY,
1357               l_rulv_rec.ATTRIBUTE1,
1358               l_rulv_rec.ATTRIBUTE2,
1359               l_rulv_rec.ATTRIBUTE3,
1360               l_rulv_rec.ATTRIBUTE4,
1361               l_rulv_rec.ATTRIBUTE5,
1362               l_rulv_rec.ATTRIBUTE6,
1363               l_rulv_rec.ATTRIBUTE7,
1364               l_rulv_rec.ATTRIBUTE8,
1365               l_rulv_rec.ATTRIBUTE9,
1366               l_rulv_rec.ATTRIBUTE10,
1367               l_rulv_rec.ATTRIBUTE11,
1368               l_rulv_rec.ATTRIBUTE12,
1369               l_rulv_rec.ATTRIBUTE13,
1370               l_rulv_rec.ATTRIBUTE14,
1371               l_rulv_rec.ATTRIBUTE15,
1372               l_rulv_rec.CREATED_BY,
1373               l_rulv_rec.CREATION_DATE,
1374               l_rulv_rec.LAST_UPDATED_BY,
1375               l_rulv_rec.LAST_UPDATE_DATE,
1376               l_rulv_rec.LAST_UPDATE_LOGIN,
1377               --l_rulv_rec.TEXT,
1378               l_rulv_rec.RULE_INFORMATION_CATEGORY,
1379               l_rulv_rec.RULE_INFORMATION1,
1380               l_rulv_rec.RULE_INFORMATION2,
1381               l_rulv_rec.RULE_INFORMATION3,
1382               l_rulv_rec.RULE_INFORMATION4,
1383               l_rulv_rec.RULE_INFORMATION5,
1384               l_rulv_rec.RULE_INFORMATION6,
1385               l_rulv_rec.RULE_INFORMATION7,
1386               l_rulv_rec.RULE_INFORMATION8,
1387               l_rulv_rec.RULE_INFORMATION9,
1388               l_rulv_rec.RULE_INFORMATION10,
1389               l_rulv_rec.RULE_INFORMATION11,
1390               l_rulv_rec.RULE_INFORMATION12,
1391               l_rulv_rec.RULE_INFORMATION13,
1392               l_rulv_rec.RULE_INFORMATION14,
1393               l_rulv_rec.RULE_INFORMATION15,
1394               l_rulv_rec.TEMPLATE_YN,
1395               l_rulv_rec.ans_set_jtot_object_code,
1396               l_rulv_rec.ans_set_jtot_object_id1,
1397               l_rulv_rec.ans_set_jtot_object_id2,
1398               l_rulv_rec.DISPLAY_SEQUENCE ;
1399     EXIT WHEN okc_rulv_csr%NOTFOUND;
1400       i := okc_rulv_csr%RowCount;
1401       x_rulv_rec := l_rulv_rec;
1402     END LOOP;
1403     CLOSE okc_rulv_csr;
1404     x_rule_count := i;
1405 
1406     RETURN;
1407 
1408    END get_rule_info;
1409 
1410 ------------------------------------------------------------------------------
1411 -- PROCEDURE get_sll_rules
1412 --
1413 --  This procedure retrieves all SLL related to given SLH rule under LALEVL Category
1414 --
1415 -- Calls:
1416 -- Called By:
1417 ------------------------------------------------------------------------------
1418    PROCEDURE get_sll_rules(
1419                            x_return_status  OUT NOCOPY VARCHAR2,
1420                            x_msg_count      OUT NOCOPY NUMBER,
1421                            x_msg_data       OUT NOCOPY VARCHAR2,
1422                            p_rgpv_rec       IN  rgpv_rec_type,
1423                            p_rdf_code       IN  VARCHAR2,
1424                            p_slh_id         IN  NUMBER,
1425                            x_rulv_tbl       OUT NOCOPY rulv_tbl_type,
1426                            x_rule_count     OUT NOCOPY NUMBER
1427                           ) IS
1428     CURSOR okc_rulv_csr (p_rgp_id IN NUMBER,
1429                          p_rdf_code IN VARCHAR2,
1430                          p_slh_id   IN NUMBER) IS
1431     SELECT
1432             ID,
1433             OBJECT_VERSION_NUMBER,
1434             SFWT_FLAG,
1435             OBJECT1_ID1,
1436             OBJECT2_ID1,
1437             OBJECT3_ID1,
1438             OBJECT1_ID2,
1439             OBJECT2_ID2,
1440             OBJECT3_ID2,
1441             JTOT_OBJECT1_CODE,
1442             JTOT_OBJECT2_CODE,
1443             JTOT_OBJECT3_CODE,
1444             DNZ_CHR_ID,
1445             RGP_ID,
1446             PRIORITY,
1447             STD_TEMPLATE_YN,
1448             COMMENTS,
1449             WARN_YN,
1450             ATTRIBUTE_CATEGORY,
1451             ATTRIBUTE1,
1452             ATTRIBUTE2,
1453             ATTRIBUTE3,
1454             ATTRIBUTE4,
1455             ATTRIBUTE5,
1456             ATTRIBUTE6,
1457             ATTRIBUTE7,
1458             ATTRIBUTE8,
1459             ATTRIBUTE9,
1460             ATTRIBUTE10,
1461             ATTRIBUTE11,
1462             ATTRIBUTE12,
1463             ATTRIBUTE13,
1464             ATTRIBUTE14,
1465             ATTRIBUTE15,
1466             CREATED_BY,
1467             CREATION_DATE,
1468             LAST_UPDATED_BY,
1469             LAST_UPDATE_DATE,
1470             LAST_UPDATE_LOGIN,
1471             --TEXT,
1472             RULE_INFORMATION_CATEGORY,
1473             RULE_INFORMATION1,
1474             RULE_INFORMATION2,
1475             RULE_INFORMATION3,
1476             RULE_INFORMATION4,
1477             RULE_INFORMATION5,
1478             RULE_INFORMATION6,
1479             RULE_INFORMATION7,
1480             RULE_INFORMATION8,
1481             RULE_INFORMATION9,
1482             RULE_INFORMATION10,
1483             RULE_INFORMATION11,
1484             RULE_INFORMATION12,
1485             RULE_INFORMATION13,
1486             RULE_INFORMATION14,
1487             RULE_INFORMATION15,
1488             TEMPLATE_YN,
1489             ans_set_jtot_object_code,
1490             ans_set_jtot_object_id1,
1491             ans_set_jtot_object_id2,
1492             DISPLAY_SEQUENCE
1493      FROM Okc_Rules_V
1494      WHERE okc_rules_v.rgp_id      = p_rgp_id
1495      AND   okc_rules_v.object2_id1 = p_slh_id
1496      AND   RULE_INFORMATION_CATEGORY = DECODE(p_rdf_code,NULL,RULE_INFORMATION_CATEGORY,p_rdf_code);
1497 
1498      l_rulv_rec                  rulv_rec_type;
1499      i                           NUMBER DEFAULT 0;
1500      l_proc_name                 VARCHAR2(35) := 'GET_SLL_RULES';
1501   BEGIN
1502     IF (G_DEBUG_ENABLED = 'Y') THEN
1503       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1504     END IF;
1505 
1506     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1507           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1508     END IF;
1509     -- Get current database values
1510     OPEN okc_rulv_csr (p_rgpv_rec.id,
1511                        p_rdf_code,
1512                        p_slh_id);
1513     LOOP
1514     FETCH okc_rulv_csr INTO
1515               l_rulv_rec.ID,
1516               l_rulv_rec.OBJECT_VERSION_NUMBER,
1517               l_rulv_rec.SFWT_FLAG,
1518               l_rulv_rec.OBJECT1_ID1,
1519               l_rulv_rec.OBJECT2_ID1,
1520               l_rulv_rec.OBJECT3_ID1,
1521               l_rulv_rec.OBJECT1_ID2,
1522               l_rulv_rec.OBJECT2_ID2,
1523               l_rulv_rec.OBJECT3_ID2,
1524               l_rulv_rec.JTOT_OBJECT1_CODE,
1525               l_rulv_rec.JTOT_OBJECT2_CODE,
1526               l_rulv_rec.JTOT_OBJECT3_CODE,
1527               l_rulv_rec.DNZ_CHR_ID,
1528               l_rulv_rec.RGP_ID,
1529               l_rulv_rec.PRIORITY,
1530               l_rulv_rec.STD_TEMPLATE_YN,
1531               l_rulv_rec.COMMENTS,
1532               l_rulv_rec.WARN_YN,
1533               l_rulv_rec.ATTRIBUTE_CATEGORY,
1534               l_rulv_rec.ATTRIBUTE1,
1535               l_rulv_rec.ATTRIBUTE2,
1536               l_rulv_rec.ATTRIBUTE3,
1537               l_rulv_rec.ATTRIBUTE4,
1538               l_rulv_rec.ATTRIBUTE5,
1539               l_rulv_rec.ATTRIBUTE6,
1540               l_rulv_rec.ATTRIBUTE7,
1541               l_rulv_rec.ATTRIBUTE8,
1542               l_rulv_rec.ATTRIBUTE9,
1543               l_rulv_rec.ATTRIBUTE10,
1544               l_rulv_rec.ATTRIBUTE11,
1545               l_rulv_rec.ATTRIBUTE12,
1546               l_rulv_rec.ATTRIBUTE13,
1547               l_rulv_rec.ATTRIBUTE14,
1548               l_rulv_rec.ATTRIBUTE15,
1549               l_rulv_rec.CREATED_BY,
1550               l_rulv_rec.CREATION_DATE,
1551               l_rulv_rec.LAST_UPDATED_BY,
1552               l_rulv_rec.LAST_UPDATE_DATE,
1553               l_rulv_rec.LAST_UPDATE_LOGIN,
1554               --l_rulv_rec.TEXT,
1555               l_rulv_rec.RULE_INFORMATION_CATEGORY,
1556               l_rulv_rec.RULE_INFORMATION1,
1557               l_rulv_rec.RULE_INFORMATION2,
1558               l_rulv_rec.RULE_INFORMATION3,
1559               l_rulv_rec.RULE_INFORMATION4,
1560               l_rulv_rec.RULE_INFORMATION5,
1561               l_rulv_rec.RULE_INFORMATION6,
1562               l_rulv_rec.RULE_INFORMATION7,
1563               l_rulv_rec.RULE_INFORMATION8,
1564               l_rulv_rec.RULE_INFORMATION9,
1565               l_rulv_rec.RULE_INFORMATION10,
1566               l_rulv_rec.RULE_INFORMATION11,
1567               l_rulv_rec.RULE_INFORMATION12,
1568               l_rulv_rec.RULE_INFORMATION13,
1569               l_rulv_rec.RULE_INFORMATION14,
1570               l_rulv_rec.RULE_INFORMATION15,
1571               l_rulv_rec.TEMPLATE_YN,
1572               l_rulv_rec.ans_set_jtot_object_code,
1573               l_rulv_rec.ans_set_jtot_object_id1,
1574               l_rulv_rec.ans_set_jtot_object_id2,
1575               l_rulv_rec.DISPLAY_SEQUENCE ;
1576     EXIT WHEN okc_rulv_csr%NOTFOUND;
1577       i := okc_rulv_csr%RowCount;
1578       x_rulv_tbl(i) := l_rulv_rec;
1579     END LOOP;
1580     CLOSE okc_rulv_csr;
1581     x_rule_count := i;
1582 
1583     RETURN;
1584 
1585    END get_sll_rules;
1586 
1587 ------------------------------------------------------------------------------
1588 -- PROCEDURE sync_header_slh_sll
1589 --
1590 --  This procedure synchronizes Header SLH and SLL Rules
1591 --
1592 -- Calls:
1593 -- Called By:
1594 ------------------------------------------------------------------------------
1595 
1596   PROCEDURE sync_header_slh_sll(
1597                          x_return_status OUT NOCOPY VARCHAR2,
1598                          x_msg_count     OUT NOCOPY NUMBER,
1599                          x_msg_data      OUT NOCOPY VARCHAR2,
1600                          p_for_line      IN  VARCHAR2, -- DEFAULT 'N',
1601                          p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE,
1602                          p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE
1603                         ) IS
1604 
1605   l_proc_name          VARCHAR2(35)    := 'SYNC_HEADER_SLH_SLL';
1606   sync_header_failed   EXCEPTION;
1607 
1608   CURSOR rgp_csr(p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1609   SELECT
1610     id
1611     ,object_version_number
1612     ,sfwt_flag
1613     ,rgd_code
1614     ,sat_code
1615     ,rgp_type
1616     ,cle_id
1617     ,chr_id
1618     ,dnz_chr_id
1619     ,parent_rgp_id
1620     ,comments
1621     ,attribute_category
1622     ,attribute1
1623     ,attribute2
1624     ,attribute3
1625     ,attribute4
1626     ,attribute5
1627     ,attribute6
1628     ,attribute7
1629     ,attribute8
1630     ,attribute9
1631     ,attribute10
1632     ,attribute11
1633     ,attribute12
1634     ,attribute13
1635     ,attribute14
1636     ,attribute15
1637     ,created_by
1638     ,creation_date
1639     ,last_updated_by
1640     ,last_update_date
1641     ,last_update_login
1642   FROM   okc_rule_groups_v
1643   WHERE  dnz_chr_id = p_chr_id
1644   AND    cle_id     IS NULL
1645   AND    rgd_code   = 'LALEVL';
1646 
1647   CURSOR orig_rgp_csr(p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1648 
1649   SELECT id
1650   FROM   okc_rule_groups_v
1651   WHERE  dnz_chr_id = p_chr_id
1652   AND    cle_id IS NULL
1653   AND    rgd_code = 'LALEVL';
1654 
1655   --x_new_rgpv_rec      rgpv_rec_type;
1656   x_new_slh_rulv_rec  rulv_rec_type;
1657 
1658   x_slh_rulv_tbl      rulv_tbl_type;
1659   x_slh_rule_count    NUMBER;
1660 
1661   x_sll_rulv_tbl      rulv_tbl_type;
1662   x_sll_rule_count    NUMBER;
1663 
1664   x_rulv_rec          rulv_rec_type;
1665 
1666   l_rebook_rgpv_rec   rgpv_rec_type;
1667   l_slh_rulv_rec      rulv_rec_type;
1668   l_sll_rulv_rec      rulv_rec_type;
1669 
1670   l_rebook_rgp_id NUMBER;
1671   l_orig_rgp_id   NUMBER;
1672 
1673   l_rebook_cle_id NUMBER;
1674   l_orig_cle_id   NUMBER;
1675 
1676   l_rulv_tbl      rulv_tbl_type;
1677   i               NUMBER := 0;
1678 
1679   l_rgpv_rec      rgpv_rec_type;
1680   x_rgpv_rec      rgpv_rec_type;
1681 
1682   BEGIN
1683     IF (G_DEBUG_ENABLED = 'Y') THEN
1684       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1685     END IF;
1686     x_return_status := OKC_API.G_RET_STS_SUCCESS;
1687     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1688           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1689     END IF;
1690 
1691     FOR rebook_rgp_rec IN rgp_csr(p_rebook_chr_id)  -- Getting Rebook RGP_ID
1692     LOOP
1693 
1694       OPEN orig_rgp_csr(p_orig_chr_id);      -- Get Original Contract RGP_ID
1695       FETCH orig_rgp_csr INTO l_orig_rgp_id;
1696       IF orig_rgp_csr%NOTFOUND THEN -- Header payment added during rebook
1697          -- Create LALEVL rule group at header
1698          l_rgpv_rec            := NULL;
1699 
1700          l_rgpv_rec.rgd_code   := 'LALEVL';
1701          l_rgpv_rec.chr_id     := p_orig_chr_id;
1702          l_rgpv_rec.dnz_chr_id := p_orig_chr_id;
1703          l_rgpv_rec.cle_id     := NULL;
1704          l_rgpv_rec.rgp_type   := 'KRG';
1705 
1706          OKL_RULE_PUB.create_rule_group(
1707                                       p_api_version     => 1.0,
1708                                       p_init_msg_list   => OKL_API.G_FALSE,
1709                                       x_return_status   => x_return_status,
1710                                       x_msg_count       => x_msg_count,
1711                                       x_msg_data        => x_msg_data,
1712                                       p_rgpv_rec        => l_rgpv_rec,
1713                                       x_rgpv_rec        => x_rgpv_rec
1714                                      );
1715 
1716          IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
1717             RAISE sync_header_failed;
1718          END IF;
1719 
1720          l_orig_rgp_id := x_rgpv_rec.id;
1721 
1722       END IF;
1723 
1724       CLOSE orig_rgp_csr;
1725 
1726       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1727               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig RGP ID: ' || l_orig_rgp_id);
1728       END IF;
1729 
1730       l_rebook_rgpv_rec := rebook_rgp_rec;
1731       --
1732       -- Get SLH Rule from Rebook Contract
1733       --
1734       Okl_Rule_Apis_Pvt.Get_Contract_Rules(
1735                                            p_api_version    => 1.0,
1736                                            p_init_msg_list  => Okl_Api.G_FALSE,
1737                                            p_rgpv_rec       => l_rebook_rgpv_rec,
1738                                            p_rdf_code       => 'LASLH',
1739                                            x_return_status  => x_return_status,
1740                                            x_msg_count      => x_msg_count,
1741                                            x_msg_data       => x_msg_data,
1742                                            x_rulv_tbl       => x_slh_rulv_tbl,
1743                                            x_rule_count     => x_slh_rule_count
1744                                           );
1745       IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
1746          RAISE sync_header_failed;
1747       END IF;
1748 
1749       --x_slh_rulv_tbl_out := x_slh_rulv_tbl;
1750       --x_slh_count        := x_slh_rule_count;
1751 
1752       FOR i IN 1..x_slh_rule_count
1753       LOOP
1754          l_slh_rulv_rec            := x_slh_rulv_tbl(i);
1755          l_slh_rulv_rec.rgp_id     := l_orig_rgp_id;
1756          l_slh_rulv_rec.dnz_chr_id := p_orig_chr_id;
1757 
1758          Okl_Rule_Pub.create_rule(
1759                                   p_api_version     => 1.0,
1760                                   p_init_msg_list   => Okc_Api.G_FALSE,
1761                                   x_return_status   => x_return_status,
1762                                   x_msg_count       => x_msg_count,
1763                                   x_msg_data        => x_msg_data,
1764                                   p_rulv_rec        => l_slh_rulv_rec,
1765                                   x_rulv_rec        => x_new_slh_rulv_rec
1766                                  );
1767          IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
1768              x_return_status := Okc_Api.G_RET_STS_ERROR;
1769              RAISE sync_header_failed;
1770          END IF;
1771 
1772          --
1773          -- Get SLL Rules from Header for a SLH
1774          --
1775          get_sll_rules(
1776                        x_return_status  => x_return_status,
1777                        x_msg_count      => x_msg_count,
1778                        x_msg_data       => x_msg_data,
1779                        p_rgpv_rec       => l_rebook_rgpv_rec,
1780                        p_rdf_code       => 'LASLL',
1781                        p_slh_id         => x_slh_rulv_tbl(i).id,
1782                        x_rulv_tbl       => x_sll_rulv_tbl,
1783                        x_rule_count     => x_sll_rule_count
1784                       );
1785          IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
1786             RAISE sync_header_failed;
1787          END IF;
1788 
1789          --x_sll_rulv_tbl_out := x_sll_rulv_tbl;
1790          --x_sll_count        := x_sll_rule_count;
1791 
1792          -- Create a SLL rule under SLH created above
1793          FOR i IN 1..x_sll_rule_count
1794          LOOP
1795 
1796             l_sll_rulv_rec             := x_sll_rulv_tbl(i);
1797             l_sll_rulv_rec.rgp_id      := l_orig_rgp_id;
1798             l_sll_rulv_rec.object2_id1 := x_new_slh_rulv_rec.id;
1799             l_sll_rulv_rec.dnz_chr_id  := p_orig_chr_id;
1800 
1801             Okl_Rule_Pub.create_rule(
1802                                      p_api_version     => 1.0,
1803                                      p_init_msg_list   => Okc_Api.G_FALSE,
1804                                      x_return_status   => x_return_status,
1805                                      x_msg_count       => x_msg_count,
1806                                      x_msg_data        => x_msg_data,
1807                                      p_rulv_rec        => l_sll_rulv_rec,
1808                                      x_rulv_rec        => x_rulv_rec
1809                                     );
1810                IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
1811                    x_return_status := Okc_Api.G_RET_STS_ERROR;
1812                    RAISE sync_header_failed;
1813                END IF;
1814          END LOOP; -- SLL
1815 
1816       END LOOP; -- SLH
1817 
1818     END LOOP;
1819 
1820   EXCEPTION
1821     WHEN sync_header_failed THEN
1822        x_return_status := OKC_API.G_RET_STS_ERROR;
1823 
1824   END sync_header_slh_sll;
1825 
1826 ------------------------------------------------------------------------------
1827 -- PROCEDURE sync_slh_sll
1828 --
1829 --  This procedure synchronizes SLH and SLL Rules
1830 --
1831 -- Calls:
1832 -- Called By:
1833 ------------------------------------------------------------------------------
1834 
1835   PROCEDURE sync_slh_sll(
1836                          x_return_status OUT NOCOPY VARCHAR2,
1837                          x_msg_count     OUT NOCOPY NUMBER,
1838                          x_msg_data      OUT NOCOPY VARCHAR2,
1839                          p_for_line      IN  VARCHAR2, -- DEFAULT 'N',
1840                          p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE,
1841                          p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE
1842                         ) IS
1843 
1844   l_proc_name   VARCHAR2(35)    := 'SYNC_SLH_SLL';
1845   sync_failed   EXCEPTION;
1846 
1847   x_new_rgpv_rec      rgpv_rec_type;
1848   x_new_slh_rulv_rec  rulv_rec_type;
1849 
1850   x_slh_rulv_tbl      rulv_tbl_type;
1851   x_slh_rule_count    NUMBER;
1852 
1853   x_sll_rulv_tbl      rulv_tbl_type;
1854   x_sll_rule_count    NUMBER;
1855 
1856   x_rulv_rec          rulv_rec_type;
1857 
1858   l_rebook_rgpv_rec   rgpv_rec_type;
1859   l_slh_rulv_rec      rulv_rec_type;
1860   l_sll_rulv_rec      rulv_rec_type;
1861 
1862   l_rebook_rgp_id NUMBER;
1863   l_orig_rgp_id   NUMBER;
1864 
1865   l_rebook_cle_id NUMBER;
1866   l_orig_cle_id   NUMBER;
1867 
1868   l_rulv_tbl      rulv_tbl_type;
1869   i               NUMBER := 0;
1870 
1871   CURSOR rgp_csr(p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1872   SELECT
1873     id
1874     ,object_version_number
1875     ,sfwt_flag
1876     ,rgd_code
1877     ,sat_code
1878     ,rgp_type
1879     ,cle_id
1880     ,chr_id
1881     ,dnz_chr_id
1882     ,parent_rgp_id
1883     ,comments
1884     ,attribute_category
1885     ,attribute1
1886     ,attribute2
1887     ,attribute3
1888     ,attribute4
1889     ,attribute5
1890     ,attribute6
1891     ,attribute7
1892     ,attribute8
1893     ,attribute9
1894     ,attribute10
1895     ,attribute11
1896     ,attribute12
1897     ,attribute13
1898     ,attribute14
1899     ,attribute15
1900     ,created_by
1901     ,creation_date
1902     ,last_updated_by
1903     ,last_update_date
1904     ,last_update_login
1905   FROM   okc_rule_groups_v
1906   WHERE  dnz_chr_id = p_chr_id
1907   AND    rgd_code   = 'LALEVL';
1908 
1909   CURSOR orig_cle_csr(p_cle_id OKC_K_LINES_V.ID%TYPE) IS
1910   SELECT orig_system_id1
1911   FROM   okc_k_lines_v
1912   WHERE  id = p_cle_id;
1913 
1914   CURSOR orig_rgp_csr(p_cle_id OKC_K_LINES_V.ID%TYPE,
1915                       p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1916   SELECT id
1917   FROM   okc_rule_groups_v
1918   WHERE  dnz_chr_id = p_chr_id
1919   AND    ((cle_id = p_cle_id AND p_cle_id IS NOT NULL)
1920           OR
1921           cle_id IS NULL AND p_cle_id IS NULL)
1922   AND    rgd_code = 'LALEVL';
1923 
1924   CURSOR del_rgp_csr(p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1925   SELECT id
1926   FROM   okc_rule_groups_v
1927   WHERE  dnz_chr_id = p_chr_id
1928   AND    rgd_code   = 'LALEVL';
1929 
1930   CURSOR rule_csr(p_rgp_id NUMBER) IS
1931   SELECT id
1932   FROM   okc_rules_v
1933   WHERE  rgp_id = p_rgp_id;
1934 
1935   --Bug# 4899328
1936   l_lalevl_rgpv_rec OKL_OKC_MIGRATION_PVT.rgpv_rec_type;
1937   x_lalevl_rgpv_rec OKL_OKC_MIGRATION_PVT.rgpv_rec_type;
1938 
1939   BEGIN
1940     IF (G_DEBUG_ENABLED = 'Y') THEN
1941       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1942     END IF;
1943     x_return_status := OKC_API.G_RET_STS_SUCCESS;
1944     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1945           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1946     END IF;
1947 
1948 /*
1949       -- Delete SLH, SLL from Original Contract
1950       i := 1;
1951 
1952       FOR del_rgp_rec IN del_rgp_csr(p_orig_chr_id)
1953       LOOP
1954          FOR rule_rec IN rule_csr(del_rgp_rec.id)
1955          LOOP
1956             l_rulv_tbl(i).id := rule_rec.id;
1957             i := i+ 1;
1958          END LOOP;
1959       END LOOP;
1960 
1961       okl_rule_pub.delete_rule(
1962                                p_api_version    => 1.0,
1963                                p_init_msg_list  => OKC_API.G_FALSE,
1964                                x_return_status  => x_return_status,
1965                                x_msg_count      => x_msg_count,
1966                                x_msg_data       => x_msg_data,
1967                                p_rulv_tbl       => l_rulv_tbl
1968                               );
1969       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1970         RAISE sync_failed;
1971       END IF;
1972 */
1973 
1974     FOR rebook_rgp_rec IN rgp_csr(p_rebook_chr_id)  -- Getting Rebook RGP_ID
1975     LOOP
1976       l_orig_cle_id := NULL;
1977       IF rebook_rgp_rec.cle_id IS NOT NULL THEN     -- For line level rule group get Original Contract Line No.
1978         OPEN orig_cle_csr(rebook_rgp_rec.cle_id);
1979         FETCH orig_cle_csr INTO l_orig_cle_id;
1980         CLOSE orig_cle_csr;
1981 
1982       ELSE -- Header level payment
1983         sync_header_slh_sll(
1984                             x_return_status => x_return_status,
1985                             x_msg_count     => x_msg_count,
1986                             x_msg_data      => x_msg_data,
1987                             p_for_line      => 'N',
1988                             p_rebook_chr_id => p_rebook_chr_id,
1989                             p_orig_chr_id   => p_orig_chr_id
1990                            );
1991         IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1992            RAISE sync_failed;
1993         END IF;
1994         GOTO process_next;
1995 
1996       END IF;
1997 
1998       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1999               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Rebook CLE ID: '||rebook_rgp_rec.id);
2000         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig CLE ID: '|| l_orig_cle_id);
2001       END IF;
2002 
2003       IF (l_orig_cle_id IS NULL) THEN
2004          GOTO process_next;
2005       END IF;
2006 
2007       --Bug# 4899328
2008       l_orig_rgp_id := NULL;
2009       OPEN orig_rgp_csr(l_orig_cle_id,
2010                         p_orig_chr_id);      -- Get Original Contract RGP_ID
2011       FETCH orig_rgp_csr INTO l_orig_rgp_id;
2012       CLOSE orig_rgp_csr;
2013 
2014       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2015               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig RGP ID: ' || l_orig_rgp_id);
2016       END IF;
2017 
2018       l_rebook_rgpv_rec := rebook_rgp_rec;
2019       --
2020       -- Get SLH Rule from Rebook Contract
2021       --
2022       Okl_Rule_Apis_Pvt.Get_Contract_Rules(
2023                                            p_api_version    => 1.0,
2024                                            p_init_msg_list  => Okl_Api.G_FALSE,
2025                                            p_rgpv_rec       => l_rebook_rgpv_rec,
2026                                            p_rdf_code       => 'LASLH',
2027                                            x_return_status  => x_return_status,
2028                                            x_msg_count      => x_msg_count,
2029                                            x_msg_data       => x_msg_data,
2030                                            x_rulv_tbl       => x_slh_rulv_tbl,
2031                                            x_rule_count     => x_slh_rule_count
2032                                           );
2033       IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2034          RAISE sync_failed;
2035       END IF;
2036 
2037       --x_slh_rulv_tbl_out := x_slh_rulv_tbl;
2038       --x_slh_count        := x_slh_rule_count;
2039 
2040       --Bug# 4899328
2041       IF l_orig_rgp_id IS NULL THEN
2042 
2043         l_lalevl_rgpv_rec.id := null;
2044         l_lalevl_rgpv_rec.rgd_code := 'LALEVL';
2045         l_lalevl_rgpv_rec.dnz_chr_id := p_orig_chr_id;
2046         l_lalevl_rgpv_rec.cle_id := l_orig_cle_id;
2047         l_lalevl_rgpv_rec.rgp_type := 'KRG';
2048 
2049         OKL_RULE_PUB.create_rule_group(
2050           p_api_version    => 1.0,
2051           p_init_msg_list  => Okc_Api.G_False,
2052           x_return_status  => x_return_status,
2053           x_msg_count      => x_msg_count,
2054           x_msg_data       => x_msg_data,
2055           p_rgpv_rec       => l_lalevl_rgpv_rec,
2056           x_rgpv_rec       => x_lalevl_rgpv_rec);
2057 
2058         IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
2059            RAISE sync_failed;
2060         END IF;
2061 
2062         l_orig_rgp_id := x_lalevl_rgpv_rec.id;
2063 
2064       END IF;
2065       --Bug# 4899328
2066 
2067       FOR i IN 1..x_slh_rule_count
2068       LOOP
2069          l_slh_rulv_rec            := x_slh_rulv_tbl(i);
2070          l_slh_rulv_rec.rgp_id     := l_orig_rgp_id;
2071          l_slh_rulv_rec.dnz_chr_id := p_orig_chr_id;
2072 
2073          Okl_Rule_Pub.create_rule(
2074                                   p_api_version     => 1.0,
2075                                   p_init_msg_list   => Okc_Api.G_FALSE,
2076                                   x_return_status   => x_return_status,
2077                                   x_msg_count       => x_msg_count,
2078                                   x_msg_data        => x_msg_data,
2079                                   p_rulv_rec        => l_slh_rulv_rec,
2080                                   x_rulv_rec        => x_new_slh_rulv_rec
2081                                  );
2082          IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2083              x_return_status := Okc_Api.G_RET_STS_ERROR;
2084              RAISE sync_failed;
2085          END IF;
2086 
2087          --
2088          -- Get SLL Rules from Header for a SLH
2089          --
2090          get_sll_rules(
2091                        x_return_status  => x_return_status,
2092                        x_msg_count      => x_msg_count,
2093                        x_msg_data       => x_msg_data,
2094                        p_rgpv_rec       => l_rebook_rgpv_rec,
2095                        p_rdf_code       => 'LASLL',
2096                        p_slh_id         => x_slh_rulv_tbl(i).id,
2097                        x_rulv_tbl       => x_sll_rulv_tbl,
2098                        x_rule_count     => x_sll_rule_count
2099                       );
2100          IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2101             RAISE sync_failed;
2102          END IF;
2103 
2104          --x_sll_rulv_tbl_out := x_sll_rulv_tbl;
2105          --x_sll_count        := x_sll_rule_count;
2106 
2107          -- Create a SLL rule under SLH created above
2108          FOR i IN 1..x_sll_rule_count
2109          LOOP
2110 
2111             l_sll_rulv_rec             := x_sll_rulv_tbl(i);
2112             l_sll_rulv_rec.rgp_id      := l_orig_rgp_id;
2113             l_sll_rulv_rec.object2_id1 := x_new_slh_rulv_rec.id;
2114             l_sll_rulv_rec.dnz_chr_id  := p_orig_chr_id;
2115 
2116             Okl_Rule_Pub.create_rule(
2117                                      p_api_version     => 1.0,
2118                                      p_init_msg_list   => Okc_Api.G_FALSE,
2119                                      x_return_status   => x_return_status,
2120                                      x_msg_count       => x_msg_count,
2121                                      x_msg_data        => x_msg_data,
2122                                      p_rulv_rec        => l_sll_rulv_rec,
2123                                      x_rulv_rec        => x_rulv_rec
2124                                     );
2125                IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2126                    x_return_status := Okc_Api.G_RET_STS_ERROR;
2127                    RAISE sync_failed;
2128                END IF;
2129          END LOOP; -- SLL
2130 
2131       END LOOP; -- SLH
2132 
2133     <<process_next>>
2134     NULL;
2135     END LOOP;
2136 
2137   EXCEPTION
2138     WHEN sync_failed THEN
2139        x_return_status := OKC_API.G_RET_STS_ERROR;
2140   END sync_slh_sll;
2141 
2142 ------------------------------------------------------------------------------
2143 -- PROCEDURE sync_sales_tax
2144 --
2145 --  This procedure synchronizes sales tax rules for both contract header
2146 --  and line
2147 --
2148 -- Calls:
2149 -- Called By:
2150 ------------------------------------------------------------------------------
2151   PROCEDURE sync_sales_tax (
2152                             x_return_status OUT NOCOPY VARCHAR2,
2153                             x_msg_count     OUT NOCOPY NUMBER,
2154                             x_msg_data      OUT NOCOPY VARCHAR2,
2155                             p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE,
2156                             p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE
2157                            ) IS
2158 
2159   l_proc_name VARCHAR2(35) := 'SYNC_SALES_TAX';
2160   sync_tax_failed EXCEPTION;
2161 
2162   x_rbk_lastcl_rec rulv_rec_type;
2163   x_rbk_lastcl_count NUMBER;
2164 
2165   x_orig_lastcl_rec rulv_rec_type;
2166   x_orig_lastcl_count NUMBER;
2167 
2168   x_rbk_lastpr_rec rulv_rec_type;
2169   x_rbk_lastpr_count NUMBER;
2170 
2171   x_orig_lastpr_rec rulv_rec_type;
2172   x_orig_lastpr_count NUMBER;
2173 
2174   x_rulv_rec rulv_rec_type;
2175 
2176   l_rgpv_rec rgpv_rec_type;
2177   x_rgpv_rec rgpv_rec_type;
2178 
2179   BEGIN
2180     IF (G_DEBUG_ENABLED = 'Y') THEN
2181       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2182     END IF;
2183 
2184     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2185           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
2186     END IF;
2187 
2188     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2189 
2190     -- Get Sales Tax header rule
2191     -- LAHDTX: LASTCL, LASTPR
2192     --
2193     -- 1. Get rebook chnages for LASTCL
2194     get_rule_info(
2195                   x_return_status => x_return_status,
2196                   p_rebook_chr_id => p_rebook_chr_id,
2197                   p_rebook_cle_id => -1,
2198                   p_rgd_code      => 'LAHDTX',
2199                   p_rule_code     => 'LASTCL',
2200                   x_rulv_rec      => x_rbk_lastcl_rec,
2201                   x_rule_count    => x_rbk_lastcl_count
2202                  );
2203     IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2204         x_return_status := Okc_Api.G_RET_STS_ERROR;
2205         RAISE sync_tax_failed;
2206     END IF;
2207 
2208     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2209           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Rbk count: '||x_rbk_lastcl_count);
2210     END IF;
2211     -- 2. Get orig rule ID for LASTCL
2212     get_rule_info(
2213                   x_return_status => x_return_status,
2214                   p_rebook_chr_id => p_orig_chr_id,
2215                   p_rebook_cle_id => -1,
2216                   p_rgd_code      => 'LAHDTX',
2217                   p_rule_code     => 'LASTCL',
2218                   x_rulv_rec      => x_orig_lastcl_rec,
2219                   x_rule_count    => x_orig_lastcl_count
2220                  );
2221 
2222     IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2223         x_return_status := Okc_Api.G_RET_STS_ERROR;
2224         RAISE sync_tax_failed;
2225     END IF;
2226 
2227     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2228           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig count: '||x_orig_lastcl_count);
2229     END IF;
2230     -- 3. Update rule LASTCL
2231     IF (x_orig_lastcl_count > 0) THEN
2232        -- Update rule information
2233        IF (x_rbk_lastcl_count > 0) THEN
2234 
2235            x_rbk_lastcl_rec.id     := x_orig_lastcl_rec.id;
2236            x_rbk_lastcl_rec.rgp_id := x_orig_lastcl_rec.rgp_id;
2237 
2238            -- Check for changes during rebook
2239            IF (x_rbk_lastcl_rec.rule_information1 <> x_orig_lastcl_rec.rule_information1
2240                OR
2241                x_rbk_lastcl_rec.rule_information2 <> x_orig_lastcl_rec.rule_information2
2242                OR
2243                x_rbk_lastcl_rec.rule_information3 <> x_orig_lastcl_rec.rule_information3
2244                OR
2245                x_rbk_lastcl_rec.rule_information4 <> x_orig_lastcl_rec.rule_information4
2246                OR
2247                x_rbk_lastcl_rec.rule_information5 <> x_orig_lastcl_rec.rule_information5
2248                OR
2249                x_rbk_lastcl_rec.rule_information6 <> x_orig_lastcl_rec.rule_information6
2250                OR
2251                x_rbk_lastcl_rec.rule_information7 <> x_orig_lastcl_rec.rule_information7
2252               ) THEN
2253 
2254                IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2255                                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update LASTCL rule: '||x_rbk_lastcl_rec.id);
2256                END IF;
2257                okl_rule_pub.update_rule(
2258                                         p_api_version   => 1.0,
2259                                         p_init_msg_list => OKL_API.G_FALSE,
2260                                         x_return_status => x_return_status,
2261                                         x_msg_count     => x_msg_count,
2262                                         x_msg_data      => x_msg_data,
2263                                         p_rulv_rec      => x_rbk_lastcl_rec,
2264                                         x_rulv_rec      => x_rulv_rec
2265                                        );
2266 
2267                 IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2268                     x_return_status := Okc_Api.G_RET_STS_ERROR;
2269                     RAISE sync_tax_failed;
2270                 END IF;
2271            END IF; -- LASTCL changed
2272        END IF;
2273     ELSE
2274        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2275                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Create Rule Group and Rule: LASTCL');
2276        END IF;
2277        -- Create rule group and rule information
2278        l_rgpv_rec.rgd_code   := 'LAHDTX';
2279        l_rgpv_rec.chr_id     := p_orig_chr_id;
2280        l_rgpv_rec.dnz_chr_id := p_orig_chr_id;
2281        l_rgpv_rec.cle_id     := NULL;
2282        l_rgpv_rec.rgp_type   := 'KRG';
2283        okl_rule_pub.create_rule_group(
2284                                       p_api_version    => 1.0,
2285                                       p_init_msg_list  => OKL_API.G_FALSE,
2286                                       x_return_status  => x_return_status,
2287                                       x_msg_count      => x_msg_count,
2288                                       x_msg_data       => x_msg_data,
2289                                       p_rgpv_rec       => l_rgpv_rec,
2290                                       x_rgpv_rec       => x_rgpv_rec
2291                                      );
2292 
2293        IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2294            x_return_status := Okc_Api.G_RET_STS_ERROR;
2295            RAISE sync_tax_failed;
2296        END IF;
2297 
2298        x_rbk_lastcl_rec.id     := NULL;
2299        x_rbk_lastcl_rec.rgp_id := x_rgpv_rec.id;
2300        okl_rule_pub.create_rule(
2301                                 p_api_version   => 1.0,
2302                                 p_init_msg_list => OKL_API.G_FALSE,
2303                                 x_return_status => x_return_status,
2304                                 x_msg_count     => x_msg_count,
2305                                 x_msg_data      => x_msg_data,
2306                                 p_rulv_rec      => x_rbk_lastcl_rec,
2307                                 x_rulv_rec      => x_rulv_rec
2308                                );
2309 
2310        IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2311            x_return_status := Okc_Api.G_RET_STS_ERROR;
2312            RAISE sync_tax_failed;
2313        END IF;
2314 
2315     END IF; -- LASTCL
2316 
2317     -- 1. Get rebook chnages for LASTPR
2318     get_rule_info(
2319                   x_return_status => x_return_status,
2320                   p_rebook_chr_id => p_rebook_chr_id,
2321                   p_rebook_cle_id => -1,
2322                   p_rgd_code      => 'LAHDTX',
2323                   p_rule_code     => 'LASTPR',
2324                   x_rulv_rec      => x_rbk_lastpr_rec,
2325                   x_rule_count    => x_rbk_lastpr_count
2326                  );
2327     IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2328         x_return_status := Okc_Api.G_RET_STS_ERROR;
2329         RAISE sync_tax_failed;
2330     END IF;
2331 
2332     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2333           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Rbk count: '||x_rbk_lastcl_count);
2334     END IF;
2335     -- 2. Get orig rule ID for LASTPR
2336     get_rule_info(
2337                   x_return_status => x_return_status,
2338                   p_rebook_chr_id => p_orig_chr_id,
2339                   p_rebook_cle_id => -1,
2340                   p_rgd_code      => 'LAHDTX',
2341                   p_rule_code     => 'LASTPR',
2342                   x_rulv_rec      => x_orig_lastpr_rec,
2343                   x_rule_count    => x_orig_lastpr_count
2344                  );
2345 
2346     IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2347         x_return_status := Okc_Api.G_RET_STS_ERROR;
2348         RAISE sync_tax_failed;
2349     END IF;
2350 
2351     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2352           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig count: '||x_orig_lastpr_count);
2353     END IF;
2354     -- 3. Update rule LASTPR
2355     IF (x_orig_lastcl_count > 0) THEN
2356        -- Update rule information
2357        IF (x_rbk_lastcl_count > 0) THEN
2358 
2359            x_rbk_lastpr_rec.id     := x_orig_lastpr_rec.id;
2360            x_rbk_lastpr_rec.rgp_id := x_orig_lastpr_rec.rgp_id;
2361 
2362            -- Check for changes during rebook
2363            IF (x_rbk_lastpr_rec.rule_information1 <> x_orig_lastpr_rec.rule_information1
2364                OR
2365                x_rbk_lastpr_rec.rule_information2 <> x_orig_lastpr_rec.rule_information2
2366                OR
2367                x_rbk_lastpr_rec.rule_information3 <> x_orig_lastpr_rec.rule_information3
2368                OR
2369                x_rbk_lastpr_rec.rule_information4 <> x_orig_lastpr_rec.rule_information4
2370               ) THEN
2371 
2372                IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2373                                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update LASTPR rule: '||x_rbk_lastpr_rec.id);
2374                END IF;
2375                okl_rule_pub.update_rule(
2376                                         p_api_version   => 1.0,
2377                                         p_init_msg_list => OKL_API.G_FALSE,
2378                                         x_return_status => x_return_status,
2379                                         x_msg_count     => x_msg_count,
2380                                         x_msg_data      => x_msg_data,
2381                                         p_rulv_rec      => x_rbk_lastpr_rec,
2382                                         x_rulv_rec      => x_rulv_rec
2383                                        );
2384 
2385                 IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2386                     x_return_status := Okc_Api.G_RET_STS_ERROR;
2387                     RAISE sync_tax_failed;
2388                 END IF;
2389             END IF; -- LASTCL changed
2390        END IF;
2391     ELSE
2392        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2393                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Create Rule Group and Rule: LASTPR');
2394        END IF;
2395        -- Create rule group and rule information
2396 
2397        IF (x_rgpv_rec.id IS NULL
2398            OR
2399            x_rgpv_rec.id = OKL_API.G_MISS_NUM) THEN
2400           l_rgpv_rec.rgd_code   := 'LAHDTX';
2401           l_rgpv_rec.chr_id     := p_orig_chr_id;
2402           l_rgpv_rec.dnz_chr_id := p_orig_chr_id;
2403           l_rgpv_rec.cle_id     := NULL;
2404           l_rgpv_rec.rgp_type   := 'KRG';
2405           okl_rule_pub.create_rule_group(
2406                                          p_api_version    => 1.0,
2407                                          p_init_msg_list  => OKL_API.G_FALSE,
2408                                          x_return_status  => x_return_status,
2409                                          x_msg_count      => x_msg_count,
2410                                          x_msg_data       => x_msg_data,
2411                                          p_rgpv_rec       => l_rgpv_rec,
2412                                          x_rgpv_rec       => x_rgpv_rec
2413                                         );
2414 
2415           IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2416               x_return_status := Okc_Api.G_RET_STS_ERROR;
2417               RAISE sync_tax_failed;
2418           END IF;
2419        END IF;
2420        x_rbk_lastpr_rec.id     := NULL;
2421        x_rbk_lastpr_rec.rgp_id := x_rgpv_rec.id;
2422        okl_rule_pub.create_rule(
2423                                 p_api_version   => 1.0,
2424                                 p_init_msg_list => OKL_API.G_FALSE,
2425                                 x_return_status => x_return_status,
2426                                 x_msg_count     => x_msg_count,
2427                                 x_msg_data      => x_msg_data,
2428                                 p_rulv_rec      => x_rbk_lastpr_rec,
2429                                 x_rulv_rec      => x_rulv_rec
2430                                );
2431 
2432        IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2433            x_return_status := Okc_Api.G_RET_STS_ERROR;
2434            RAISE sync_tax_failed;
2435        END IF;
2436 
2437     END IF; -- LASTPR
2438   EXCEPTION
2439     WHEN sync_tax_failed THEN
2440        x_return_status := OKC_API.G_RET_STS_ERROR;
2441   END sync_sales_tax;
2442 
2443 ------------------------------------------------------------------------------
2444 -- PROCEDURE sync_party_role
2445 --
2446 --  This procedure synchronizes party roles created during rebook process
2447 --  Sunchronize Lease Vendor (OKX_VENDOR) only
2448 --
2449 -- Calls:
2450 -- Called By:
2451 ------------------------------------------------------------------------------
2452 
2453   PROCEDURE sync_party_role(
2454                             x_return_status OUT NOCOPY VARCHAR2,
2455                             x_msg_count     OUT NOCOPY NUMBER,
2456                             x_msg_data      OUT NOCOPY VARCHAR2,
2457                             p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE,
2458                             p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE
2459                            ) IS
2460 
2461   CURSOR rebook_party_csr (p_rebook_chr_id OKC_K_HEADERS_B.ID%TYPE,
2462                            p_orig_chr_id   OKC_K_HEADERS_B.ID%TYPE) IS
2463   SELECT rbk.id,
2464          rbk.object1_id1,
2465          rbk.object1_id2,
2466          rbk.jtot_object1_code,
2467          rbk.rle_code
2468   FROM   okc_k_party_roles_b rbk
2469   WHERE  rbk.chr_id            = p_rebook_chr_id
2470   AND    rbk.jtot_object1_code = 'OKX_VENDOR'  -- Bug# 3311403
2471   AND    NOT EXISTS (
2472                      SELECT 'Y'
2473                      FROM   okc_k_party_roles_b orig
2474                      WHERE  orig.object1_id1        = rbk.object1_id1
2475                      AND    orig.object1_id2        = rbk.object1_id2
2476                      AND    orig.jtot_object1_code  = rbk.jtot_object1_code
2477                      AND    orig.rle_code           = rbk.rle_code
2478                      AND    orig.chr_id             = p_orig_chr_id
2479                      AND    orig.jtot_object1_code  = 'OKX_VENDOR'  -- Bug# 3311403
2480                     );
2481 
2482   CURSOR party_rule_csr (p_chr_id NUMBER,
2483                          p_cpl_id NUMBER) IS
2484   SELECT rgp_id
2485   FROM   okc_rg_party_roles_v
2486   WHERE  cpl_id     = p_cpl_id
2487   AND    dnz_chr_id = p_chr_id;
2488 
2489   l_proc_name VARCHAR2(35) := 'SYNC_PARTY_ROLE';
2490   x_cpl_id   NUMBER;
2491   x_rgp_id   NUMBER;
2492 
2493   CURSOR rbk_evg_hdr_csr (p_chr_id NUMBER) IS
2494   SELECT *
2495   FROM   okl_party_payment_hdr
2496   WHERE  dnz_chr_id = p_chr_id
2497   AND    cle_id IS NULL;
2498 
2499   CURSOR orig_evg_hdr_csr (p_chr_id NUMBER) IS
2500   SELECT id
2501   FROM   okl_party_payment_hdr
2502   WHERE  dnz_chr_id = p_chr_id
2503   AND    cle_id IS NULL;
2504 
2505   CURSOR orig_party_csr (p_chr_id NUMBER) IS
2506   SELECT party.id party_id,
2507          party.object1_id1,
2508          pyd.ID pyd_id,
2509          pyd.CPL_ID,
2510          pyd.VENDOR_ID,
2511          pyd.PAY_SITE_ID,
2512          pyd.PAYMENT_TERM_ID,
2513          pyd.PAYMENT_METHOD_CODE,
2514          pyd.PAY_GROUP_CODE,
2515          pyd.PAYMENT_HDR_ID,
2516          pyd.PAYMENT_START_DATE,
2517          pyd.PAYMENT_FREQUENCY,
2518          pyd.REMIT_DAYS,
2519          pyd.DISBURSEMENT_BASIS,
2520          pyd.DISBURSEMENT_FIXED_AMOUNT,
2521          pyd.DISBURSEMENT_PERCENT,
2522          pyd.PROCESSING_FEE_BASIS,
2523          pyd.PROCESSING_FEE_FIXED_AMOUNT,
2524          pyd.PROCESSING_FEE_PERCENT,
2525          pyd.PAYMENT_BASIS
2526   FROM   okc_k_party_roles_b party,
2527          okl_party_payment_dtls pyd
2528   WHERE  party.dnz_chr_id = p_chr_id
2529   AND    party.rle_code   = 'OKL_VENDOR'
2530   AND    party.cle_id     IS NULL
2531   AND    party.id         = pyd.cpl_id (+);
2532 
2533   CURSOR rbk_evg_dtl_csr (p_pmnt_hdr_id NUMBER,
2534                           p_vendor_id   NUMBER) IS
2535   select *
2536   from   okl_party_payment_dtls
2537   where  payment_hdr_id = p_pmnt_hdr_id
2538   and    vendor_id      = p_vendor_id;
2539 
2540   rbk_evg_dtl_rec rbk_evg_dtl_csr%ROWTYPE;
2541 
2542   l_orig_evg_hdr_id NUMBER;
2543   l_rbk_evg_hdr_id  NUMBER;
2544 
2545   l_pphv_rec        okl_party_payments_pvt.pphv_rec_type;
2546   x_pphv_rec        okl_party_payments_pvt.pphv_rec_type;
2547 
2548   l_ppydv_c_rec       okl_party_payments_pvt.ppydv_rec_type;
2549   l_ppydv_u_rec       okl_party_payments_pvt.ppydv_rec_type;
2550   x_ppydv_rec       okl_party_payments_pvt.ppydv_rec_type;
2551 
2552   sync_party_failed EXCEPTION;
2553 
2554   BEGIN
2555     IF (G_DEBUG_ENABLED = 'Y') THEN
2556       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2557     END IF;
2558     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2559     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2560           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
2561     END IF;
2562 
2563     -- Sync evergreen passthru at contract header and party
2564     FOR rbk_evg_hdr_rec IN rbk_evg_hdr_csr (p_rebook_chr_id)
2565     LOOP
2566        l_rbk_evg_hdr_id := rbk_evg_hdr_rec.id; -- saved for use during detail update/create
2567        OPEN orig_evg_hdr_csr (p_orig_chr_id);
2568        FETCH orig_evg_hdr_csr INTO l_orig_evg_hdr_id;
2569        IF orig_evg_hdr_csr%NOTFOUND THEN
2570           -- create header rec
2571           l_pphv_rec.dnz_chr_id              := p_orig_chr_id;
2572           l_pphv_rec.payout_basis            := rbk_evg_hdr_rec.payout_basis;
2573           l_pphv_rec.payout_basis_formula    := rbk_evg_hdr_rec.payout_basis_formula;
2574           l_pphv_rec.passthru_stream_type_id := rbk_evg_hdr_rec.passthru_stream_type_id;
2575           --added by rkuttiya for bug #6873960
2576           l_pphv_rec.effective_from          := rbk_evg_hdr_rec.effective_from;
2577           l_pphv_rec.passthru_term           := rbk_evg_hdr_rec.passthru_term;
2578           --
2579 
2580           okl_party_payments_pvt.create_party_payment_hdr(
2581                 p_api_version       => 1.0,
2582                 p_init_msg_list     => OKL_API.G_FALSE,
2583                 x_return_status     => x_return_status,
2584                 x_msg_count         => x_msg_count,
2585                 x_msg_data          => x_msg_data,
2586                 p_pphv_rec          => l_pphv_rec,
2587                 x_pphv_rec          => x_pphv_rec
2588                );
2589           IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2590               RAISE sync_party_failed;
2591           END IF;
2592        ELSE
2593           -- Update header rec
2594           l_pphv_rec.id                      := l_orig_evg_hdr_id;
2595           l_pphv_rec.dnz_chr_id              := p_orig_chr_id;
2596           l_pphv_rec.payout_basis            := rbk_evg_hdr_rec.payout_basis;
2597           l_pphv_rec.payout_basis_formula    := rbk_evg_hdr_rec.payout_basis_formula;
2598           l_pphv_rec.passthru_stream_type_id := rbk_evg_hdr_rec.passthru_stream_type_id;
2599           okl_party_payments_pvt.update_party_payment_hdr(
2600                 p_api_version       => 1.0,
2601                 p_init_msg_list     => OKL_API.G_FALSE,
2602                 x_return_status     => x_return_status,
2603                 x_msg_count         => x_msg_count,
2604                 x_msg_data          => x_msg_data,
2605                 p_pphv_rec          => l_pphv_rec,
2606                 x_pphv_rec          => x_pphv_rec
2607                );
2608           IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2609               RAISE sync_party_failed;
2610           END IF;
2611        END IF;
2612        CLOSE orig_evg_hdr_csr;
2613     END LOOP;
2614 
2615     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2616           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_pphv_rec.id: '||x_pphv_rec.id);
2617     END IF;
2618     IF (l_rbk_evg_hdr_id IS NOT NULL) THEN -- header evergreen exists
2619        -- Update vendor evergreen detail if any
2620        FOR orig_party_rec IN orig_party_csr (p_orig_chr_id)
2621        LOOP
2622           IF (orig_party_rec.payment_hdr_id IS NOT NULL) THEN
2623 
2624              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2625                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update party payment detail for Vendor: '||orig_party_rec.object1_id1);
2626                OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'orig_party_rec.payment_hdr_id: '||orig_party_rec.payment_hdr_id);
2627              END IF;
2628              -- update evg detail
2629              --Bug# 4880939: Changed Open/Fetch to For Loop
2630              /*
2631              OPEN rbk_evg_dtl_csr (l_rbk_evg_hdr_id,
2632                                    orig_party_rec.object1_id1
2633                                   );
2634              FETCH rbk_evg_dtl_csr INTO rbk_evg_dtl_rec;
2635              CLOSE rbk_evg_dtl_csr;
2636              */
2637 
2638             FOR rbk_evg_dtl_rec IN rbk_evg_dtl_csr (l_rbk_evg_hdr_id,
2639                                                     orig_party_rec.object1_id1)
2640             LOOP
2641 
2642              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2643                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'orig_party_rec.pyd_id: '||orig_party_rec.pyd_id);
2644                OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rbk_evg_dtl_rec.pay_site_id: '||rbk_evg_dtl_rec.pay_site_id);
2645              END IF;
2646 
2647 
2648              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2649                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rbk_evg_dtl_rec.remit_days: '||rbk_evg_dtl_rec.remit_days);
2650                OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rbk_evg_dtl_rec.payment_method_code: '||rbk_evg_dtl_rec.payment_method_code);
2651              END IF;
2652              l_ppydv_u_rec.id                          := orig_party_rec.pyd_id;
2653              l_ppydv_u_rec.pay_site_id                 := rbk_evg_dtl_rec.pay_site_id;
2654              l_ppydv_u_rec.payment_term_id             := rbk_evg_dtl_rec.payment_term_id;
2655              l_ppydv_u_rec.payment_method_code         := rbk_evg_dtl_rec.payment_method_code;
2656              l_ppydv_u_rec.pay_group_code              := rbk_evg_dtl_rec.pay_group_code;
2657              l_ppydv_u_rec.payment_start_date          := rbk_evg_dtl_rec.payment_start_date;
2658              l_ppydv_u_rec.payment_frequency           := rbk_evg_dtl_rec.payment_frequency;
2659              l_ppydv_u_rec.remit_days                  := rbk_evg_dtl_rec.remit_days;
2660              l_ppydv_u_rec.disbursement_basis          := rbk_evg_dtl_rec.disbursement_basis;
2661              l_ppydv_u_rec.disbursement_fixed_amount   := rbk_evg_dtl_rec.disbursement_fixed_amount;
2662              l_ppydv_u_rec.disbursement_percent        := rbk_evg_dtl_rec.disbursement_percent;
2663              l_ppydv_u_rec.processing_fee_basis        := rbk_evg_dtl_rec.processing_fee_basis;
2664              l_ppydv_u_rec.processing_fee_fixed_amount := rbk_evg_dtl_rec.processing_fee_fixed_amount;
2665              l_ppydv_u_rec.processing_fee_percent      := rbk_evg_dtl_rec.processing_fee_percent;
2666              l_ppydv_u_rec.payment_basis               := rbk_evg_dtl_rec.payment_basis;
2667 
2668              okl_party_payments_pvt.update_party_payment_dtls(
2669                    p_api_version      => 1.0,
2670                    p_init_msg_list    => OKL_API.G_FALSE,
2671                    x_return_status    => x_return_status,
2672                    x_msg_count        => x_msg_count,
2673                    x_msg_data         => x_msg_data,
2674                    p_ppydv_rec        => l_ppydv_u_rec,
2675                    x_ppydv_rec        => x_ppydv_rec
2676                   );
2677 
2678              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2679                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update Status: '||x_return_status);
2680                OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_ppydv_rec.id: '||x_ppydv_rec.id);
2681              END IF;
2682              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2683                  RAISE sync_party_failed;
2684              END IF;
2685             END LOOP;
2686             --Bug# 4880939
2687           ELSE
2688              -- create evg detail
2689 
2690              l_ppydv_c_rec := NULL;
2691              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2692                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Create party payment detail for Vendor: '||orig_party_rec.object1_id1);
2693                OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'orig_party_rec.payment_hdr_id: '||orig_party_rec.payment_hdr_id);
2694              END IF;
2695              -- update evg detail
2696              --Bug# 4880939: Changed Open/Fetch to For Loop
2697              /*
2698              OPEN rbk_evg_dtl_csr (l_rbk_evg_hdr_id,
2699                                    orig_party_rec.object1_id1
2700                                   );
2701              FETCH rbk_evg_dtl_csr INTO rbk_evg_dtl_rec;
2702              CLOSE rbk_evg_dtl_csr;
2703              */
2704 
2705             FOR rbk_evg_dtl_rec IN rbk_evg_dtl_csr (l_rbk_evg_hdr_id,
2706                                                     orig_party_rec.object1_id1)
2707             LOOP
2708 
2709              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2710                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'orig_party_rec.pyd_id: '||orig_party_rec.pyd_id);
2711                OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rbk_evg_dtl_rec.pay_site_id: '||rbk_evg_dtl_rec.pay_site_id);
2712              END IF;
2713 
2714 
2715              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2716                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rbk_evg_dtl_rec.remit_days: '||rbk_evg_dtl_rec.remit_days);
2717                OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rbk_evg_dtl_rec.payment_method_code: '||rbk_evg_dtl_rec.payment_method_code);
2718              END IF;
2719 
2720              --l_ppydv_c_rec.object_version_number       := 1;
2721              --rkuttiya added for bug 6873960
2722              l_ppydv_c_rec.payment_hdr_id              := x_pphv_rec.id ;
2723              l_ppydv_c_rec.cpl_id                      := orig_party_rec.party_id;
2724              l_ppydv_c_rec.vendor_id                   := orig_party_rec.object1_id1;
2725              l_ppydv_c_rec.pay_site_id                 := rbk_evg_dtl_rec.pay_site_id;
2726              l_ppydv_c_rec.payment_term_id             := rbk_evg_dtl_rec.payment_term_id;
2727              l_ppydv_c_rec.payment_method_code         := rbk_evg_dtl_rec.payment_method_code;
2728              l_ppydv_c_rec.pay_group_code              := rbk_evg_dtl_rec.pay_group_code;
2729              l_ppydv_c_rec.payment_start_date          := rbk_evg_dtl_rec.payment_start_date;
2730              l_ppydv_c_rec.payment_frequency           := rbk_evg_dtl_rec.payment_frequency;
2731              l_ppydv_c_rec.remit_days                  := rbk_evg_dtl_rec.remit_days;
2732              l_ppydv_c_rec.disbursement_basis          := rbk_evg_dtl_rec.disbursement_basis;
2733              l_ppydv_c_rec.disbursement_fixed_amount   := rbk_evg_dtl_rec.disbursement_fixed_amount;
2734              l_ppydv_c_rec.disbursement_percent        := rbk_evg_dtl_rec.disbursement_percent;
2735              l_ppydv_c_rec.processing_fee_basis        := rbk_evg_dtl_rec.processing_fee_basis;
2736              l_ppydv_c_rec.processing_fee_fixed_amount := rbk_evg_dtl_rec.processing_fee_fixed_amount;
2737              l_ppydv_c_rec.processing_fee_percent      := rbk_evg_dtl_rec.processing_fee_percent;
2738              l_ppydv_c_rec.payment_basis               := rbk_evg_dtl_rec.payment_basis;
2739 
2740              okl_party_payments_pvt.create_party_payment_dtls(
2741                    p_api_version      => 1.0,
2742                    p_init_msg_list    => OKL_API.G_FALSE,
2743                    x_return_status    => x_return_status,
2744                    x_msg_count        => x_msg_count,
2745                    x_msg_data         => x_msg_data,
2746                    p_ppydv_rec        => l_ppydv_c_rec,
2747                    x_ppydv_rec        => x_ppydv_rec
2748                   );
2749 
2750              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2751                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Create Status: '||x_return_status);
2752                OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_ppydv_rec.id: '||x_ppydv_rec.id);
2753              END IF;
2754              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2755                  RAISE sync_party_failed;
2756              END IF;
2757            END LOOP;
2758            --Bug# 4880939
2759           END IF;
2760        END LOOP;
2761     END IF;
2762 
2763     FOR rebook_party_rec IN rebook_party_csr (p_rebook_chr_id,
2764                                               p_orig_chr_id)
2765     LOOP
2766 
2767        okl_copy_contract_pub.copy_party_roles(
2768                                               p_api_version     => 1.0,
2769                                               p_init_msg_list   => OKL_API.G_FALSE,
2770                                               x_return_status   => x_return_status,
2771                                               x_msg_count       => x_msg_count,
2772                                               x_msg_data        => x_msg_data,
2773                                               p_cpl_id          => rebook_party_rec.id,
2774                                               p_cle_id          => NULL,
2775                                               p_chr_id          => p_orig_chr_id,
2776                                               p_rle_code        => rebook_party_rec.rle_code,
2777                                               x_cpl_id	        => x_cpl_id
2778                                              );
2779 
2780        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2781            RAISE sync_party_failed;
2782        END IF;
2783 
2784        FOR party_rule_rec IN party_rule_csr (p_rebook_chr_id,
2785                                              rebook_party_rec.id)
2786        LOOP
2787           --
2788           -- Now copy Rules attached to the party copied above
2789           --
2790           okl_copy_contract_pub.copy_rules (
2791 	                                    p_api_version       => 1.0,
2792                                             p_init_msg_list	=> OKL_API.G_FALSE,
2793                                             x_return_status 	=> x_return_status,
2794                                             x_msg_count     	=> x_msg_count,
2795                                             x_msg_data      	=> x_msg_data,
2796                                             p_rgp_id	      	=> party_rule_rec.rgp_id,
2797                                             p_cle_id		=> NULL,
2798                                             p_chr_id	        => p_orig_chr_id,
2799 	                                    p_to_template_yn    => 'N',
2800                                             x_rgp_id		=> x_rgp_id
2801                                            );
2802 
2803           IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2804               RAISE sync_party_failed;
2805           END IF;
2806        END LOOP; -- rule
2807 
2808     END LOOP; -- role
2809 
2810   EXCEPTION
2811     WHEN sync_party_failed THEN
2812        x_return_status := OKC_API.G_RET_STS_ERROR;
2813   END sync_party_role;
2814 
2815 ------------------------------------------------------------------------------
2816 -- PROCEDURE sync_header_values
2817 --
2818 --  This procedure synchronizes Rebook and Original Contract Header Values
2819 --  . Change Due Date
2820 --  . Change Start Date
2821 --  . Extend Term
2822 --
2823 -- Calls:
2824 -- Called By:
2825 ------------------------------------------------------------------------------
2826 
2827   PROCEDURE sync_header_values(
2828                                x_return_status OUT NOCOPY VARCHAR2,
2829                                x_msg_count     OUT NOCOPY NUMBER,
2830                                x_msg_data      OUT NOCOPY VARCHAR2,
2831                                p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE,
2832                                p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE
2833                               ) IS
2834 
2835   CURSOR header_csr(p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
2836   SELECT start_date,
2837          end_date,
2838          term_duration,
2839          pre_tax_yield,
2840          after_tax_yield,
2841          target_pre_tax_yield,
2842          target_after_tax_yield,
2843          pre_tax_irr,
2844          after_tax_irr,
2845          implicit_interest_rate,
2846          --Bug# 4558486
2847          khr_attribute_category,
2848          khr_attribute1,
2849          khr_attribute2,
2850          khr_attribute3,
2851          khr_attribute4,
2852          khr_attribute5,
2853          khr_attribute6,
2854          khr_attribute7,
2855          khr_attribute8,
2856          khr_attribute9,
2857          khr_attribute10,
2858          khr_attribute11,
2859          khr_attribute12,
2860          khr_attribute13,
2861          khr_attribute14,
2862          khr_attribute15
2863          --Bug# 4558486
2864          -- sjalasut, added for rebook change control enhancement. START
2865          ,date_tradein
2866          ,tradein_amount
2867          ,tradein_description
2868          -- sjalasut, added for rebook change control enhancement. END
2869   FROM   okl_k_headers_full_v
2870   WHERE  id = p_chr_id;
2871 
2872   l_proc_name   VARCHAR2(35)    := 'SYNC_HEADER_VALUES';
2873   l_khrv_rec    khrv_rec_type;
2874   l_chrv_rec    chrv_rec_type;
2875   x_khrv_rec    khrv_rec_type;
2876   x_chrv_rec    chrv_rec_type;
2877 
2878   sync_failed   EXCEPTION;
2879 
2880   BEGIN
2881     IF (G_DEBUG_ENABLED = 'Y') THEN
2882       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2883     END IF;
2884      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2885             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
2886      END IF;
2887      x_return_status := OKC_API.G_RET_STS_SUCCESS;
2888 
2889      l_khrv_rec := get_khrv_rec(
2890                                 p_khr_id        => p_orig_chr_id,
2891                                 x_return_status => x_return_status
2892                                );
2893      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2894         RAISE sync_failed;
2895      END IF;
2896 
2897      l_chrv_rec := get_chrv_rec(
2898                                 p_chr_id        => p_orig_chr_id,
2899                                 x_return_status => x_return_status
2900                                );
2901      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2902         RAISE sync_failed;
2903      END IF;
2904 
2905      FOR header_rec IN header_csr(p_rebook_chr_id)
2906      LOOP
2907         --l_khrv_rec.id := p_orig_chr_id;
2908         --l_chrv_rec.id := p_orig_chr_id;
2909 
2910         l_khrv_rec.term_duration := header_rec.term_duration;
2911 
2912         l_khrv_rec.pre_tax_yield          := header_rec.pre_tax_yield;
2913         l_khrv_rec.after_tax_yield        := header_rec.after_tax_yield;
2914         l_khrv_rec.target_pre_tax_yield   := header_rec.target_pre_tax_yield;
2915         l_khrv_rec.target_after_tax_yield := header_rec.target_after_tax_yield;
2916         l_khrv_rec.pre_tax_irr            := header_rec.pre_tax_irr;
2917         l_khrv_rec.after_tax_irr          := header_rec.after_tax_irr;
2918         l_khrv_rec.implicit_interest_rate := header_rec.implicit_interest_rate;
2919 
2920         --Bug# 4558486
2921         l_khrv_rec.attribute_category := header_rec.khr_attribute_category;
2922         l_khrv_rec.attribute1         := header_rec.khr_attribute1;
2923         l_khrv_rec.attribute2         := header_rec.khr_attribute2;
2924         l_khrv_rec.attribute3         := header_rec.khr_attribute3;
2925         l_khrv_rec.attribute4         := header_rec.khr_attribute4;
2926         l_khrv_rec.attribute5         := header_rec.khr_attribute5;
2927         l_khrv_rec.attribute6         := header_rec.khr_attribute6;
2928         l_khrv_rec.attribute7         := header_rec.khr_attribute7;
2929         l_khrv_rec.attribute8         := header_rec.khr_attribute8;
2930         l_khrv_rec.attribute9         := header_rec.khr_attribute9;
2931         l_khrv_rec.attribute10        := header_rec.khr_attribute10;
2932         l_khrv_rec.attribute11        := header_rec.khr_attribute11;
2933         l_khrv_rec.attribute12        := header_rec.khr_attribute12;
2934         l_khrv_rec.attribute13        := header_rec.khr_attribute13;
2935         l_khrv_rec.attribute14        := header_rec.khr_attribute14;
2936         l_khrv_rec.attribute15        := header_rec.khr_attribute15;
2937         --Bug# 4558486
2938 
2939         -- sjalasut, added for rebook change control enhancement. START
2940         l_khrv_rec.date_tradein := header_rec.date_tradein;
2941         l_khrv_rec.tradein_amount := header_rec.tradein_amount;
2942         l_khrv_rec.tradein_description := header_rec.tradein_description;
2943         -- sjalasut, added for rebook change control enhancement. END
2944 
2945         l_chrv_rec.start_date    := header_rec.start_date;
2946         l_chrv_rec.end_date      := header_rec.end_date;
2947 
2948         okl_contract_pub.update_contract_header(
2949                                                 p_api_version        => 1.0,
2950                                                 p_init_msg_list      => OKC_API.G_FALSE,
2951                                                 x_return_status      => x_return_status,
2952                                                 x_msg_count          => x_msg_count,
2953                                                 x_msg_data           => x_msg_data,
2954                                                 p_restricted_update  => OKC_API.G_FALSE,
2955                                                 p_chrv_rec           => l_chrv_rec,
2956                                                 p_khrv_rec           => l_khrv_rec,
2957                                                 x_chrv_rec           => x_chrv_rec,
2958                                                 x_khrv_rec           => x_khrv_rec
2959                                                );
2960         IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2961             x_return_status := Okc_Api.G_RET_STS_ERROR;
2962             RAISE sync_failed;
2963         END IF;
2964 
2965      END LOOP;
2966 
2967      RETURN;
2968 
2969   EXCEPTION
2970     WHEN sync_failed THEN
2971        x_return_status := OKC_API.G_RET_STS_ERROR;
2972   END sync_header_values;
2973 
2974   PROCEDURE sync_passthru_party(
2975                                 x_return_status OUT NOCOPY VARCHAR2
2976                                ) IS
2977   BEGIN
2978      x_return_status := OKL_API.G_RET_STS_SUCCESS;
2979   END sync_passthru_party;
2980 
2981 ------------------------------------------------------------------------------
2982 -- PROCEDURE process_pth_detail
2983 --
2984 --  This procedure creates/updates passthru detail
2985 --
2986 -- Calls:
2987 -- Called By:
2988 ------------------------------------------------------------------------------
2989   PROCEDURE process_pth_detail(
2990                                x_return_status OUT NOCOPY VARCHAR2,
2991                                x_msg_count     OUT NOCOPY NUMBER,
2992                                x_msg_data      OUT NOCOPY VARCHAR2,
2993                                p_orig_chr_id   IN  NUMBER,
2994                                p_orig_cle_id   IN  NUMBER,
2995                                p_orig_cpl_id   IN  NUMBER,
2996                                p_vendor_id     IN  OKC_K_PARTY_ROLES_B.OBJECT1_ID1%TYPE,
2997                                p_rbk_chr_id    IN  NUMBER,
2998                                p_rbk_cle_id    IN  NUMBER,
2999                                p_rbk_cpl_id    IN  NUMBER
3000                               ) IS
3001 
3002    CURSOR rbk_pth_detail_csr (p_cle_id NUMBER,
3003                               p_cpl_id NUMBER) IS
3004    SELECT hdr.id hdr_id,
3005           hdr.passthru_term,
3006           dtl.*
3007    FROM   okl_party_payment_dtls dtl,
3008           okl_party_payment_hdr hdr
3009    WHERE  cpl_id         = p_cpl_id
3010    AND    cle_id         = p_cle_id
3011    AND    hdr.id         = dtl.payment_hdr_id;
3012 
3013    CURSOR orig_pth_detail_csr (p_vendor_id OKC_K_PARTY_ROLES_B.OBJECT1_ID1%TYPE,
3014                                p_cle_id    NUMBER,
3015                                p_term      OKL_PARTY_PAYMENT_HDR.PASSTHRU_TERM%TYPE) IS
3016    SELECT dtl.*
3017    FROM   okl_party_payment_dtls dtl,
3018           okl_party_payment_hdr hdr
3019    WHERE  vendor_id         = p_vendor_id
3020    AND    cle_id            = p_cle_id
3021    AND    hdr.passthru_term = p_term
3022    AND    hdr.id            = dtl.payment_hdr_id;
3023 
3024    orig_pth_detail_rec orig_pth_detail_csr%ROWTYPE;
3025 
3026    CURSOR orig_pth_hdr_csr (p_cle_id NUMBER,
3027                             p_term   OKL_PARTY_PAYMENT_HDR.PASSTHRU_TERM%TYPE) IS
3028    SELECT id
3029    FROM   okl_party_payment_hdr
3030    WHERE  cle_id        = p_cle_id
3031    AND    passthru_term = p_term;
3032 
3033    l_orig_pth_hdr_id NUMBER;
3034 
3035    process_pth_failed EXCEPTION;
3036 
3037    l_proc_name VARCHAR2(35) := 'PROCESS_PTH_DETAIL';
3038    l_ppydv_rec okl_party_payments_pvt.ppydv_rec_type;
3039    x_ppydv_rec okl_party_payments_pvt.ppydv_rec_type;
3040 
3041   BEGIN
3042     IF (G_DEBUG_ENABLED = 'Y') THEN
3043       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3044     END IF;
3045 
3046     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3047     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3048           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
3049     END IF;
3050 
3051     FOR rbk_pth_detail_rec IN rbk_pth_detail_csr(p_cle_id => p_rbk_cle_id,
3052                                                  p_cpl_id => p_rbk_cpl_id)
3053     LOOP
3054        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3055                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>>> pth rebook detail...term :'||rbk_pth_detail_rec.passthru_term);
3056          OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>>> pth rebook detail...cle  :'||p_orig_cle_id);
3057        END IF;
3058        OPEN orig_pth_detail_csr (p_vendor_id => p_vendor_id,
3059                                  p_cle_id    => p_orig_cle_id,
3060                                  p_term      => rbk_pth_detail_rec.passthru_term);
3061        FETCH orig_pth_detail_csr INTO orig_pth_detail_rec;
3062        IF orig_pth_detail_csr%NOTFOUND THEN
3063           -- Create passthru detail
3064           OPEN orig_pth_hdr_csr(p_cle_id => p_orig_cle_id,
3065                                 p_term   => rbk_pth_detail_rec.passthru_term);
3066           FETCH orig_pth_hdr_csr INTO l_orig_pth_hdr_id;
3067           CLOSE orig_pth_hdr_csr;
3068 
3069           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3070                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>>>> pth orig detail not found.');
3071           END IF;
3072           l_ppydv_rec.id                            := NULL;
3073           l_ppydv_rec.cpl_id                        := p_orig_cpl_id;
3074           l_ppydv_rec.vendor_id                     := p_vendor_id;
3075           l_ppydv_rec.payment_hdr_id                := l_orig_pth_hdr_id;
3076           l_ppydv_rec.pay_site_id                   := rbk_pth_detail_rec.pay_site_id;
3077           l_ppydv_rec.payment_term_id               := rbk_pth_detail_rec.payment_term_id;
3078           l_ppydv_rec.payment_method_code           := rbk_pth_detail_rec.payment_method_code;
3079           l_ppydv_rec.pay_group_code                := rbk_pth_detail_rec.pay_group_code;
3080 	  l_ppydv_rec.payment_start_date            := rbk_pth_detail_rec.payment_start_date;
3081 	  l_ppydv_rec.payment_frequency             := rbk_pth_detail_rec.payment_frequency;
3082 	  l_ppydv_rec.remit_days                    := rbk_pth_detail_rec.remit_days;
3083 	  l_ppydv_rec.disbursement_basis            := rbk_pth_detail_rec.disbursement_basis;
3084 	  l_ppydv_rec.disbursement_fixed_amount     := rbk_pth_detail_rec.disbursement_fixed_amount;
3085 	  l_ppydv_rec.disbursement_percent          := rbk_pth_detail_rec.disbursement_percent;
3086 	  l_ppydv_rec.processing_fee_basis          := rbk_pth_detail_rec.processing_fee_basis;
3087 	  l_ppydv_rec.processing_fee_fixed_amount   := rbk_pth_detail_rec.processing_fee_fixed_amount;
3088 	  l_ppydv_rec.processing_fee_percent        := rbk_pth_detail_rec.processing_fee_percent;
3089 	  l_ppydv_rec.payment_basis                 := rbk_pth_detail_rec.payment_basis;
3090 
3091           okl_party_payments_pvt.create_party_payment_dtls(
3092                p_api_version    => 1.0,
3093                p_init_msg_list  => OKL_API.G_FALSE,
3094                x_return_status  => x_return_status,
3095                x_msg_count      => x_msg_count,
3096                x_msg_data       => x_msg_data,
3097                p_ppydv_rec      => l_ppydv_rec,
3098                x_ppydv_rec      => x_ppydv_rec
3099               );
3100           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3101                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>>>> Pth detail created: '||x_return_status);
3102           END IF;
3103 
3104           IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3105              RAISE process_pth_failed;
3106           END IF;
3107        ELSE
3108           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3109                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>>>> pth orig detail...header_id: '||orig_pth_detail_rec.payment_hdr_id);
3110             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>>>> pth orig detail...id       : '||orig_pth_detail_rec.id);
3111           END IF;
3112           l_ppydv_rec.id                            := orig_pth_detail_rec.id;
3113           l_ppydv_rec.cpl_id                        := p_orig_cpl_id;
3114           l_ppydv_rec.vendor_id                     := p_vendor_id;
3115           l_ppydv_rec.payment_hdr_id                := orig_pth_detail_rec.payment_hdr_id;
3116           l_ppydv_rec.pay_site_id                   := rbk_pth_detail_rec.pay_site_id;
3117           l_ppydv_rec.payment_term_id               := rbk_pth_detail_rec.payment_term_id;
3118           l_ppydv_rec.payment_method_code           := rbk_pth_detail_rec.payment_method_code;
3119           l_ppydv_rec.pay_group_code                := rbk_pth_detail_rec.pay_group_code;
3120 	  l_ppydv_rec.payment_start_date            := rbk_pth_detail_rec.payment_start_date;
3121 	  l_ppydv_rec.payment_frequency             := rbk_pth_detail_rec.payment_frequency;
3122 	  l_ppydv_rec.remit_days                    := rbk_pth_detail_rec.remit_days;
3123 	  l_ppydv_rec.disbursement_basis            := rbk_pth_detail_rec.disbursement_basis;
3124 	  l_ppydv_rec.disbursement_fixed_amount     := rbk_pth_detail_rec.disbursement_fixed_amount;
3125 	  l_ppydv_rec.disbursement_percent          := rbk_pth_detail_rec.disbursement_percent;
3126 	  l_ppydv_rec.processing_fee_basis          := rbk_pth_detail_rec.processing_fee_basis;
3127 	  l_ppydv_rec.processing_fee_fixed_amount   := rbk_pth_detail_rec.processing_fee_fixed_amount;
3128 	  l_ppydv_rec.processing_fee_percent        := rbk_pth_detail_rec.processing_fee_percent;
3129 	  l_ppydv_rec.payment_basis                 := rbk_pth_detail_rec.payment_basis;
3130 
3131           okl_party_payments_pvt.update_party_payment_dtls(
3132                p_api_version    => 1.0,
3133                p_init_msg_list  => OKL_API.G_FALSE,
3134                x_return_status  => x_return_status,
3135                x_msg_count      => x_msg_count,
3136                x_msg_data       => x_msg_data,
3137                p_ppydv_rec      => l_ppydv_rec,
3138                x_ppydv_rec      => x_ppydv_rec
3139               );
3140           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3141                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>>>> Pth detail updated: '||x_return_status);
3142           END IF;
3143 
3144           IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3145              RAISE process_pth_failed;
3146           END IF;
3147           -- update passthru detail
3148        END IF;
3149        CLOSE orig_pth_detail_csr;
3150     END LOOP; -- rbk_pth_detail_csr
3151 
3152     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3153           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_proc_name ---> done');
3154     END IF;
3155 
3156 EXCEPTION
3157 
3158   WHEN process_pth_failed THEN
3159      x_return_status := OKL_API.G_RET_STS_ERROR;
3160 END process_pth_detail;
3161 
3162 ------------------------------------------------------------------------------
3163 -- PROCEDURE sync_passthru_detail
3164 --
3165 --  This procedure synchronizes passthru line detail and corresponding vendor
3166 --  and vendor level parameters as well
3167 --
3168 -- Calls:
3169 -- Called By:
3170 ------------------------------------------------------------------------------
3171    PROCEDURE sync_passthru_detail(
3172                    x_return_status OUT NOCOPY VARCHAR2,
3173                    x_msg_count     OUT NOCOPY NUMBER,
3174                    x_msg_data      OUT NOCOPY VARCHAR2,
3175                    p_rebook_chr_id IN  NUMBER,
3176                    p_orig_chr_id   IN  NUMBER
3177                   ) IS
3178    l_proc_name VARCHAR2(35) := 'SYNC_PASSTHRU_DETAIL';
3179    pth_failed EXCEPTION;
3180 
3181    CURSOR pth_csr (p_chr_id NUMBER) IS
3182    SELECT okc.id, okc.orig_system_id1, okc.lse_id
3183    FROM   okc_k_lines_b okc,
3184           okl_k_lines okl
3185    WHERE  dnz_chr_id    = p_chr_id
3186    AND    lse_id        = 52 -- FEE top line
3187    AND    okl.fee_type  = 'PASSTHROUGH'
3188    AND    okc.id        = okl.id
3189    AND    okc.orig_system_id1 IS NOT NULL -- only old lines
3190    --Bug# 4959361
3191    AND    okc.sts_code <> 'TERMINATED'
3192    UNION -- Service line
3193    SELECT okc.id, okc.orig_system_id1, okc.lse_id
3194    FROM   okc_k_lines_b okc
3195    WHERE  dnz_chr_id    = p_chr_id
3196    AND    lse_id        = 48 -- SERVICE top line
3197    AND    okc.orig_system_id1 IS NOT NULL -- only old lines
3198    --Bug# 4959361
3199    AND    okc.sts_code <> 'TERMINATED'
3200    UNION -- Asset line
3201    SELECT okc.id, okc.orig_system_id1, okc.lse_id
3202    FROM   okc_k_lines_b okc
3203    WHERE  dnz_chr_id    = p_chr_id
3204    AND    lse_id        = 33 -- Fin. Asset top line
3205    AND    okc.orig_system_id1 IS NOT NULL -- only old lines
3206    --Bug# 4959361
3207    AND    okc.sts_code <> 'TERMINATED';
3208 
3209    CURSOR pth_rbk_hdr_csr (p_chr_id NUMBER,
3210                            p_cle_id NUMBER) IS
3211    SELECT *
3212    FROM   okl_party_payment_hdr
3213    WHERE  dnz_chr_id = p_chr_id
3214    AND    cle_id     = p_cle_id;
3215 
3216    CURSOR pth_orig_hdr_csr (p_chr_id NUMBER,
3217                             p_cle_id NUMBER,
3218                             p_pth_term okl_party_payment_hdr.passthru_term%TYPE) IS
3219    SELECT id
3220    FROM   okl_party_payment_hdr
3221    WHERE  dnz_chr_id    = p_chr_id
3222    AND    cle_id        = p_cle_id
3223    AND    passthru_term = p_pth_term;
3224 
3225    CURSOR pth_vendor_csr (p_chr_id NUMBER,
3226                           p_cle_id NUMBER) IS
3227    SELECT object1_id1 vendor_id,
3228           id
3229    FROM   okc_k_party_roles_b
3230    WHERE  cle_id     = p_cle_id
3231    AND    rle_code   = 'OKL_VENDOR'
3232    AND    dnz_chr_id = p_chr_id;
3233 
3234    CURSOR orig_vendor_csr (p_vendor_id OKC_K_PARTY_ROLES_B.OBJECT1_id1%TYPE,
3235                            p_cle_id    NUMBER) IS
3236    SELECT id
3237    FROM   okc_k_party_roles_b
3238    WHERE  cle_id      = p_cle_id
3239    AND    object1_id1 = p_vendor_id
3240    AND    rle_code    = 'OKL_VENDOR';
3241 
3242    CURSOR rbk_del_vendor_csr (p_orig_chr_id NUMBER,
3243                               p_orig_cle_id NUMBER,
3244                               p_rbk_chr_id  NUMBER,
3245                               p_rbk_cle_id  NUMBER) IS
3246    SELECT orig.object1_id1,
3247           orig.id
3248    FROM   okc_k_party_roles_b orig
3249    WHERE  orig.cle_id     = p_orig_cle_id
3250    AND    orig.dnz_chr_id = p_orig_chr_id
3251    AND    orig.rle_code   = 'OKL_VENDOR'
3252    AND    NOT EXISTS (
3253                       SELECT 'Y'
3254                       FROM   okc_k_party_roles_b rbk
3255                       WHERE  rbk.rle_code     = 'OKL_VENDOR'
3256                       AND    rbk.dnz_chr_id   = p_rbk_chr_id
3257                       AND    rbk.cle_id       = p_rbk_cle_id
3258                       AND    orig.object1_id1 = rbk.object1_id1
3259                       );
3260 
3261    ins NUMBER := 0;
3262    l_c_pphv_tbl okl_party_payments_pvt.pphv_tbl_type;
3263 
3264    upd NUMBER := 0;
3265    l_u_pphv_tbl okl_party_payments_pvt.pphv_tbl_type;
3266 
3267    x_pphv_tbl okl_party_payments_pvt.pphv_tbl_type;
3268    l_pth_orig_hdr_id NUMBER;
3269    l_pth_rebook_hdr_id NUMBER;
3270 
3271    l_orig_pth_tbl okl_party_payments_pvt.passthru_param_tbl_type;
3272    l_rbk_pth_tbl okl_party_payments_pvt.passthru_param_tbl_type;
3273 
3274    l_ppydv_rec okl_party_payments_pvt.ppydv_rec_type;
3275    x_ppydv_rec okl_party_payments_pvt.ppydv_rec_type;
3276 
3277    l_cplv_rec okl_okc_migration_pvt.cplv_rec_type;
3278    x_cplv_rec okl_okc_migration_pvt.cplv_rec_type;
3279 
3280    l_orig_cpl_id NUMBER;
3281 
3282    --Bug# 4558486
3283    l_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
3284    x_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
3285 
3286    BEGIN
3287      IF (G_DEBUG_ENABLED = 'Y') THEN
3288        G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3289      END IF;
3290      x_return_status := OKL_API.G_RET_STS_SUCCESS;
3291      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3292             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
3293      END IF;
3294 
3295      FOR pth_rec IN pth_csr (p_rebook_chr_id)
3296      LOOP
3297         -- Bug# 4350255
3298         l_c_pphv_tbl.DELETE;
3299         l_u_pphv_tbl.DELETE;
3300         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3301                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Process line: '||pth_rec.id||', '||pth_rec.lse_id);
3302         END IF;
3303 
3304         FOR pth_rbk_hdr_rec IN pth_rbk_hdr_csr (p_rebook_chr_id,
3305                                                 pth_rec.id)
3306         LOOP
3307 
3308           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3309                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'pth_rbk_hdr_rec.passthru_term: '|| pth_rbk_hdr_rec.passthru_term);
3310             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'pth_rbk_hdr_rec.effective_from: '||pth_rbk_hdr_rec.effective_from);
3311             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'pth_rbk_hdr_rec.effective_to: '||pth_rbk_hdr_rec.effective_to);
3312           END IF;
3313 
3314           l_pth_rebook_hdr_id := pth_rbk_hdr_rec.id;
3315 
3316           OPEN pth_orig_hdr_csr(p_orig_chr_id,
3317                                 pth_rec.orig_system_id1,
3318                                 pth_rbk_hdr_rec.passthru_term);
3319           FETCH pth_orig_hdr_csr INTO l_pth_orig_hdr_id;
3320           IF (pth_orig_hdr_csr%NOTFOUND) THEN
3321              -- Create pth header
3322              ins := ins + 1;
3323              l_c_pphv_tbl(ins).dnz_chr_id          := p_orig_chr_id;
3324              l_c_pphv_tbl(ins).cle_id              := pth_rec.orig_system_id1;
3325              l_c_pphv_tbl(ins).passthru_start_date := pth_rbk_hdr_rec.passthru_start_date;
3326              l_c_pphv_tbl(ins).payout_basis  := pth_rbk_hdr_rec.payout_basis;
3327              l_c_pphv_tbl(ins).payout_basis_formula := pth_rbk_hdr_rec.payout_basis_formula;
3328              l_c_pphv_tbl(ins).effective_from := pth_rbk_hdr_rec.effective_from;
3329              l_c_pphv_tbl(ins).effective_to  := pth_rbk_hdr_rec.effective_to;
3330              l_c_pphv_tbl(ins).passthru_term := pth_rbk_hdr_rec.passthru_term;
3331              l_c_pphv_tbl(ins).passthru_stream_type_id := pth_rbk_hdr_rec.passthru_stream_type_id;
3332           ELSE
3333              -- Update pth header
3334              upd := upd + 1;
3335              l_u_pphv_tbl(upd).id := l_pth_orig_hdr_id;
3336              l_u_pphv_tbl(upd).passthru_start_date := pth_rbk_hdr_rec.passthru_start_date;
3337              l_u_pphv_tbl(upd).payout_basis  := pth_rbk_hdr_rec.payout_basis;
3338              l_u_pphv_tbl(upd).payout_basis_formula := pth_rbk_hdr_rec.payout_basis_formula;
3339              l_u_pphv_tbl(upd).effective_from := pth_rbk_hdr_rec.effective_from;
3340              l_u_pphv_tbl(upd).effective_to  := pth_rbk_hdr_rec.effective_to;
3341              l_u_pphv_tbl(upd).passthru_term := pth_rbk_hdr_rec.passthru_term;
3342              l_u_pphv_tbl(upd).passthru_stream_type_id := pth_rbk_hdr_rec.passthru_stream_type_id;
3343           END IF;
3344           CLOSE pth_orig_hdr_csr;
3345 
3346         END LOOP; -- pth_hdr_csr
3347 
3348         IF (l_c_pphv_tbl.COUNT > 0) THEN
3349            okl_party_payments_pvt.create_party_payment_hdr(
3350               p_api_version    => 1.0,
3351               p_init_msg_list  => OKL_API.G_FALSE,
3352               x_return_status  => x_return_status,
3353               x_msg_count      => x_msg_count,
3354               x_msg_data       => x_msg_data,
3355               p_pphv_tbl       => l_c_pphv_tbl,
3356               x_pphv_tbl       => x_pphv_tbl
3357              );
3358            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3359                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PTH header insert for: '||pth_rec.orig_system_id1||': '||x_return_status);
3360            END IF;
3361            IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3362               RAISE pth_failed;
3363            END IF;
3364         END IF;
3365         IF (l_u_pphv_tbl.COUNT > 0) THEN
3366            okl_party_payments_pvt.update_party_payment_hdr(
3367               p_api_version    => 1.0,
3368               p_init_msg_list  => OKL_API.G_FALSE,
3369               x_return_status  => x_return_status,
3370               x_msg_count      => x_msg_count,
3371               x_msg_data       => x_msg_data,
3372               p_pphv_tbl       => l_u_pphv_tbl,
3373               x_pphv_tbl       => x_pphv_tbl
3374              );
3375            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3376                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PTH header update for: '||pth_rec.orig_system_id1||': '||x_return_status);
3377            END IF;
3378            IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3379               RAISE pth_failed;
3380            END IF;
3381         END IF;
3382 
3383         FOR pth_vendor_rec in pth_vendor_csr(p_rebook_chr_id,
3384                                              pth_rec.id)
3385         LOOP
3386            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3387                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>rebook vendor id: '||pth_vendor_rec.vendor_id);
3388              OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>rebook cpl id   : '||pth_vendor_rec.id);
3389            END IF;
3390            -- get original vendor and cpl_id for this record
3391            OPEN orig_vendor_csr(pth_vendor_rec.vendor_id,
3392                                 pth_rec.orig_system_id1);
3393            FETCH orig_vendor_csr INTO l_orig_cpl_id;
3394            IF orig_vendor_csr%NOTFOUND THEN
3395              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3396                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>> vendor not found.');
3397              END IF;
3398              -- Create party for orig fee
3399              l_cplv_rec.dnz_chr_id        := p_orig_chr_id;
3400              l_cplv_rec.cle_id            := pth_rec.orig_system_id1;
3401              l_cplv_rec.object1_id1       := pth_vendor_rec.vendor_id;
3402              l_cplv_rec.object1_id2       := '#';
3403              l_cplv_rec.jtot_object1_code := 'OKX_VENDOR';
3404              l_cplv_rec.rle_code          := 'OKL_VENDOR';
3405 
3406              --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
3407              --              to create records in tables
3408              --              okc_k_party_roles_b and okl_k_party_roles
3409              /*
3410              okl_okc_migration_pvt.create_k_party_role(
3411                   p_api_version         => 1.0,
3412                   p_init_msg_list       => OKL_API.G_FALSE,
3413                   x_return_status       => x_return_status,
3414                   x_msg_count           => x_msg_count,
3415                   x_msg_data            => x_msg_data,
3416                   p_cplv_rec            => l_cplv_rec,
3417                   x_cplv_rec            => x_cplv_rec);
3418               */
3419 
3420               okl_k_party_roles_pvt.create_k_party_role(
3421                 p_api_version          => 1.0,
3422                 p_init_msg_list        => OKL_API.G_FALSE,
3423                 x_return_status        => x_return_status,
3424                 x_msg_count            => x_msg_count,
3425                 x_msg_data             => x_msg_data,
3426                 p_cplv_rec             => l_cplv_rec,
3427                 x_cplv_rec             => x_cplv_rec,
3428                 p_kplv_rec             => l_kplv_rec,
3429                 x_kplv_rec             => x_kplv_rec);
3430 
3431               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3432                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>> Vendor '||pth_vendor_rec.vendor_id||' created: '||x_return_status);
3433               END IF;
3434 
3435               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3436                  RAISE pth_failed;
3437               END IF;
3438 
3439               process_pth_detail(
3440                                 x_return_status => x_return_status,
3441                                 x_msg_count     => x_msg_count,
3442                                 x_msg_data      => x_msg_data,
3443                                 p_orig_chr_id   => p_orig_chr_id,
3444                                 p_orig_cle_id   => pth_rec.orig_system_id1,
3445                                 p_orig_cpl_id   => x_cplv_rec.id,
3446                                 p_vendor_id     => pth_vendor_rec.vendor_id,
3447                                 p_rbk_chr_id    => p_rebook_chr_id,
3448                                 p_rbk_cle_id    => pth_rec.id,
3449                                 p_rbk_cpl_id    => pth_vendor_rec.id
3450                                );
3451 
3452               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3453                  RAISE pth_failed;
3454               END IF;
3455 
3456            ELSE
3457              -- get rebook pth header+detail for this vendor
3458              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3459                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>> pth detail for above vendor');
3460              END IF;
3461              process_pth_detail(
3462                                 x_return_status => x_return_status,
3463                                 x_msg_count     => x_msg_count,
3464                                 x_msg_data      => x_msg_data,
3465                                 p_orig_chr_id   => p_orig_chr_id,
3466                                 p_orig_cle_id   => pth_rec.orig_system_id1,
3467                                 p_orig_cpl_id   => l_orig_cpl_id,
3468                                 p_vendor_id     => pth_vendor_rec.vendor_id,
3469                                 p_rbk_chr_id    => p_rebook_chr_id,
3470                                 p_rbk_cle_id    => pth_rec.id,
3471                                 p_rbk_cpl_id    => pth_vendor_rec.id
3472                                );
3473 
3474               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3475                  RAISE pth_failed;
3476               END IF;
3477 
3478            END IF; -- orig_vendor_csr
3479            CLOSE orig_vendor_csr;
3480 
3481         END LOOP; -- pth_vendor_rec
3482 
3483         -- for delated vendors, if any
3484         FOR rbk_del_vendor_rec IN rbk_del_vendor_csr(p_orig_chr_id => p_orig_chr_id,
3485                                                      p_orig_cle_id => pth_rec.orig_system_id1,
3486                                                      p_rbk_chr_id  => p_rebook_chr_id,
3487                                                      p_rbk_cle_id  => pth_rec.id)
3488         LOOP
3489            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3490                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>> Vendor to be deleted: '||rbk_del_vendor_rec.object1_id1);
3491              OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'>> Vendor to be deleted cpl_id: '||rbk_del_vendor_rec.id);
3492            END IF;
3493            okl_maintain_fee_pvt.delete_passthru_party(
3494                                     p_api_version    => 1.0,
3495                                     p_init_msg_list  => OKL_API.G_FALSE,
3496                                     x_return_status  => x_return_status,
3497                                     x_msg_count      => x_msg_count,
3498                                     x_msg_data       => x_msg_data,
3499                                     p_cpl_id         => rbk_del_vendor_rec.id
3500                                    );
3501            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3502                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Vendor deleted: '||x_return_status);
3503            END IF;
3504 
3505            IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3506               RAISE pth_failed;
3507            END IF;
3508 
3509         END LOOP; -- rbk_del_vendor_rec
3510 
3511      END LOOP; -- pth_csr
3512 
3513    EXCEPTION
3514      WHEN pth_failed THEN
3515        x_return_status := OKL_API.G_RET_STS_ERROR;
3516    END sync_passthru_detail;
3517 
3518 ------------------------------------------------------------------------------
3519 -- PROCEDURE sync_fee_line
3520 --
3521 --  This procedure synchronizes FEE line(s) between Orig. and Rebooked contract
3522 --
3523 -- Calls:
3524 -- Called By:
3525 ------------------------------------------------------------------------------
3526   PROCEDURE sync_fee_line(
3527                           x_return_status  OUT NOCOPY VARCHAR2,
3528                           x_msg_count      OUT NOCOPY NUMBER,
3529                           x_msg_data       OUT NOCOPY VARCHAR2,
3530                           p_rebook_chr_id  IN  OKC_K_HEADERS_V.ID%TYPE,
3531                           p_orig_chr_id    IN  OKC_K_HEADERS_V.ID%TYPE
3532                          ) IS
3533 
3534   CURSOR fee_line_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3535   SELECT line.*
3536   FROM   okl_k_Lines_full_v line,
3537          okc_line_styles_v style
3538   WHERE  line.sts_code   = 'BOOKED'
3539   AND    style.lty_code  = 'FEE'
3540   AND    line.dnz_chr_id = p_chr_id
3541   AND    line.lse_id     = style.id
3542   AND    line.fee_type   = 'GENERAL';
3543 
3544   CURSOR fee_subline_csr (p_cle_id OKC_K_LINES_V.ID%TYPE) IS
3545   SELECT id
3546   FROM   okc_k_lines_v
3547   WHERE  cle_id = p_cle_id
3548   AND    sts_code = 'BOOKED';
3549 
3550   CURSOR rbk_new_fee_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3551   SELECT line.*
3552   FROM   okl_k_Lines_full_v line,
3553          okc_line_styles_v style
3554   WHERE  style.lty_code  = 'FEE'
3555   AND    line.dnz_chr_id = p_chr_id
3556   AND    line.lse_id     = style.id
3557   AND    line.orig_system_id1 IS NULL;
3558 
3559   CURSOR orig_fee_strm_csr (p_kle_id OKC_K_LINES_V.ID%TYPE) IS
3560   SELECT id
3561   FROM   okl_streams
3562   WHERE  kle_id = p_kle_id
3563   AND    say_code <> 'HIST';
3564 
3565   CURSOR txn_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3566   SELECT trx_number,
3567          rbr_code,
3568          date_transaction_occurred
3569   FROM   okl_trx_contracts
3570   WHERE  khr_id = p_chr_id
3571   AND    tcn_type = 'TRBK'
3572   AND    tsu_code = 'ENTERED'
3573   AND    representation_type = 'PRIMARY'; -- MGAAP 7263041
3574 
3575   i NUMBER;
3576   l_fee_present VARCHAR2(1);
3577 
3578   l_gen_count    NUMBER;
3579 
3580   l_rbk_fee_tbl  klev_tbl_type;
3581   lx_rbk_fee_tbl klev_tbl_type;
3582 
3583   l_orig_fee_strm_tbl stmv_tbl_type;
3584   x_orig_fee_strm_tbl stmv_tbl_type;
3585 
3586   l_clev_rec          clev_rec_type;
3587   l_klev_rec          klev_rec_type;
3588   x_clev_rec          clev_rec_type;
3589   x_klev_rec          klev_rec_type;
3590 
3591   l_old_clev_rec      clev_rec_type;
3592   l_old_klev_rec      klev_rec_type;
3593   x_old_clev_rec      clev_rec_type;
3594   x_old_klev_rec      klev_rec_type;
3595 
3596   l_old_clev_sub_rec  clev_rec_type;
3597   l_old_klev_sub_rec  klev_rec_type;
3598   x_old_clev_sub_rec  clev_rec_type;
3599   x_old_klev_sub_rec  klev_rec_type;
3600 
3601   l_cplv_rec          cplv_rec_type;
3602   x_cplv_rec          cplv_rec_type;
3603 
3604   l_cle_id            OKC_K_LINES_B.ID%TYPE;
3605   l_trx_date          okl_trx_contracts.date_transaction_occurred%TYPE;
3606 
3607   l_rgpv_rec          rgpv_rec_type;
3608   x_rgpv_rec          rgpv_rec_type;
3609   l_rulv_rec          rulv_rec_type;
3610   x_rulv_rec          rulv_rec_type;
3611 
3612   x_rulv_freq_rec     rulv_rec_type;
3613   x_rulv_exp_rec      rulv_rec_type;
3614 
3615   l_del_rulv_tbl      rulv_tbl_type;
3616   l_orig_rgp_id       NUMBER;
3617   l_orig_rule_id      NUMBER;
3618 
3619   sync_fee_failed EXCEPTION;
3620 
3621   -- changed the cursor to also include fee lines whose fee purpose code is null
3622   -- so that the same logic is applied to other fee lines while synchronization.
3623   -- changes introduced as part of Rebook Change Control Enhancement (RBCCE) START
3624   CURSOR c_fee_rbk_csr (cp_chr_id okc_k_headers_b.id%TYPE) IS
3625   SELECT okc.id
3626         ,okc.dnz_chr_id
3627         ,item.id item_id
3628         ,item.object1_id1
3629         ,item.object1_id2
3630         ,okc.start_date
3631         ,okc.end_date
3632         ,okl.amount
3633         ,okl.initial_direct_cost
3634         ,okl.qte_id
3635         ,okl.funding_date
3636         ,okc.orig_system_id1
3637         ,okl.fee_type
3638         --,partyb.id role_id -- change added for Rebook Change Control Enhancement
3639         --,partyb.object1_id1 vendor_party_id -- change added for Rebook Change Control Enhancement
3640         --,partyb.rle_code -- change added for Rebook Change Control Enhancement
3641         --,partyb.jtot_object1_code -- change added for Rebook Change Control Enhancement
3642         --Bug# 4558486
3643         ,okl.attribute_category
3644         ,okl.attribute1
3645         ,okl.attribute2
3646         ,okl.attribute3
3647         ,okl.attribute4
3648         ,okl.attribute5
3649         ,okl.attribute6
3650         ,okl.attribute7
3651         ,okl.attribute8
3652         ,okl.attribute9
3653         ,okl.attribute10
3654         ,okl.attribute11
3655         ,okl.attribute12
3656         ,okl.attribute13
3657         ,okl.attribute14
3658         ,okl.attribute15
3659    FROM okc_k_lines_b okc
3660        ,okl_k_lines okl
3661        ,okc_k_items item
3662        ,okc_line_styles_b style
3663        --,okc_k_party_roles_b partyb -- change added for Rebook Change Control Enhancement
3664   WHERE okc.id                 = okl.id
3665     AND okc.id                 = item.cle_id
3666     AND okc.dnz_chr_id         = item.dnz_chr_id
3667     AND okl.id                 = item.cle_id
3668     AND okc.dnz_chr_id         = cp_chr_id
3669     AND okc.lse_id             = style.id
3670     AND item.jtot_object1_code = 'OKL_STRMTYP'
3671     AND style.lty_code         = 'FEE'
3672     AND okc.orig_system_id1    IS NOT NULL
3673     AND (okl.fee_purpose_code   = 'SALESTAX' -- Only sales tax related fee line
3674         OR okl.fee_purpose_code IS NULL)
3675     --Bug# 4959361
3676     AND    okc.sts_code <> 'TERMINATED'; -- change added for Rebook Change Control Enhancement
3677     --AND partyb.dnz_chr_id (+) = okc.dnz_chr_id -- change added for Rebook Change Control Enhancement
3678     --AND partyb.cle_id (+) = okc.id; -- change added for Rebook Change Control Enhancement
3679 
3680   -- get fee top line info and optional supplier info from the original contract
3681   -- cursor added as part of rebook change control enhancement
3682   CURSOR c_fee_orig_csr(cp_chr_id okc_k_headers_b.id%TYPE, cp_cle_id okc_k_lines_b.id%TYPE) IS
3683   SELECT okc.id,
3684          item.id item_id,
3685          item.object1_id1,
3686          item.object1_id2,
3687          okc.start_date,
3688          okc.end_date,
3689          okl.amount,
3690          okl.initial_direct_cost,
3691          okl.qte_id,
3692          okl.funding_date,
3693          okc.orig_system_id1,
3694          --partyb.id role_id,
3695          --partyb.object1_id1 vendor_party_id,
3696          --partyb.rle_code,
3697          --partyb.jtot_object1_code,
3698          okl.fee_type,
3699          --Bug# 4558486
3700          okl.attribute_category,
3701          okl.attribute1,
3702          okl.attribute2,
3703          okl.attribute3,
3704          okl.attribute4,
3705          okl.attribute5,
3706          okl.attribute6,
3707          okl.attribute7,
3708          okl.attribute8,
3709          okl.attribute9,
3710          okl.attribute10,
3711          okl.attribute11,
3712          okl.attribute12,
3713          okl.attribute13,
3714          okl.attribute14,
3715          okl.attribute15
3716     FROM okc_k_lines_b okc,
3717          okl_k_lines okl,
3718          okc_k_items item,
3719          okc_line_styles_b style
3720          --okc_k_party_roles_b partyb
3721    WHERE okc.id = okl.id
3722      AND okc.id = item.cle_id
3723      AND okc.dnz_chr_id = item.dnz_chr_id
3724      AND okl.id = item.cle_id
3725      AND okc.dnz_chr_id = cp_chr_id
3726      AND okc.id = cp_cle_id
3727      AND okc.lse_id = style.id
3728      AND item.jtot_object1_code = 'OKL_STRMTYP'
3729      AND style.lty_code = 'FEE';
3730      --AND partyb.dnz_chr_id (+) = okc.dnz_chr_id
3731      --AND partyb.cle_id (+) = okc.id;
3732 
3733   c_fee_orig_rec c_fee_orig_csr%ROWTYPE;
3734   c_fee_rbk_rec c_fee_rbk_csr%ROWTYPE;
3735 
3736   -- changes introduced as part of Rebook Change Control Enhancement (RBCCE) END
3737 
3738   l_orig_st_fee_rec okl_maintain_fee_pvt.fee_types_rec_type;
3739   x_orig_st_fee_rec okl_maintain_fee_pvt.fee_types_rec_type;
3740 
3741   CURSOR rbk_fee_party_csr (p_line_id NUMBER,
3742                             p_chr_id  NUMBER) IS
3743   SELECT id, object1_id1, object1_id2,name
3744   FROM   okc_k_party_roles_b cpl,
3745          okx_vendors_v ven
3746   WHERE  cpl.cle_id     = p_line_id
3747   AND    cpl.dnz_chr_id = p_chr_id
3748   AND    cpl.rle_code   = 'OKL_VENDOR'
3749   AND    ven.id1 = cpl.object1_id1;
3750 
3751   CURSOR orig_fee_party_csr (p_line_id NUMBER,
3752                              p_chr_id  NUMBER) IS
3753   SELECT id, object1_id1
3754   FROM   okc_k_party_roles_b
3755   WHERE  cle_id      = p_line_id
3756   AND    dnz_chr_id  = p_chr_id
3757   AND    rle_code    = 'OKL_VENDOR';
3758 
3759   CURSOR orig_fee_item_csr (p_line_id NUMBER,
3760                             p_chr_id NUMBER) IS
3761   SELECT id
3762   FROM   okc_k_items
3763   WHERE  cle_id            = p_line_id
3764   AND    dnz_chr_id        = p_chr_id
3765   AND    jtot_object1_code = 'OKL_STRMTYP';
3766 
3767   l_orig_party_id NUMBER;
3768   l_orig_object1_id1 OKC_K_PARTY_ROLES_V.OBJECT1_ID1%TYPE;
3769   l_orig_item_id  NUMBER;
3770   l_orig_fee_top_line_id NUMBER;
3771 
3772   --Bug# 4880939
3773   CURSOR rbk_fee_asset_csr (p_top_line_id NUMBER,
3774                             p_chr_id      NUMBER) IS
3775   SELECT okc_cov_ast.orig_system_id1, okc_cov_ast.id line_id, okc_fin.name, SUBSTR(okc_fin.item_description,1,200) item_description,
3776          okl.capital_amount, okl.amount,
3777          item.id item_id, item.object1_id1, item.object1_id2, item.jtot_object1_code
3778   FROM   okc_k_lines_b okc_cov_ast,
3779          okl_k_lines okl,
3780          okc_line_styles_b style,
3781          okc_k_items item,
3782          okc_k_lines_v okc_fin
3783   WHERE  okc_cov_ast.cle_id = p_top_line_id
3784   AND    okc_cov_ast.dnz_chr_id = p_chr_id
3785   AND    okc_cov_ast.id = okl.id
3786   AND    okc_cov_ast.id = item.cle_id
3787   AND    okc_cov_ast.dnz_chr_id = item.dnz_chr_id
3788   AND    item.jtot_object1_code = 'OKX_COVASST'
3789   AND    okc_cov_ast.lse_id = style.id
3790   AND    style.lty_code = 'LINK_FEE_ASSET'
3791   AND    okc_fin.id = TO_NUMBER(item.object1_id1)
3792   AND    okc_fin.dnz_chr_id = p_chr_id
3793   --Bug# 4959361
3794   AND    okc_cov_ast.sts_code <> 'TERMINATED';
3795 
3796   CURSOR orig_fee_asset_csr (p_sub_line_id NUMBER,
3797                              p_chr_id      NUMBER) IS
3798   SELECT okc.orig_system_id1, okc.id line_id, okc.name, okc.item_description,
3799          okl.capital_amount,
3800          item.id item_id, item.object1_id1, item.object1_id2, item.jtot_object1_code
3801   FROM   okc_k_lines_v okc,
3802          okl_k_lines okl,
3803          okc_line_styles_b style,
3804          okc_k_items item
3805   WHERE  okc.id = p_sub_line_id
3806   AND    okc.dnz_chr_id = p_chr_id
3807   AND    okc.id = okl.id
3808   AND    okc.id = item.cle_id
3809   AND    okc.dnz_chr_id = item.dnz_chr_id
3810   AND    item.jtot_object1_code = 'OKX_COVASST'
3811   AND    okc.lse_id = style.id
3812   AND    style.lty_code = 'LINK_FEE_ASSET';
3813 
3814   upd NUMBER := 0;
3815   l_u_line_item_tbl okl_contract_line_item_pvt.line_item_tbl_type;
3816   x_u_line_item_tbl okl_contract_line_item_pvt.line_item_tbl_type;
3817   ins NUMBER := 0;
3818   l_c_line_item_tbl okl_contract_line_item_pvt.line_item_tbl_type;
3819   x_c_line_item_tbl okl_contract_line_item_pvt.line_item_tbl_type;
3820 
3821   CURSOR rbk_d_fee_asset_csr (p_orig_chr_id NUMBER,
3822                               p_rbk_chr_id  NUMBER) IS
3823   select origl.id orig_link_fee_id,
3824          origk.id orig_link_fee_item_id,
3825          origp.id orig_parent_fee_id
3826   from   okc_k_lines_b origl,
3827          okc_k_lines_b origp,
3828          okc_k_items_v origk
3829   where  origl.dnz_chr_id        = p_orig_chr_id
3830   and    origl.lse_id            = 53 -- LINK_FEE_ASSET
3831   and    origl.cle_id            = origp.id
3832   and    origl.dnz_chr_id        = origp.dnz_chr_id
3833   and    origp.lse_id            = 52 -- FEE
3834   and    origp.dnz_chr_id        = p_orig_chr_id
3835   and    origl.id                = origk.cle_id
3836   and    origk.jtot_object1_code = 'OKX_COVASST'
3837   and    not exists (
3838                      select 'Y'
3839                      from   okc_k_lines_b rbkl
3840                      where  to_char(origl.id) = rbkl.orig_system_id1
3841                      and    rbkl.dnz_chr_id   = p_rbk_chr_id
3842                      );
3843 
3844   del NUMBER := 0;
3845   l_d_line_item_tbl okl_contract_line_item_pvt.line_item_tbl_type;
3846 
3847   l_orig_freq_rule_id  NUMBER;
3848   l_orig_freq_rgp_id   NUMBER;
3849   l_orig_freq          OKC_RULES_V.OBJECT1_ID1%TYPE;
3850   l_orig_exp_rule_id   NUMBER;
3851   l_orig_exp_rgp_id    NUMBER;
3852   l_orig_exp_period    NUMBER;
3853   l_orig_exp_amount    NUMBER;
3854   x_rule_count         NUMBER;
3855 
3856   l_proc_name   VARCHAR2(35)    := 'SYNC_FEE_LINES';
3857 
3858   -- Bug 4524091
3859   CURSOR rvi_fee_csr (p_rbk_chr_id NUMBER) IS
3860   SELECT okc.id,
3861          okl.amount,
3862          okc.orig_system_id1 orig_fee_id,
3863          --Bug# 4558486
3864          okl.attribute_category,
3865          okl.attribute1,
3866          okl.attribute2,
3867          okl.attribute3,
3868          okl.attribute4,
3869          okl.attribute5,
3870          okl.attribute6,
3871          okl.attribute7,
3872          okl.attribute8,
3873          okl.attribute9,
3874          okl.attribute10,
3875          okl.attribute11,
3876          okl.attribute12,
3877          okl.attribute13,
3878          okl.attribute14,
3879          okl.attribute15
3880   FROM   okc_k_lines_b okc,
3881          okl_k_lines okl,
3882          okc_line_styles_b style
3883   WHERE  okc.id                 = okl.id
3884   AND    okc.dnz_chr_id         = p_rbk_chr_id
3885   AND    okc.lse_id             = style.id
3886   AND    style.lty_code         = 'FEE'
3887   AND    okl.fee_type           = 'ABSORBED' -- Absorbed Fee only
3888   AND    okl.fee_purpose_code   = 'RVI'      -- Only RVI related fee line
3889   AND    okc.orig_system_id1    IS NOT NULL
3890   AND    okc.cle_id             IS NULL;     -- Only top line
3891 
3892   l_rvi_clev_rec clev_rec_type;
3893   l_rvi_klev_rec klev_rec_type;
3894 
3895   --Bug# 4558486
3896   l_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
3897   x_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
3898 
3899   --Bug# 4899328
3900   l_cov_ast_tbl  klev_tbl_type;
3901   lx_cov_ast_tbl klev_tbl_type;
3902 
3903   BEGIN
3904     IF (G_DEBUG_ENABLED = 'Y') THEN
3905       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3906     END IF;
3907 
3908     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3909     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3910           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
3911     END IF;
3912 
3913     -- ABANDON Orig FEE line only if Orig contract has FEE_TYPE='GENERAL'
3914 
3915     FOR orig_fee_rec IN fee_line_csr(p_orig_chr_id) LOOP
3916       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3917               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Abandon line: '||orig_fee_rec.id);
3918       END IF;
3919       -- Delete from Orig contract
3920       -- l_clev_rec    := NULL;
3921       -- l_klev_rec    := NULL;
3922 
3923       l_clev_rec.id := orig_fee_rec.id;
3924       l_clev_rec.chr_id := p_orig_chr_id;
3925       l_klev_rec.id := orig_fee_rec.id;
3926       l_clev_rec.sts_code := 'ABANDONED';
3927 
3928       -- Make Fee top-line ABANDONED
3929       okl_contract_pub.update_contract_line(
3930                                             p_api_version   => 1.0,
3931                                             p_init_msg_list => OKL_API.G_FALSE,
3932                                             x_return_status => x_return_status,
3933                                             x_msg_count     => x_msg_count,
3934                                             x_msg_data      => x_msg_data,
3935                                             p_clev_rec      => l_clev_rec,
3936                                             p_klev_rec      => l_klev_rec,
3937                                             x_clev_rec      => x_clev_rec,
3938                                             x_klev_rec      => x_klev_rec
3939                                            );
3940       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3941         RAISE sync_fee_failed;
3942       END IF;
3943 
3944       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3945               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Line deleted');
3946       END IF;
3947 
3948       -- ABANDONED FEE sub-lines
3949       FOR fee_subline_rec IN fee_subline_csr(orig_fee_rec.id) LOOP
3950         l_clev_rec.id := fee_subline_rec.id;
3951         l_klev_rec.id := fee_subline_rec.id;
3952 
3953         l_clev_rec.sts_code := 'ABANDONED';
3954 
3955         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3956                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Sub line delete: '||fee_subline_rec.id);
3957         END IF;
3958         okl_contract_pub.update_contract_line(
3959                                               p_api_version   => 1.0,
3960                                               p_init_msg_list => OKL_API.G_FALSE,
3961                                               x_return_status => x_return_status,
3962                                               x_msg_count     => x_msg_count,
3963                                               x_msg_data      => x_msg_data,
3964                                               p_clev_rec      => l_clev_rec,
3965                                               p_klev_rec      => l_klev_rec,
3966                                               x_clev_rec      => x_clev_rec,
3967                                               x_klev_rec      => x_klev_rec
3968                                              );
3969         IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3970           RAISE sync_fee_failed;
3971         END IF;
3972         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3973                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Sub line deleted');
3974         END IF;
3975       END LOOP;
3976 
3977       -- HIST related Streams
3978       i := 0;
3979       FOR orig_fee_strm_rec IN orig_fee_strm_csr (orig_fee_rec.id) LOOP
3980         i := i + 1;
3981         l_orig_fee_strm_tbl(i).id        := orig_fee_strm_rec.id;
3982         l_orig_fee_strm_tbl(i).say_code  := 'HIST';
3983         l_orig_fee_strm_tbl(i).active_yn := 'N';
3984         l_orig_fee_strm_tbl(i).date_history  := SYSDATE;
3985       END LOOP;
3986       IF (l_orig_fee_strm_tbl.COUNT <> 0) THEN
3987         okl_streams_pub.update_streams(
3988                                   p_api_version    => 1.0,
3989                                   p_init_msg_list  => OKC_API.G_FALSE,
3990                                   x_return_status  => x_return_status,
3991                                   x_msg_count      => x_msg_count,
3992                                   x_msg_data       => x_msg_data,
3993                                   p_stmv_tbl       => l_orig_fee_strm_tbl,
3994                                   x_stmv_tbl       => x_orig_fee_strm_tbl
3995                                  );
3996 
3997         IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3998           RAISE sync_fee_failed;
3999         END IF;
4000       END IF; -- end of l_orig_fee_strm_tbl.COUNT <> 0
4001     END LOOP; -- Orig Fee line ABANDON
4002 
4003     l_rbk_fee_tbl.DELETE;
4004     i := 0;
4005     --
4006     -- Check for New FEE line being added during rebook
4007     --
4008     FOR rbk_fee_rec IN rbk_new_fee_csr(p_rebook_chr_id)
4009     LOOP
4010        i := i + 1;
4011        l_rbk_fee_tbl(i).id := rbk_fee_rec.id;
4012 
4013        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4014                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Old Fee line: '||rbk_fee_rec.id);
4015        END IF;
4016 
4017     END LOOP; -- rbk_fee_csr
4018 
4019     IF (i > 0) THEN
4020        okl_copy_asset_pub.copy_all_lines(
4021                                          p_api_version        => 1.0,
4022                                          p_init_msg_list      => OKL_API.G_FALSE,
4023                                          x_return_status      => x_return_status,
4024                                          x_msg_count          => x_msg_count,
4025                                          x_msg_data           => x_msg_data,
4026                                          p_from_cle_id_tbl    => l_rbk_fee_tbl,
4027                                          p_to_cle_id          => NULL,
4028                                          p_to_chr_id          => p_orig_chr_id,
4029                                          p_to_template_yn     => 'N',
4030                                          p_copy_reference     => 'COPY',
4031                                          p_copy_line_party_yn => 'Y',
4032                                          p_renew_ref_yn       => 'N',
4033                                          p_trans_type         => 'CRB',
4034                                          x_cle_id_tbl         => lx_rbk_fee_tbl
4035                                         );
4036 
4037        IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4038          RAISE sync_fee_failed;
4039        END IF;
4040 
4041     END IF;
4042 
4043     --
4044     -- Bug 4524091
4045     -- Fee line with RVI Purpose
4046     -- Update amount
4047     --
4048     FOR rvi_fee_rec IN rvi_fee_csr(p_rebook_chr_id)
4049     LOOP
4050       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4051               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'RVI Fee Line: '||rvi_fee_rec.id);
4052         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'RVI Fee Amt : '||rvi_fee_rec.amount);
4053       END IF;
4054 
4055       l_rvi_clev_rec.id     := rvi_fee_rec.orig_fee_id;
4056       l_rvi_klev_rec.id     := rvi_fee_rec.orig_fee_id;
4057       l_rvi_klev_rec.amount := rvi_fee_rec.amount;
4058 
4059       --Bug# 4558486
4060       l_rvi_klev_rec.attribute_category := rvi_fee_rec.attribute_category;
4061       l_rvi_klev_rec.attribute1 := rvi_fee_rec.attribute1;
4062       l_rvi_klev_rec.attribute2 := rvi_fee_rec.attribute2;
4063       l_rvi_klev_rec.attribute3 := rvi_fee_rec.attribute3;
4064       l_rvi_klev_rec.attribute4 := rvi_fee_rec.attribute4;
4065       l_rvi_klev_rec.attribute5 := rvi_fee_rec.attribute5;
4066       l_rvi_klev_rec.attribute6 := rvi_fee_rec.attribute6;
4067       l_rvi_klev_rec.attribute7 := rvi_fee_rec.attribute7;
4068       l_rvi_klev_rec.attribute8 := rvi_fee_rec.attribute8;
4069       l_rvi_klev_rec.attribute9 := rvi_fee_rec.attribute9;
4070       l_rvi_klev_rec.attribute10 := rvi_fee_rec.attribute10;
4071       l_rvi_klev_rec.attribute11 := rvi_fee_rec.attribute11;
4072       l_rvi_klev_rec.attribute12 := rvi_fee_rec.attribute12;
4073       l_rvi_klev_rec.attribute13 := rvi_fee_rec.attribute13;
4074       l_rvi_klev_rec.attribute14 := rvi_fee_rec.attribute14;
4075       l_rvi_klev_rec.attribute15 := rvi_fee_rec.attribute15;
4076 
4077       okl_contract_pub.update_contract_line(
4078                                             p_api_version     => 1.0,
4079                                             p_init_msg_list   => OKC_API.G_FALSE,
4080                                             x_return_status   => x_return_status,
4081                                             x_msg_count       => x_msg_count,
4082                                             x_msg_data        => x_msg_data,
4083                                             p_clev_rec        => l_rvi_clev_rec,
4084                                             p_klev_rec        => l_rvi_klev_rec,
4085                                             x_clev_rec        => x_clev_rec,
4086                                             x_klev_rec        => x_klev_rec
4087                                            );
4088 
4089       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4090         RAISE sync_fee_failed;
4091       END IF;
4092 
4093       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4094               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'RVI Fee Amount updated: '||x_return_status);
4095       END IF;
4096 
4097     END LOOP; -- rvi_fee_csr
4098     -- Bug 4524091
4099 
4100     -- OKL.H Projects changes -- Bug# 4373029
4101     -- Sync old fee lines for any update where purpose=SALESTAX
4102 
4103     OPEN c_fee_rbk_csr (cp_chr_id => p_rebook_chr_id);
4104     LOOP
4105       FETCH c_fee_rbk_csr INTO c_fee_rbk_rec;
4106       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4107               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'OKL.H*** ST Fee Line: '|| c_fee_rbk_rec.id);
4108       END IF;
4109       EXIT WHEN c_fee_rbk_csr%NOTFOUND;
4110       OPEN c_fee_orig_csr(cp_chr_id => p_orig_chr_id, cp_cle_id => c_fee_rbk_rec.orig_system_id1);
4111       FETCH c_fee_orig_csr INTO c_fee_orig_rec;
4112 
4113       IF(c_fee_orig_csr%NOTFOUND) THEN
4114         CLOSE c_fee_orig_csr;
4115         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4116       ELSE
4117         l_orig_fee_top_line_id  := c_fee_rbk_rec.orig_system_id1; -- for future use
4118         -- check if either of the fee, (amount where fee type is not Rollover), idc,
4119         -- (qte_id and fee type is not Rollover), supplier are changed between the contracts only then merge the change
4120         -- onto the fee line that belongs to the original contract
4121         -- fee start date change would not sync up the fee lines for start date, the original date remains
4122 
4123         IF(
4124            (c_fee_orig_rec.object1_id1 <> c_fee_rbk_rec.object1_id1) -- fee lov value has changed
4125          -- amount has changed on a fee type that is not Rollover
4126          OR((NVL(c_fee_orig_rec.amount,0) <> NVL(c_fee_rbk_rec.amount,0)) AND c_fee_orig_rec.fee_type <> G_ROLLOVER_FEE)
4127          OR(NVL(c_fee_orig_rec.initial_direct_cost,0) <> NVL(c_fee_rbk_rec.initial_direct_cost,0)) -- idc has changed
4128          -- for non rollover fee quote has changed (is there a quote for other fee types??)
4129          OR((NVL(c_fee_orig_rec.qte_id, OKL_API.G_MISS_NUM) <> NVL(c_fee_rbk_rec.qte_id, OKL_API.G_MISS_NUM)) AND c_fee_orig_rec.fee_type <> G_ROLLOVER_FEE)
4130 --       OR(NVL(c_fee_orig_rec.vendor_party_id, OKL_API.G_MISS_NUM) <> NVL(c_fee_rbk_rec.vendor_party_id, OKL_API.G_MISS_NUM)) -- optional supplier info has changed
4131 --       fee start date changes are not synced up on the original fee line
4132 --       OR(TRUNC(NVL(c_fee_orig_rec.start_date,OKL_API.G_MISS_DATE)) <> TRUNC(NVL(c_fee_rbk_rec.start_date,OKL_API.G_MISS_DATE)))
4133          OR(TRUNC(NVL(c_fee_orig_rec.end_date,OKL_API.G_MISS_DATE)) <> TRUNC(NVL(c_fee_rbk_rec.end_date,OKL_API.G_MISS_DATE)))
4134          --Bug# 4558486
4135          OR(NVL(c_fee_orig_rec.attribute_category, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute_category, OKL_API.G_MISS_CHAR))
4136          OR(NVL(c_fee_orig_rec.attribute1, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute1, OKL_API.G_MISS_CHAR))
4137          OR(NVL(c_fee_orig_rec.attribute2, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute2, OKL_API.G_MISS_CHAR))
4138          OR(NVL(c_fee_orig_rec.attribute3, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute3, OKL_API.G_MISS_CHAR))
4139          OR(NVL(c_fee_orig_rec.attribute4, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute4, OKL_API.G_MISS_CHAR))
4140          OR(NVL(c_fee_orig_rec.attribute5, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute5, OKL_API.G_MISS_CHAR))
4141          OR(NVL(c_fee_orig_rec.attribute6, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute6, OKL_API.G_MISS_CHAR))
4142          OR(NVL(c_fee_orig_rec.attribute7, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute7, OKL_API.G_MISS_CHAR))
4143          OR(NVL(c_fee_orig_rec.attribute8, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute8, OKL_API.G_MISS_CHAR))
4144          OR(NVL(c_fee_orig_rec.attribute9, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute9, OKL_API.G_MISS_CHAR))
4145          OR(NVL(c_fee_orig_rec.attribute10, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute10, OKL_API.G_MISS_CHAR))
4146          OR(NVL(c_fee_orig_rec.attribute11, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute11, OKL_API.G_MISS_CHAR))
4147          OR(NVL(c_fee_orig_rec.attribute12, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute12, OKL_API.G_MISS_CHAR))
4148          OR(NVL(c_fee_orig_rec.attribute13, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute13, OKL_API.G_MISS_CHAR))
4149          OR(NVL(c_fee_orig_rec.attribute14, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute14, OKL_API.G_MISS_CHAR))
4150          OR(NVL(c_fee_orig_rec.attribute15, OKL_API.G_MISS_CHAR) <> NVL(c_fee_rbk_rec.attribute15, OKL_API.G_MISS_CHAR))
4151 
4152         )THEN
4153           l_orig_st_fee_rec.line_id               := c_fee_rbk_rec.orig_system_id1;
4154           l_orig_st_fee_rec.dnz_chr_id            := p_orig_chr_id;
4155           -- item id in okc_k_items remains as of the original contract
4156           l_orig_st_fee_rec.item_id               := c_fee_orig_rec.item_id;
4157           l_orig_st_fee_rec.item_id1              := c_fee_rbk_rec.object1_id1;
4158           l_orig_st_fee_rec.item_id2              := c_fee_rbk_rec.object1_id2;
4159           -- l_orig_st_fee_rec.effective_from        := c_fee_rbk_rec.start_date;
4160           -- the start date on the fee line is not updateable, the original value remains
4161           -- coded as per Rebook Change Control Enhancement
4162           l_orig_st_fee_rec.effective_from        := c_fee_orig_rec.start_date;
4163           l_orig_st_fee_rec.effective_to          := c_fee_rbk_rec.end_date;
4164           l_orig_st_fee_rec.amount                := c_fee_rbk_rec.amount;
4165           l_orig_st_fee_rec.initial_direct_cost   := c_fee_rbk_rec.initial_direct_cost;
4166           l_orig_st_fee_rec.fee_type              := c_fee_orig_rec.fee_type;
4167 
4168           l_orig_st_fee_rec.party_id  := NULL;
4169           l_orig_st_fee_rec.party_id1 := NULL;
4170           l_orig_st_fee_rec.party_id2 := NULL;
4171           --Bug# 4880939
4172           l_orig_st_fee_rec.party_name := NULL;
4173           IF (c_fee_rbk_rec.fee_type <> 'PASSTHROUGH') THEN
4174 
4175             FOR orig_fee_party_rec IN
4176                 orig_fee_party_csr(l_orig_fee_top_line_id, p_orig_chr_id) LOOP
4177               l_orig_st_fee_rec.party_id := orig_fee_party_rec.id;
4178             END LOOP;
4179 
4180             FOR rbk_fee_party_rec IN
4181                 rbk_fee_party_csr(c_fee_rbk_rec.id,c_fee_rbk_rec.dnz_chr_id) LOOP
4182               l_orig_st_fee_rec.party_id1 := rbk_fee_party_rec.object1_id1;
4183               l_orig_st_fee_rec.party_id2 := rbk_fee_party_rec.object1_id2;
4184               l_orig_st_fee_rec.party_name := rbk_fee_party_rec.name;
4185             END LOOP;
4186 
4187           END IF;
4188 
4189           -- just to make sure that we are not syncing up the qte_id for a rollover fee
4190           l_orig_st_fee_rec.qte_id := c_fee_orig_rec.qte_id;
4191 
4192           --Bug# 4558486
4193           l_orig_st_fee_rec.attribute_category    := c_fee_rbk_rec.attribute_category;
4194           l_orig_st_fee_rec.attribute1            := c_fee_rbk_rec.attribute1;
4195           l_orig_st_fee_rec.attribute2            := c_fee_rbk_rec.attribute2;
4196           l_orig_st_fee_rec.attribute3            := c_fee_rbk_rec.attribute3;
4197           l_orig_st_fee_rec.attribute4            := c_fee_rbk_rec.attribute4;
4198           l_orig_st_fee_rec.attribute5            := c_fee_rbk_rec.attribute5;
4199           l_orig_st_fee_rec.attribute6            := c_fee_rbk_rec.attribute6;
4200           l_orig_st_fee_rec.attribute7            := c_fee_rbk_rec.attribute7;
4201           l_orig_st_fee_rec.attribute7            := c_fee_rbk_rec.attribute8;
4202           l_orig_st_fee_rec.attribute9            := c_fee_rbk_rec.attribute9;
4203           l_orig_st_fee_rec.attribute10           := c_fee_rbk_rec.attribute10;
4204           l_orig_st_fee_rec.attribute11           := c_fee_rbk_rec.attribute11;
4205           l_orig_st_fee_rec.attribute12           := c_fee_rbk_rec.attribute12;
4206           l_orig_st_fee_rec.attribute13           := c_fee_rbk_rec.attribute13;
4207           l_orig_st_fee_rec.attribute14           := c_fee_rbk_rec.attribute14;
4208           l_orig_st_fee_rec.attribute15           := c_fee_rbk_rec.attribute15;
4209 
4210           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4211                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.line_id: '||l_orig_st_fee_rec.line_id);
4212             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.dnz_chr_id: '||l_orig_st_fee_rec.dnz_chr_id);
4213             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.item_id: '||l_orig_st_fee_rec.item_id);
4214             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.item_id1: '||l_orig_st_fee_rec.item_id1);
4215             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.item_id2: '||l_orig_st_fee_rec.item_id2);
4216             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.effective_from: '||l_orig_st_fee_rec.effective_from);
4217             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.effective_to: '||l_orig_st_fee_rec.effective_to);
4218             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.amount: '||l_orig_st_fee_rec.amount);
4219             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.initial_direct_cost: '||l_orig_st_fee_rec.initial_direct_cost);
4220             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_st_fee_rec.fee_type: '||l_orig_st_fee_rec.fee_type);
4221           END IF;
4222 
4223           -- Update corresponding Orig Fee line
4224           okl_maintain_fee_pvt.update_fee_type(
4225                 p_api_version   => 1.0,
4226                 p_init_msg_list => OKL_API.G_FALSE,
4227                 x_return_status => x_return_status,
4228                 x_msg_count     => x_msg_count,
4229                 x_msg_data      => x_msg_data,
4230                 p_fee_types_rec => l_orig_st_fee_rec,
4231                 x_fee_types_rec => x_orig_st_fee_rec
4232                );
4233           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4234                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'OKL.H*** After Update Top line: '||x_return_status);
4235           END IF;
4236 
4237           IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4238             RAISE sync_fee_failed;
4239           END IF;
4240         END IF; -- end of attribute comparision and calling update_fee_type API
4241 
4242         IF (c_fee_rbk_rec.fee_type = 'PASSTHROUGH') THEN
4243            sync_passthru_party(x_return_status => x_return_status);
4244            IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4245              RAISE sync_fee_failed;
4246            END IF;
4247         ELSE
4248            -- Sync Fee expense rules for Financed Fee line
4249            -- Also syncing the Misc and Expense Fee lines as part of Contract Rebook Change Control Enhancement
4250            IF (c_fee_rbk_rec.fee_type IN ('FINANCED','MISCELLANEOUS','EXPENSE')) THEN
4251               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4252                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Sync Financed Fee - Expense Rule');
4253               END IF;
4254               -- get original Expense rule LAFREQ
4255               get_rule_info(
4256                     x_return_status => x_return_status,
4257                     p_rebook_chr_id => p_orig_chr_id,
4258                     p_rebook_cle_id => l_orig_fee_top_line_id,
4259                     p_rgd_code      => 'LAFEXP',
4260                     p_rule_code     => 'LAFREQ',
4261                     x_rulv_rec      => x_rulv_freq_rec,
4262                     x_rule_count    => x_rule_count
4263                    );
4264 
4265               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4266                  RAISE sync_fee_failed;
4267               END IF;
4268               l_orig_freq_rule_id := x_rulv_freq_rec.id;
4269               l_orig_freq_rgp_id  := x_rulv_freq_rec.rgp_id;
4270               l_orig_freq         := x_rulv_freq_rec.object1_id1;
4271 
4272               -- get rebook Expense rule LAFREQ
4273               get_rule_info(
4274                     x_return_status => x_return_status,
4275                     p_rebook_chr_id => p_rebook_chr_id,
4276                     p_rebook_cle_id => c_fee_rbk_rec.id,
4277                     p_rgd_code      => 'LAFEXP',
4278                     p_rule_code     => 'LAFREQ',
4279                     x_rulv_rec      => x_rulv_freq_rec,
4280                     x_rule_count    => x_rule_count
4281                    );
4282               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4283                  RAISE sync_fee_failed;
4284               END IF;
4285 
4286               IF (l_orig_freq <> x_rulv_freq_rec.object1_id1) THEN
4287                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4288                                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update Freq to: '||x_rulv_freq_rec.object1_id1);
4289                  END IF;
4290                  x_rulv_freq_rec.id     := l_orig_freq_rule_id;
4291                  x_rulv_freq_rec.rgp_id := l_orig_freq_rgp_id;
4292                  x_rulv_freq_rec.dnz_chr_id  := p_orig_chr_id;
4293                  okl_rule_pub.update_rule(
4294                                           p_api_version   => 1.0,
4295                                           p_init_msg_list => OKL_API.G_FALSE,
4296                                           x_return_status => x_return_status,
4297                                           x_msg_count     => x_msg_count,
4298                                           x_msg_data      => x_msg_data,
4299                                           p_rulv_rec      => x_rulv_freq_rec,
4300                                           x_rulv_rec      => x_rulv_rec
4301                                          );
4302 
4303                   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4304                                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update LAFREQ : '||x_return_status);
4305                   END IF;
4306 
4307                   IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
4308                       x_return_status := Okc_Api.G_RET_STS_ERROR;
4309                       RAISE sync_fee_failed;
4310                   END IF;
4311               END IF;
4312 
4313               -- get original Expense rule LAFEXP
4314               get_rule_info(
4315                     x_return_status => x_return_status,
4316                     p_rebook_chr_id => p_orig_chr_id,
4317                     p_rebook_cle_id => l_orig_fee_top_line_id,
4318                     p_rgd_code      => 'LAFEXP',
4319                     p_rule_code     => 'LAFEXP',
4320                     x_rulv_rec      => x_rulv_exp_rec,
4321                     x_rule_count    => x_rule_count
4322                    );
4323 
4324               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4325                  RAISE sync_fee_failed;
4326               END IF;
4327               l_orig_exp_rule_id  := x_rulv_exp_rec.id;
4328               l_orig_exp_rgp_id   := x_rulv_exp_rec.rgp_id;
4329               l_orig_exp_period   := x_rulv_exp_rec.rule_information1;
4330               l_orig_exp_amount   := x_rulv_exp_rec.rule_information2;
4331 
4332               -- get rebook Expense rule LAFEXP
4333               get_rule_info(
4334                     x_return_status => x_return_status,
4335                     p_rebook_chr_id => p_rebook_chr_id,
4336                     p_rebook_cle_id => c_fee_rbk_rec.id,
4337                     p_rgd_code      => 'LAFEXP',
4338                     p_rule_code     => 'LAFEXP',
4339                     x_rulv_rec      => x_rulv_exp_rec,
4340                     x_rule_count    => x_rule_count
4341                    );
4342               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4343                  RAISE sync_fee_failed;
4344               END IF;
4345 
4346               IF (l_orig_exp_period <> x_rulv_exp_rec.rule_information1
4347                   OR
4348                   l_orig_exp_amount <> x_rulv_exp_rec.rule_information2) THEN
4349                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4350                                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update period to: '||x_rulv_exp_rec.rule_information1);
4351                    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update amount to: '||x_rulv_exp_rec.rule_information2);
4352                  END IF;
4353                  x_rulv_exp_rec.id     := l_orig_exp_rule_id;
4354                  x_rulv_exp_rec.rgp_id := l_orig_exp_rgp_id;
4355                  x_rulv_exp_rec.dnz_chr_id  := p_orig_chr_id;
4356                  okl_rule_pub.update_rule(
4357                                           p_api_version   => 1.0,
4358                                           p_init_msg_list => OKL_API.G_FALSE,
4359                                           x_return_status => x_return_status,
4360                                           x_msg_count     => x_msg_count,
4361                                           x_msg_data      => x_msg_data,
4362                                           p_rulv_rec      => x_rulv_exp_rec,
4363                                           x_rulv_rec      => x_rulv_rec
4364                                          );
4365                   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4366                                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update LAFEXP : '||x_return_status);
4367                   END IF;
4368 
4369                   IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
4370                       x_return_status := Okc_Api.G_RET_STS_ERROR;
4371                       RAISE sync_fee_failed;
4372                   END IF;
4373               END IF;
4374            END IF;
4375            -- Check for party
4376            FOR rbk_fee_party_rec IN rbk_fee_party_csr(c_fee_rbk_rec.id,
4377                                                       c_fee_rbk_rec.dnz_chr_id)
4378            LOOP
4379               l_orig_party_id := NULL;
4380               OPEN orig_fee_party_csr(l_orig_fee_top_line_id, p_orig_chr_id);
4381               FETCH orig_fee_party_csr INTO l_orig_party_id, l_orig_object1_id1;
4382 
4383               CLOSE orig_fee_party_csr;
4384 
4385               IF (l_orig_party_id IS NOT NULL) THEN
4386                  IF (l_orig_object1_id1 <> rbk_fee_party_rec.object1_id1) THEN
4387                     -- Update
4388                     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4389                                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update Party...');
4390                     END IF;
4391                     l_cplv_rec.id                := l_orig_party_id;
4392                     l_cplv_rec.object1_id1       := rbk_fee_party_rec.object1_id1;
4393 
4394                     --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
4395                     --              to update records in tables
4396                     --              okc_k_party_roles_b and okl_k_party_roles
4397                     /*
4398                     okl_okc_migration_pvt.update_k_party_role(
4399                 p_api_version	=> 1.0,
4400                 p_init_msg_list	=> OKL_API.G_FALSE,
4401                 x_return_status 	=> x_return_status,
4402                 x_msg_count     	=> x_msg_count,
4403                 x_msg_data      	=> x_msg_data,
4404                 p_cplv_rec		=> l_cplv_rec,
4405                 x_cplv_rec		=> x_cplv_rec);
4406                     */
4407 
4408                     l_kplv_rec.id := l_cplv_rec.id;
4409                     okl_k_party_roles_pvt.update_k_party_role(
4410                       p_api_version          => 1.0,
4411                       p_init_msg_list        => OKL_API.G_FALSE,
4412                       x_return_status        => x_return_status,
4413                       x_msg_count            => x_msg_count,
4414                       x_msg_data             => x_msg_data,
4415                       p_cplv_rec             => l_cplv_rec,
4416                       x_cplv_rec             => x_cplv_rec,
4417                       p_kplv_rec             => l_kplv_rec,
4418                       x_kplv_rec             => x_kplv_rec );
4419 
4420                      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4421                        RAISE sync_fee_failed;
4422                      END IF;
4423                  END IF;
4424               ELSE -- new party
4425                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4426                                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Create Party...');
4427                  END IF;
4428                  -- Create party for orig fee
4429                  l_cplv_rec.dnz_chr_id        := p_orig_chr_id;
4430                  l_cplv_rec.cle_id            := l_orig_fee_top_line_id;
4431                  l_cplv_rec.object1_id1       := rbk_fee_party_rec.object1_id1;
4432                  l_cplv_rec.object1_id2       := rbk_fee_party_rec.object1_id2;
4433                  l_cplv_rec.jtot_object1_code := 'OKX_VENDOR';
4434                  l_cplv_rec.rle_code          := 'OKL_VENDOR';
4435 
4436                  --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
4437                  --              to create records in tables
4438                  --              okc_k_party_roles_b and okl_k_party_roles
4439                  /*
4440                  okl_okc_migration_pvt.create_k_party_role(
4441              p_api_version	=> 1.0,
4442              p_init_msg_list	=> OKL_API.G_FALSE,
4443              x_return_status 	=> x_return_status,
4444              x_msg_count     	=> x_msg_count,
4445              x_msg_data      	=> x_msg_data,
4446              p_cplv_rec		=> l_cplv_rec,
4447              x_cplv_rec		=> x_cplv_rec);
4448                 */
4449 
4450                  okl_k_party_roles_pvt.create_k_party_role(
4451                    p_api_version          => 1.0,
4452                    p_init_msg_list        => OKL_API.G_FALSE,
4453                    x_return_status        => x_return_status,
4454                    x_msg_count            => x_msg_count,
4455                    x_msg_data             => x_msg_data,
4456                    p_cplv_rec             => l_cplv_rec,
4457                    x_cplv_rec             => x_cplv_rec,
4458                    p_kplv_rec             => l_kplv_rec,
4459                    x_kplv_rec             => x_kplv_rec);
4460 
4461                   IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4462                     RAISE sync_fee_failed;
4463                   END IF;
4464               END IF;
4465           END LOOP; -- party
4466         END IF; -- passthru
4467 
4468         -- Linked Fee Asset
4469         upd := 0; -- update line count
4470         l_u_line_item_tbl.DELETE;
4471 
4472         ins := 0; -- insert line count
4473         l_c_line_item_tbl.DELETE;
4474         --Bug# 4899328
4475         l_cov_ast_tbl.DELETE;
4476 
4477         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4478                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update link asset for: '||c_fee_rbk_rec.id);
4479         END IF;
4480         FOR rbk_fee_asset_rec IN rbk_fee_asset_csr (c_fee_rbk_rec.id,
4481                                                     c_fee_rbk_rec.dnz_chr_id)
4482         LOOP
4483 
4484            IF (rbk_fee_asset_rec.orig_system_id1 IS NOT NULL) THEN -- update the line
4485               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4486                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'--->Update Rebook Asset: '||rbk_fee_asset_rec.line_id);
4487               END IF;
4488               FOR orig_fee_asset_rec IN orig_fee_asset_csr(rbk_fee_asset_rec.orig_system_id1,
4489                                                            p_orig_chr_id)
4490               LOOP
4491                 -- Update existing line
4492                 upd := upd + 1;
4493                 l_u_line_item_tbl(upd).parent_cle_id  := l_orig_fee_top_line_id;
4494                 l_u_line_item_tbl(upd).cle_id         := orig_fee_asset_rec.line_id;
4495                 l_u_line_item_tbl(upd).chr_id         := p_orig_chr_id;
4496                 l_u_line_item_tbl(upd).item_id        := orig_fee_asset_rec.item_id;
4497                 l_u_line_item_tbl(upd).item_id1       := rbk_fee_asset_rec.object1_id1;
4498                 l_u_line_item_tbl(upd).item_id2       := rbk_fee_asset_rec.object1_id2;
4499                 l_u_line_item_tbl(upd).item_object1_code  := rbk_fee_asset_rec.jtot_object1_code;
4500                 l_u_line_item_tbl(upd).name           := rbk_fee_asset_rec.name;
4501                 l_u_line_item_tbl(upd).item_description := rbk_fee_asset_rec.item_description;
4502                 l_u_line_item_tbl(upd).capital_amount := NVL(rbk_fee_asset_rec.capital_amount,
4503                                                              rbk_fee_asset_rec.amount) ;
4504 
4505                 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4506                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update record: '||upd||': '||l_u_line_item_tbl(upd).name);
4507                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Capital amt: '||l_u_line_item_tbl(upd).capital_amount);
4508                 END IF;
4509               END LOOP;
4510            ELSE
4511               -- Create new asset association line
4512               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4513                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'--->Insert Rebook Asset: '||rbk_fee_asset_rec.line_id);
4514               END IF;
4515               ins := ins + 1;
4516               --Bug# 4899328
4517               l_cov_ast_tbl(ins).id := rbk_fee_asset_rec.line_id;
4518 
4519               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4520                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Insert record: '||ins||': '||rbk_fee_asset_rec.name);
4521                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Capital amt: '||NVL(rbk_fee_asset_rec.capital_amount,rbk_fee_asset_rec.amount));
4522               END IF;
4523 
4524               /*
4525               l_c_line_item_tbl(ins).parent_cle_id  := l_orig_fee_top_line_id;
4526               l_c_line_item_tbl(ins).chr_id         := p_orig_chr_id;
4527               l_c_line_item_tbl(ins).item_id1       := rbk_fee_asset_rec.object1_id1;
4528               l_c_line_item_tbl(ins).item_id2       := rbk_fee_asset_rec.object1_id2;
4529               l_c_line_item_tbl(ins).item_object1_code := rbk_fee_asset_rec.jtot_object1_code;
4530               l_c_line_item_tbl(ins).name           := rbk_fee_asset_rec.name;
4531               l_c_line_item_tbl(ins).item_description := rbk_fee_asset_rec.item_description;
4532               l_c_line_item_tbl(ins).capital_amount := NVL(rbk_fee_asset_rec.capital_amount,
4533                                                              rbk_fee_asset_rec.amount) ;
4534 
4535               debug_message('Insert record: '||ins||': '||l_c_line_item_tbl(ins).name);
4536               debug_message('Capital amt: '||l_c_line_item_tbl(ins).capital_amount);
4537               */
4538               --Bug# 4899328
4539 
4540            END IF;
4541         END LOOP; -- subline
4542 
4543         IF (l_u_line_item_tbl.COUNT > 0) THEN
4544            okl_contract_line_item_pvt.update_contract_line_item(
4545                   p_api_version     => 1.0,
4546                   p_init_msg_list   => OKL_API.G_FALSE,
4547                   x_return_status   => x_return_status,
4548                   x_msg_count       => x_msg_count,
4549                   x_msg_data        => x_msg_data,
4550                   p_line_item_tbl   => l_u_line_item_tbl,
4551                   x_line_item_tbl   => x_u_line_item_tbl
4552                  );
4553            IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4554               RAISE sync_fee_failed;
4555            END IF;
4556         END IF;
4557         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4558                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Link Fee asset updated; '||l_u_line_item_tbl.COUNT);
4559         END IF;
4560 
4561         --Bug# 4899328
4562         -- Change call from okl_contract_line_item_pvt.create_contract_line_item to
4563         -- okl_copy_asset_pub.copy_all_lines in order to copy Payments associated to
4564         -- new covered asset lines.
4565         IF (l_cov_ast_tbl.COUNT > 0) THEN
4566           okl_copy_asset_pub.copy_all_lines(
4567                                              p_api_version        => 1.0,
4568                                              p_init_msg_list      => OKC_API.G_FALSE,
4569                                              x_return_status      => x_return_status,
4570                                              x_msg_count          => x_msg_count,
4571                                              x_msg_data           => x_msg_data,
4572                                              P_from_cle_id_tbl    => l_cov_ast_tbl,
4573                                              p_to_chr_id          => NULL,
4574                                              p_to_cle_id          => l_orig_fee_top_line_id,
4575                                              p_to_template_yn     => 'N',
4576                                              p_copy_reference     => 'Y',
4577                                              p_copy_line_party_yn => 'Y',
4578                                              p_renew_ref_yn       => 'N',
4579                                              p_trans_type         => 'CRB',
4580                                              x_cle_id_tbl         => lx_cov_ast_tbl
4581                                             );
4582           IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4583             RAISE sync_fee_failed;
4584           END IF;
4585         END IF;
4586 
4587         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4588                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Link Fee asset inserted; '||l_cov_ast_tbl.COUNT);
4589         END IF;
4590 
4591 
4592         /*
4593         IF (l_c_line_item_tbl.COUNT > 0) THEN
4594            okl_contract_line_item_pvt.create_contract_line_item(
4595                   p_api_version     => 1.0,
4596                   p_init_msg_list   => OKL_API.G_FALSE,
4597                   x_return_status   => x_return_status,
4598                   x_msg_count       => x_msg_count,
4599                   x_msg_data        => x_msg_data,
4600                   p_line_item_tbl   => l_c_line_item_tbl,
4601                   x_line_item_tbl   => x_c_line_item_tbl
4602                  );
4603            IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4604               RAISE sync_fee_failed;
4605            END IF;
4606         END IF;
4607         debug_message('Link Fee asset inserted; '||l_c_line_item_tbl.COUNT);
4608         */
4609         --Bug# 4899328
4610 
4611       END IF;
4612       CLOSE c_fee_orig_csr;
4613     END LOOP; -- c_fee_rbk_rec
4614     CLOSE c_fee_rbk_csr;
4615 
4616     -- OKL.H Projects changes ---
4617   EXCEPTION
4618     WHEN sync_fee_failed THEN
4619        x_return_status := OKL_API.G_RET_STS_ERROR;
4620 
4621     when OKL_API.G_EXCEPTION_ERROR then
4622        x_return_status := 'OKC_API.G_RET_STS_ERROR';
4623 
4624     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4625        x_return_status := 'OKC_API.G_RET_STS_UNEXP_ERROR';
4626 
4627   END sync_fee_line;
4628 
4629 ------------------------------------------------------------------------------
4630 -- PROCEDURE sync_line_values
4631 --
4632 --  This procedure synchronizes Rebook and Original Contract Line Values
4633 --  Sync 1. Adjust Residual Value
4634 --       2. Adjust Cost
4635 --
4636 -- Calls:
4637 -- Called By:
4638 ------------------------------------------------------------------------------
4639 
4640   PROCEDURE sync_line_values(
4641                              x_return_status OUT NOCOPY VARCHAR2,
4642                              x_msg_count     OUT NOCOPY NUMBER,
4643                              x_msg_data      OUT NOCOPY VARCHAR2,
4644                              p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE,
4645                              p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE,
4646                              x_new_klev_tbl  OUT NOCOPY klev_tbl_type,
4647                              x_new_clev_tbl  OUT NOCOPY clev_tbl_type
4648                             ) IS
4649 
4650   l_proc_name   VARCHAR2(35)    := 'SYNC_LINE_VALUES';
4651   sync_failed   EXCEPTION;
4652 
4653   CURSOR rebook_line_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4654   SELECT *
4655   FROM   okl_k_lines_full_v
4656   WHERE  dnz_chr_id = p_chr_id
4657   AND    orig_system_id1 IS NOT NULL;
4658 
4659   CURSOR rebook_new_line_csr(p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4660   SELECT line.*
4661   FROM   okl_k_lines_full_v line,
4662          okc_line_styles_v  style
4663   WHERE  line.dnz_chr_id = p_chr_id
4664   AND    line.lse_id     = style.id
4665   AND    style.lty_code  = 'FREE_FORM1'
4666   AND    orig_system_id1 IS NULL;
4667 
4668   --Bug# 5207066
4669   CURSOR rebook_new_ib_line_csr(p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4670   SELECT line.*,
4671          parent_cle.orig_system_id1 parent_orig_system_id1,
4672          parent_cle.start_date parent_orig_start_date
4673   FROM   okl_k_lines_full_v line,
4674          okc_line_styles_v  style,
4675          okc_k_lines_b parent_cle
4676   WHERE  line.dnz_chr_id = p_chr_id
4677   AND    line.lse_id     = style.id
4678   AND    style.lty_code  = 'FREE_FORM2'
4679   AND    line.orig_system_id1 IS NULL
4680   AND    parent_cle.orig_system_id1 IS NOT NULL
4681   AND    line.cle_id = parent_cle.id
4682   AND    line.dnz_chr_id = parent_cle.dnz_chr_id;
4683 
4684   CURSOR del_rgp_csr(p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4685   SELECT id
4686   FROM   okc_rule_groups_v
4687   WHERE  dnz_chr_id = p_chr_id
4688   AND    rgd_code   = 'LALEVL';
4689 
4690   CURSOR rule_csr(p_rgp_id NUMBER) IS
4691   SELECT id
4692   FROM   okc_rules_v
4693   WHERE  rgp_id = p_rgp_id;
4694 
4695   CURSOR rebook_new_all_line_csr (p_top_line_id NUMBER) IS
4696   SELECT id,
4697          start_date
4698   FROM 	 okc_k_lines_b
4699   CONNECT BY  PRIOR id = cle_id
4700   START WITH  id = p_top_line_id;
4701   --Bug# 5362977 start
4702   --Bug# 5207066 - bug start
4703    CURSOR items_csr(p_cle_id NUMBER) IS
4704    SELECT cim.id,
4705           cim.cle_id,
4706           cim.number_of_items,
4707           cim.object1_id1,
4708 	  cim.object1_id2,
4709 	  cim.jtot_object1_code,
4710 	  cle.lse_id
4711    FROM   okc_k_items cim,
4712            okc_k_lines_b cle
4713    WHERE  cim.cle_id = cle.id
4714    AND    cle.id = p_cle_id;
4715    l_items_rec     items_csr%ROWTYPE;
4716    l_items_old_rec items_csr%ROWTYPE;
4717 
4718      l_cim_rec                      okl_okc_migration_pvt.cimv_rec_type;
4719      x_cim_rec                      okl_okc_migration_pvt.cimv_rec_type;
4720      --  bug 5121256 end
4721 
4722 
4723 
4724 
4725   CURSOR party_roles_csr(p_cle_id IN NUMBER,
4726                        p_chr_id IN NUMBER) IS
4727    SELECT   cpl.id,
4728             cpl.object1_id1,
4729             cpl.object1_id2,
4730             cpl.jtot_object1_code,
4731             cpl.rle_code
4732      FROM   okc_k_party_roles_b cpl
4733      WHERE  cpl.cle_id = p_cle_id
4734      AND    cpl.dnz_chr_id = p_chr_id
4735      AND    cpl.jtot_object1_code = 'OKX_VENDOR';
4736   l_item_cle_id_old okc_k_items.cle_id%type;
4737   l_item_id_old     okc_k_items.id%type;
4738 
4739   l_party_roles_new_rec party_roles_csr%ROWTYPE;
4740 l_party_roles_old_rec party_roles_csr%ROWTYPE;
4741 
4742 l_cplv_rec      cplv_rec_type;
4743 x_cplv_rec      cplv_rec_type;
4744 --  bug 5121256 end
4745 
4746 l_cplv_temp_rec cplv_rec_type;
4747 l_cim_temp_rec  okl_okc_migration_pvt.cimv_rec_type;
4748 
4749 x_cpl_id        NUMBER;
4750 --Bug# 5362977 end
4751 
4752   --Bug# 5207066 end
4753 
4754   l_clev_tbl      clev_tbl_type;
4755   l_klev_tbl      klev_tbl_type;
4756 
4757   x_clev_tbl      clev_tbl_type;
4758   x_klev_tbl      klev_tbl_type;
4759 
4760   l_new_klev_tbl  klev_tbl_type;
4761   lx_new_klev_tbl klev_tbl_type;
4762   x_cle_id        OKC_K_LINES_V.ID%TYPE;
4763   i               NUMBER := 0;
4764   j               NUMBER := 0;
4765   k               NUMBER := 0;
4766   m               NUMBER := 0;
4767   l_tran_date     DATE;
4768 
4769   l_rulv_tbl      rulv_tbl_type;
4770   l_r_count NUMBER;
4771 
4772   --Bug# 5207066
4773   l_temp_klev_tbl  klev_tbl_type;
4774 
4775   BEGIN
4776     IF (G_DEBUG_ENABLED = 'Y') THEN
4777       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4778     END IF;
4779     x_return_status := OKC_API.G_RET_STS_SUCCESS;
4780     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4781           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
4782     END IF;
4783 
4784 
4785     -- Delete Line level existing SLH, SLL from Original Contract
4786 
4787     i := 1;
4788     FOR del_rgp_rec IN del_rgp_csr(p_orig_chr_id)
4789     LOOP
4790        FOR rule_rec IN rule_csr(del_rgp_rec.id)
4791        LOOP
4792           l_rulv_tbl(i).id := rule_rec.id;
4793           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4794                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Rule Deleted: '||l_rulv_tbl(i).id);
4795           END IF;
4796           i := i+ 1;
4797        END LOOP;
4798     END LOOP;
4799 
4800     okl_rule_pub.delete_rule(
4801                              p_api_version    => 1.0,
4802                              p_init_msg_list  => OKC_API.G_FALSE,
4803                              x_return_status  => x_return_status,
4804                              x_msg_count      => x_msg_count,
4805                              x_msg_data       => x_msg_data,
4806                              p_rulv_tbl       => l_rulv_tbl
4807                             );
4808     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4809       RAISE sync_failed;
4810     END IF;
4811 
4812     i := 1;
4813     FOR rebook_line_rec IN rebook_line_csr(p_rebook_chr_id)
4814     LOOP
4815 
4816        IF (rebook_line_rec.orig_system_id1 IS NOT NULL) THEN -- Old Line, Update
4817 
4818           l_clev_tbl(i).id                    := rebook_line_rec.orig_system_id1;
4819           l_klev_tbl(i).id                    := rebook_line_rec.orig_system_id1;
4820           l_klev_tbl(i).residual_percentage   := rebook_line_rec.residual_percentage;
4821           l_klev_tbl(i).residual_value        := rebook_line_rec.residual_value;
4822           l_klev_tbl(i).residual_grnty_amount := rebook_line_rec.residual_grnty_amount;
4823           l_klev_tbl(i).oec                   := rebook_line_rec.oec;
4824           l_klev_tbl(i).capital_amount        := rebook_line_rec.capital_amount;
4825 
4826           -- sjalasut, added for rebook change control enhancement. START
4827           l_klev_tbl(i).tradein_amount := rebook_line_rec.tradein_amount;
4828           -- sjalasut, added for rebook change control enhancement. END
4829 
4830           --Bug# 4558486
4831           l_klev_tbl(i).attribute_category    := rebook_line_rec.okl_attribute_category;
4832           l_klev_tbl(i).attribute1            := rebook_line_rec.okl_attribute1;
4833           l_klev_tbl(i).attribute2            := rebook_line_rec.okl_attribute2;
4834           l_klev_tbl(i).attribute3            := rebook_line_rec.okl_attribute3;
4835           l_klev_tbl(i).attribute4            := rebook_line_rec.okl_attribute4;
4836           l_klev_tbl(i).attribute5            := rebook_line_rec.okl_attribute5;
4837           l_klev_tbl(i).attribute6            := rebook_line_rec.okl_attribute6;
4838           l_klev_tbl(i).attribute7            := rebook_line_rec.okl_attribute7;
4839           l_klev_tbl(i).attribute8            := rebook_line_rec.okl_attribute8;
4840           l_klev_tbl(i).attribute9            := rebook_line_rec.okl_attribute9;
4841           l_klev_tbl(i).attribute10           := rebook_line_rec.okl_attribute10;
4842           l_klev_tbl(i).attribute11           := rebook_line_rec.okl_attribute11;
4843           l_klev_tbl(i).attribute12           := rebook_line_rec.okl_attribute12;
4844           l_klev_tbl(i).attribute13           := rebook_line_rec.okl_attribute13;
4845           l_klev_tbl(i).attribute14           := rebook_line_rec.okl_attribute14;
4846           l_klev_tbl(i).attribute15           := rebook_line_rec.okl_attribute15;
4847           --Bug# 4558486
4848 
4849           l_clev_tbl(i).price_unit            := rebook_line_rec.price_unit;
4850 
4851 	   --akrangan Bug# 5362977 start
4852              l_klev_tbl(i).year_built            := rebook_line_rec.year_built;
4853              l_clev_tbl(i).item_description      := rebook_line_rec.item_description;
4854            --akrangan Bug# 5362977 end
4855            --akrangan Bug# 5362977 start
4856 
4857           --Bug# 5207066 -- start
4858 
4859 
4860                       l_items_rec := NULL;
4861              OPEN  items_csr(rebook_line_rec.id); -- rebook_line_rec.id
4862              FETCH items_csr INTO l_items_rec;
4863              CLOSE items_csr;
4864 
4865              l_items_old_rec := NULL;
4866              OPEN  items_csr(l_clev_tbl(i).id); -- original contract
4867              FETCH items_csr INTO l_items_old_rec;
4868              CLOSE items_csr;
4869 
4870              l_cim_rec := l_cim_temp_rec;
4871              IF l_items_old_rec.id IS NOT NULL AND
4872                (l_items_old_rec.number_of_items IS NOT NULL OR
4873                 l_items_rec.number_of_items IS NOT NULL) THEN
4874 
4875                l_cim_rec.id := l_items_old_rec.id;
4876                l_cim_rec.cle_id := l_items_old_rec.cle_id;
4877                l_cim_rec.number_of_items := l_items_rec.number_of_items;
4878 
4879                IF l_items_old_rec.lse_id = 34 THEN -- Model Line
4880 
4881                  -- Sync Inventory Item
4882                  l_cim_rec.object1_id1 := l_items_rec.object1_id1;
4883                  l_cim_rec.object1_id2 := l_items_rec.object1_id2;
4884                  l_cim_rec.jtot_object1_code := l_items_rec.jtot_object1_code;
4885 
4886                  --Sync Supplier Invoice
4887                  l_party_roles_new_rec := NULL;
4888                  open party_roles_csr(p_cle_id => rebook_line_rec.id,
4889                                       p_chr_id => p_rebook_chr_id);
4890                  fetch party_roles_csr into l_party_roles_new_rec;
4891                  close party_roles_csr;
4892 
4893                  if l_party_roles_new_rec.id is not null then
4894 
4895                    l_party_roles_old_rec := NULL;
4896                    open party_roles_csr(p_cle_id => l_clev_tbl(i).id,
4897                                         p_chr_id => p_orig_chr_id);
4898                    fetch party_roles_csr into l_party_roles_old_rec;
4899                    close party_roles_csr;
4900 
4901                    if l_party_roles_old_rec.id is null then
4902                    -- Supplier Invoice added during rebook
4903 
4904 
4905          okl_copy_contract_pub.copy_party_roles(
4906                        p_api_version     => 1.0,
4907                        p_init_msg_list   => OKL_API.G_FALSE,
4908                        x_return_status   => x_return_status,
4909                        x_msg_count       => x_msg_count,
4910                        x_msg_data        => x_msg_data,
4911                        p_cpl_id          => l_party_roles_new_rec.id,
4912                        p_cle_id          => l_clev_tbl(i).id,
4913                        p_chr_id          => NULL,
4914                        p_rle_code        => l_party_roles_new_rec.rle_code,
4915                        x_cpl_id            => x_cpl_id
4916                      );
4917 		IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4918 		 okl_debug_pub.logmessage('okl_copy_contract_pub.copy_party_roles sync_failed ');
4919 		 RAISE sync_failed;
4920 		END IF;
4921 		elsif (l_party_roles_old_rec.object1_id1 <> l_party_roles_new_rec.object1_id1) then
4922                    -- Supplier Invoice updated during rebook
4923 
4924 
4925 
4926             l_cplv_rec := l_cplv_temp_rec;
4927 
4928                      l_cplv_rec.id := l_party_roles_old_rec.id;
4929                      l_cplv_rec.object1_id1 := l_party_roles_new_rec.object1_id1;
4930                      l_cplv_rec.object1_id2 := l_party_roles_new_rec.object1_id2;
4931                      l_cplv_rec.jtot_object1_code := l_party_roles_new_rec.jtot_object1_code;
4932                      l_cplv_rec.rle_code := l_party_roles_new_rec.rle_code;
4933 
4934                      okl_okc_migration_pvt.update_k_party_role(
4935                        p_api_version   => 1.0,
4936                        p_init_msg_list => OKL_API.G_FALSE,
4937                        x_return_status => x_return_status,
4938                        x_msg_count     => x_msg_count,
4939                        x_msg_data      => x_msg_data,
4940                        p_cplv_rec      => l_cplv_rec,
4941                        x_cplv_rec      => x_cplv_rec);
4942 
4943                      -- check return status
4944                      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4945                        okl_debug_pub.logmessage(' okl_okc_migration_pvt.update_contract_item sync_failed ');
4946                        RAISE sync_failed;
4947                      END IF;
4948 
4949                    end if;
4950                  end if;
4951                END IF;
4952 
4953                okl_okc_migration_pvt.update_contract_item(
4954 
4955                    p_api_version                  => 1.0,
4956                    p_init_msg_list                => okc_api.g_false,
4957                    x_return_status                =>x_return_status,
4958                    x_msg_count                    =>x_msg_count,
4959                    x_msg_data                     =>x_msg_data,
4960                    p_cimv_rec                     =>l_cim_rec,
4961                    x_cimv_rec                     =>x_cim_rec);
4962 
4963 
4964             IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4965                IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4966                                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,' okc_cim_pvt.update_row sync_failed= ');
4967                END IF;
4968                RAISE sync_failed;
4969             END IF;
4970           END IF;
4971           --Bug# 5207066 -- End
4972           --akrangan Bug# 5362977 end
4973           --
4974           -- Subsidy changes, removed later 09/26/2003
4975           --
4976           --l_klev_tbl(i).subsidized_oec        := rebook_line_rec.subsidized_oec;
4977           --l_klev_tbl(i).subsidized_cap_amount := rebook_line_rec.subsidized_cap_amount;
4978           --
4979           -- End Subsidy change
4980           --
4981 
4982           -- dedey
4983           x_new_clev_tbl(i).id                := rebook_line_rec.orig_system_id1;
4984           x_new_klev_tbl(i).id                := rebook_line_rec.orig_system_id1;
4985           x_new_clev_tbl(i).start_date        := rebook_line_rec.start_date;
4986 
4987           i := i+ 1;
4988 
4989        END IF;
4990     END LOOP;
4991 
4992     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4993           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig: '||p_orig_chr_id);
4994     END IF;
4995 
4996     okl_contract_pub.update_contract_line(
4997                                           p_api_version     => 1.0,
4998                                           p_init_msg_list   => OKC_API.G_FALSE,
4999                                           x_return_status   => x_return_status,
5000                                           x_msg_count       => x_msg_count,
5001                                           x_msg_data        => x_msg_data,
5002                                           p_clev_tbl        => l_clev_tbl,
5003                                           p_klev_tbl        => l_klev_tbl,
5004                                           x_clev_tbl        => x_clev_tbl,
5005                                           x_klev_tbl        => x_klev_tbl
5006                                          );
5007     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5008       RAISE sync_failed;
5009     END IF;
5010 
5011     j := 1;
5012     FOR rebook_new_line_rec IN rebook_new_line_csr(p_rebook_chr_id)
5013     LOOP
5014        l_new_klev_tbl(j).id := rebook_new_line_rec.id;
5015        l_tran_date          := rebook_new_line_rec.start_date; --Used later to update line
5016 
5017        j := j + 1;
5018     END LOOP;
5019 
5020     IF (j > 1) THEN -- New Asset Lines came in
5021        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5022                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'new line id: '||l_new_klev_tbl(1).id);
5023        END IF;
5024        okl_copy_asset_pub.copy_all_lines(
5025                                          p_api_version        => 1.0,
5026                                          p_init_msg_list      => OKL_API.G_FALSE,
5027                                          x_return_status      => x_return_status,
5028                                          x_msg_count          => x_msg_count,
5029                                          x_msg_data           => x_msg_data,
5030                                          p_from_cle_id_tbl    => l_new_klev_tbl,
5031                                          p_to_cle_id          => NULL,
5032                                          p_to_chr_id          => p_orig_chr_id,
5033                                          p_to_template_yn     => 'N',
5034                                          p_copy_reference     => 'COPY',
5035                                          p_copy_line_party_yn => 'Y',
5036                                          p_renew_ref_yn       => 'N',
5037                                          p_trans_type         => 'CRB',
5038                                          x_cle_id_tbl         => lx_new_klev_tbl
5039                                         );
5040 
5041        IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5042          RAISE sync_failed;
5043        END IF;
5044 
5045        --
5046        -- Get New Lines id (including sub lines) and
5047        -- populate tables with transaction date as start date
5048        -- and sts_code as BOOKED
5049        --
5050        -- This table of record is used to update new lines later
5051        --
5052        k := 1;
5053        FOR k IN 1..lx_new_klev_tbl.COUNT
5054        LOOP
5055        --m := 1; -- dedey
5056        m := x_new_clev_tbl.LAST + 1;
5057 
5058        FOR rebook_new_all_line_rec IN rebook_new_all_line_csr(lx_new_klev_tbl(k).id)
5059 	 LOOP
5060              --INSERT INTO dd_dummy VALUES ('==> New line id : '||rebook_new_all_line_rec.id);
5061            x_new_clev_tbl(m).id         := rebook_new_all_line_rec.id;
5062            x_new_klev_tbl(m).id         := rebook_new_all_line_rec.id;
5063            x_new_clev_tbl(m).start_date := l_tran_date;
5064 	   x_new_clev_tbl(m).sts_code   := 'BOOKED';
5065 	   m := m + 1;
5066          END LOOP;
5067        END LOOP;
5068 
5069     END IF;
5070 
5071     --Bug# 5207066: start
5072     j := 1;
5073     FOR rebook_new_ib_line_rec IN rebook_new_ib_line_csr(p_rebook_chr_id)
5074     LOOP
5075 
5076        l_new_klev_tbl := l_temp_klev_tbl;
5077 
5078        l_new_klev_tbl(j).id := rebook_new_ib_line_rec.id;
5079        l_tran_date          := rebook_new_ib_line_rec.parent_orig_start_date; --Used later to update line
5080 
5081        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5082                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'new line id: '||l_new_klev_tbl(1).id);
5083        END IF;
5084        okl_copy_asset_pub.copy_all_lines(
5085                                          p_api_version        => 1.0,
5086                                          p_init_msg_list      => OKL_API.G_FALSE,
5087                                          x_return_status      => x_return_status,
5088                                          x_msg_count          => x_msg_count,
5089                                          x_msg_data           => x_msg_data,
5090                                          p_from_cle_id_tbl    => l_new_klev_tbl,
5091                                          p_to_cle_id          => rebook_new_ib_line_rec.parent_orig_system_id1,
5092                                          p_to_chr_id          => NULL,
5093                                          p_to_template_yn     => 'N',
5094                                          p_copy_reference     => 'COPY',
5095                                          p_copy_line_party_yn => 'Y',
5096                                          p_renew_ref_yn       => 'N',
5097                                          p_trans_type         => 'CRB',
5098                                          x_cle_id_tbl         => lx_new_klev_tbl
5099                                         );
5100 
5101        IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5102          RAISE sync_failed;
5103        END IF;
5104 
5105        --
5106        -- Get New Lines id (including sub lines) and
5107        -- populate tables with transaction date as start date
5108        -- and sts_code as BOOKED
5109        --
5110        -- This table of record is used to update new lines later
5111        --
5112        k := 1;
5113        FOR k IN 1..lx_new_klev_tbl.COUNT
5114        LOOP
5115 
5116          m := x_new_clev_tbl.LAST + 1;
5117 
5118          FOR rebook_new_all_line_rec IN rebook_new_all_line_csr(lx_new_klev_tbl(k).id)
5119 	     LOOP
5120            --INSERT INTO dd_dummy VALUES ('==> New line id : '||rebook_new_all_line_rec.id);
5121            x_new_clev_tbl(m).id         := rebook_new_all_line_rec.id;
5122            x_new_klev_tbl(m).id         := rebook_new_all_line_rec.id;
5123            x_new_clev_tbl(m).start_date := l_tran_date;
5124 	       x_new_clev_tbl(m).sts_code   := 'BOOKED';
5125 	       m := m + 1;
5126          END LOOP;
5127        END LOOP;
5128     END LOOP;
5129     --Bug# 5207066: end
5130 
5131 /*
5132     FOR i IN 1..x_new_clev_tbl.LAST
5133     LOOP
5134        INSERT INTO dd_dummy VALUES (x_new_clev_tbl(i).id||', '||x_new_clev_tbl(i).start_date);
5135     END LOOP;
5136 */
5137 
5138     --
5139     -- Sync FEE line
5140     --
5141     sync_fee_line(
5142                   x_return_status  => x_return_status,
5143                   x_msg_count      => x_msg_count,
5144                   x_msg_data       => x_msg_data,
5145                   p_rebook_chr_id  => p_rebook_chr_id,
5146                   p_orig_chr_id    => p_orig_chr_id
5147                  );
5148 
5149     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5150       RAISE sync_failed;
5151     END IF;
5152 
5153   EXCEPTION
5154     WHEN sync_failed THEN
5155        x_return_status := OKC_API.G_RET_STS_ERROR;
5156   END sync_line_values;
5157 
5158 ------------------------------------------------------------------------------
5159 -- PROCEDURE version_contract
5160 --
5161 --  This procedure versions contract, i.e. making a contract Version History
5162 --
5163 -- Calls:
5164 -- Called By:
5165 ------------------------------------------------------------------------------
5166   PROCEDURE version_contract(
5167                              x_return_status OUT NOCOPY VARCHAR2,
5168                              x_msg_count     OUT NOCOPY NUMBER,
5169                              x_msg_data      OUT NOCOPY VARCHAR2,
5170                              p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE
5171                             ) IS
5172 
5173   l_proc_name VARCHAR2(35) := 'VERSION_CONTRACT';
5174   l_cvmv_rec  cvmv_rec_type;
5175   x_cvmv_rec  cvmv_rec_type;
5176 
5177   BEGIN
5178     IF (G_DEBUG_ENABLED = 'Y') THEN
5179       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5180     END IF;
5181     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5182           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5183     END IF;
5184     x_return_status := OKC_API.G_RET_STS_SUCCESS;
5185 
5186     l_cvmv_rec.chr_id := p_chr_id;
5187     okl_version_pub.version_contract(
5188                                      p_api_version => 1.0,
5189                                      p_init_msg_list => OKC_API.G_FALSE,
5190                                      x_return_status => x_return_status,
5191                                      x_msg_count     => x_msg_count,
5192                                      x_msg_data      => x_msg_data,
5193                                      p_cvmv_rec      => l_cvmv_rec,
5194                                      x_cvmv_rec      => x_cvmv_rec --,
5195                                      --p_commit        => OKC_API.G_FALSE
5196                                     );
5197     RETURN;
5198 
5199   END version_contract;
5200 
5201 ------------------------------------------------------------------------------
5202 -- PROCEDURE check_and_update_date
5203 --
5204 --  This procedure checks for any term and/or start date modification
5205 --  during rebook process and updates original contract header date accordingly.
5206 --  This process has to be called before synchronization.
5207 --
5208 -- Calls:
5209 -- Called By:
5210 ------------------------------------------------------------------------------
5211   PROCEDURE check_and_update_date(
5212                                   x_return_status OUT NOCOPY VARCHAR2,
5213                                   x_msg_count     OUT NOCOPY NUMBER,
5214                                   x_msg_data      OUT NOCOPY VARCHAR2,
5215                                   p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE,
5216                                   p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE
5217                                  ) IS
5218   CURSOR term_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
5219   SELECT term_duration,
5220          start_date
5221   FROM   okl_k_headers_full_v
5222   WHERE  id = p_chr_id;
5223 
5224   CURSOR date_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
5225   SELECT start_date,
5226          end_date,
5227          term_duration
5228   FROM   okl_k_headers_full_v
5229   WHERE  id = p_chr_id;
5230 
5231   l_proc_name VARCHAR2(35) := 'CHECK_AND_UPDATE_DATE';
5232   l_chrv_rec  chrv_rec_type;
5233   x_chrv_rec  chrv_rec_type;
5234   l_khrv_rec  khrv_rec_type;
5235   x_khrv_rec  khrv_rec_type;
5236 
5237   l_orig_term   OKL_K_HEADERS.TERM_DURATION%TYPE;
5238   l_rebook_term OKL_K_HEADERS.TERM_DURATION%TYPE;
5239 
5240   l_orig_start_date   OKC_K_HEADERS_B.START_DATE%TYPE;
5241   l_rebook_start_date OKC_K_HEADERS_B.START_DATE%TYPE;
5242 
5243   l_new_start_date OKC_K_HEADERS_V.START_DATE%TYPE;
5244   l_new_end_date   OKC_K_HEADERS_V.END_DATE%TYPE;
5245   l_new_term       OKL_K_HEADERS.TERM_DURATION%TYPE;
5246 
5247   check_update_failed EXCEPTION;
5248 
5249   BEGIN
5250     IF (G_DEBUG_ENABLED = 'Y') THEN
5251       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5252     END IF;
5253     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5254           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5255     END IF;
5256     x_return_status := OKC_API.G_RET_STS_SUCCESS;
5257 
5258     l_orig_term := NULL;
5259     OPEN term_csr(p_orig_chr_id);
5260     FETCH term_csr INTO l_orig_term,
5261                         l_orig_start_date;
5262     CLOSE term_csr;
5263 
5264     IF l_orig_term IS NULL THEN
5265        RAISE check_update_failed;
5266     END IF;
5267 
5268     l_rebook_term := NULL;
5269     OPEN term_csr(p_rebook_chr_id);
5270     FETCH term_csr INTO l_rebook_term,
5271                         l_rebook_start_date;
5272     CLOSE term_csr;
5273 
5274     IF l_rebook_term IS NULL THEN
5275        RAISE check_update_failed;
5276     END IF;
5277 
5278     IF (l_orig_term <> l_rebook_term
5279         OR
5280         l_orig_start_date <> l_rebook_start_date) THEN
5281 
5282       OPEN date_csr (p_rebook_chr_id);
5283       FETCH date_csr INTO l_new_start_date,
5284                           l_new_end_date,
5285                           l_new_term;
5286       CLOSE date_csr;
5287 
5288       l_chrv_rec.id            := p_orig_chr_id;
5289       l_chrv_rec.start_date    := l_new_start_date;
5290       l_chrv_rec.end_date      := l_new_end_date;
5291 
5292       l_khrv_rec.id            := p_orig_chr_id;
5293       l_khrv_rec.term_duration := l_new_term;
5294 
5295       -- Update contrat header with new start and end date
5296       okl_contract_pub.update_contract_header(
5297                                 p_api_version        => 1.0,
5298                                 p_init_msg_list      => OKL_API.G_FALSE,
5299                                 x_return_status      => x_return_status,
5300                                 x_msg_count          => x_msg_count,
5301                                 x_msg_data           => x_msg_data,
5302                                 p_restricted_update  => OKL_API.G_FALSE,
5303                                 p_chrv_rec           => l_chrv_rec,
5304                                 p_khrv_rec           => l_khrv_rec,
5305                                 x_chrv_rec           => x_chrv_rec,
5306                                 x_khrv_rec           => x_khrv_rec
5307                                );
5308 
5309       IF x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5310   	  RAISE check_update_failed;
5311       ELSIF x_return_status = OKC_API.G_RET_STS_ERROR THEN
5312   	  RAISE check_update_failed;
5313       END IF;
5314 
5315     END IF;
5316 
5317   EXCEPTION
5318     WHEN check_update_failed THEN
5319        x_return_status := OKL_API.G_RET_STS_ERROR;
5320   END check_and_update_date;
5321 
5322 ------------------------------------------------------------------------------
5323 -- PROCEDURE sync_rebook_orig_contract
5324 --
5325 --  This procedure synchronize Rebook and Original Contract. It does following:
5326 --  1. Synchronize Contract Header for any change
5327 --  2. Synchronize Contract Lines for any change
5328 --  3. Synchronize SLH and SLL for both Header and Line level
5329 --  4. Change Rebook Contract Status to 'ABANDONED'
5330 --  5. Version Original Contract
5331 --  6. Synchronize Party role at contract header
5332 --
5333 -- Calls:
5334 -- Called By:
5335 ------------------------------------------------------------------------------
5336   PROCEDURE sync_rebook_orig_contract(
5337                                       p_api_version        IN  NUMBER,
5338                                       p_init_msg_list      IN  VARCHAR2, -- DEFAULT OKC_API.G_FALSE,
5339                                       x_return_status      OUT NOCOPY VARCHAR2,
5340                                       x_msg_count          OUT NOCOPY NUMBER,
5341                                       x_msg_data           OUT NOCOPY VARCHAR2,
5342                                       p_rebook_chr_id      IN  OKC_K_HEADERS_V.ID%TYPE
5343                                      ) IS
5344   l_api_name    VARCHAR2(35)    := 'sync_rebook_orig_contract';
5345   l_proc_name   VARCHAR2(35)    := 'SYNC_REBOOK_ORIG_CONTRACT';
5346 
5347   l_orig_chr_id OKC_K_HEADERS_V.ID%TYPE;
5348   l_khrv_rec    khrv_rec_type;
5349   l_chrv_rec    chrv_rec_type;
5350 
5351   x_khrv_rec    khrv_rec_type;
5352   x_chrv_rec    chrv_rec_type;
5353 
5354   l_tcnv_rec    tcnv_rec_type;
5355   x_tcnv_rec    tcnv_rec_type;
5356 
5357   i                    NUMBER :=0;
5358   l_update_clev_tbl    clev_tbl_type;
5359   l_update_klev_tbl    klev_tbl_type;
5360   x_update_clev_tbl    clev_tbl_type;
5361   x_update_klev_tbl    klev_tbl_type;
5362 
5363   CURSOR trx_csr(p_chr_id_new OKC_K_HEADERS_V.ID%TYPE) IS
5364   SELECT id
5365   FROM   OKL_TRX_CONTRACTS
5366   WHERE  khr_id_new = p_chr_id_new
5367   AND    representation_type = 'PRIMARY'; -- MGAAP 7263041
5368 
5369   BEGIN
5370     IF (G_DEBUG_ENABLED = 'Y') THEN
5371       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5372     END IF;
5373 
5374     x_return_status := OKC_API.G_RET_STS_SUCCESS;
5375     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5376           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5377     END IF;
5378     -- call START_ACTIVITY to create savepoint, check compatibility
5379     -- and initialize message list
5380     x_return_status := OKC_API.START_ACTIVITY(
5381 	                                      p_api_name      => l_api_name,
5382 	                                      p_pkg_name      => G_PKG_NAME,
5383 	                                      p_init_msg_list => p_init_msg_list,
5384 	                                      l_api_version   => p_api_version,
5385 	                                      p_api_version   => p_api_version,
5386 	                                      p_api_type      => G_API_TYPE,
5387 	                                      x_return_status => x_return_status);
5388 
5389     -- check if activity started successfully
5390     IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5391        RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5392     ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
5393        RAISE OKC_API.G_EXCEPTION_ERROR;
5394     END IF;
5395 
5396       --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5397 
5398     get_orig_chr_id(
5399                     x_return_status => x_return_status,
5400                     p_chr_id        => p_rebook_chr_id,
5401                     x_orig_chr_id   => l_orig_chr_id
5402                    );
5403     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5404        okl_api.set_message(
5405                             G_APP_NAME,
5406                             G_LLA_NO_ORIG_REFERENCE
5407                            );
5408        RAISE OKC_API.G_EXCEPTION_ERROR;
5409     END IF;
5410 
5411     --
5412     -- Version the Original Contract
5413     --
5414 
5415     version_contract(
5416                      x_return_status => x_return_status,
5417                      x_msg_count     => x_msg_count,
5418                      x_msg_data      => x_msg_data,
5419                      p_chr_id        => l_orig_chr_id
5420                     );
5421 
5422     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5423        RAISE OKC_API.G_EXCEPTION_ERROR;
5424     END IF;
5425 
5426     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5427           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Versioning of Contract');
5428     END IF;
5429 
5430     -- Start Synchronzing Rebook and Original Contracts
5431 
5432     --
5433     -- Fix Bug# 2691056
5434     -- Check for term modification on contract
5435     -- If so, update contract header with new start_date
5436     -- and end_date.
5437     -- This is to fix Line effectivity issue during rebook
5438     --
5439     -- Check for start date change is added along with term
5440     --
5441     check_and_update_date(
5442                           x_return_status => x_return_status,
5443                           x_msg_count     => x_msg_count,
5444                           x_msg_data      => x_msg_data,
5445                           p_orig_chr_id   => l_orig_chr_id,
5446                           p_rebook_chr_id => p_rebook_chr_id
5447                          );
5448 
5449     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5450        RAISE OKC_API.G_EXCEPTION_ERROR;
5451     END IF;
5452 
5453     --
5454     -- Fix Bug# 3042346
5455     --
5456     sync_party_role(
5457                      x_return_status => x_return_status,
5458                      x_msg_count     => x_msg_count,
5459                      x_msg_data      => x_msg_data,
5460                      p_rebook_chr_id => p_rebook_chr_id,
5461                      p_orig_chr_id   => l_orig_chr_id
5462                     );
5463 
5464     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5465        RAISE OKC_API.G_EXCEPTION_ERROR;
5466     END IF;
5467 
5468     --
5469     -- 1. Adjust Residual Value
5470     -- 2. Adjust Cost
5471     --
5472     sync_line_values(
5473                      x_return_status => x_return_status,
5474                      x_msg_count     => x_msg_count,
5475                      x_msg_data      => x_msg_data,
5476                      p_rebook_chr_id => p_rebook_chr_id,
5477                      p_orig_chr_id   => l_orig_chr_id,
5478                      x_new_klev_tbl  => l_update_klev_tbl,
5479                      x_new_clev_tbl  => l_update_clev_tbl
5480                     );
5481 
5482     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5483        RAISE OKC_API.G_EXCEPTION_ERROR;
5484     END IF;
5485 
5486     -- 3. Change Due Date
5487     -- 4. Change Start Date
5488     -- 5. Adjust Rent
5489     -- 6. Adjust Cost
5490     -- 7. Extend Term
5491 
5492     sync_header_values(
5493                        x_return_status => x_return_status,
5494                        x_msg_count     => x_msg_count,
5495                        x_msg_data      => x_msg_data,
5496                        p_rebook_chr_id => p_rebook_chr_id,
5497                        p_orig_chr_id   => l_orig_chr_id
5498                       );
5499 
5500     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5501        RAISE OKC_API.G_EXCEPTION_ERROR;
5502     END IF;
5503 
5504     --4542290
5505     OKL_K_RATE_PARAMS_PVT.SYNC_RATE_PARAMS(
5506                      p_orig_contract_id  => p_rebook_chr_id,
5507                      p_new_contract_id   => l_orig_chr_id);
5508     --
5509     -- If a new line got created during rebook process
5510     -- update the line with start_date as transaction_date
5511     -- and sts_code as BOOKED
5512     --
5513 
5514     IF l_update_clev_tbl.COUNT > 0 THEN
5515 
5516        OKL_CONTRACT_PUB.update_contract_line(
5517                         p_api_version   => p_api_version,
5518                         p_init_msg_list => OKC_API.G_FALSE,
5519                         x_return_status => x_return_status,
5520                         x_msg_count     => x_msg_count,
5521                         x_msg_data      => x_msg_data,
5522                         p_clev_tbl      => l_update_clev_tbl,
5523                         p_klev_tbl      => l_update_klev_tbl,
5524                         x_clev_tbl      => x_update_clev_tbl,
5525                         x_klev_tbl      => x_update_klev_tbl);
5526 
5527        IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5528           RAISE OKC_API.G_EXCEPTION_ERROR;
5529        END IF;
5530 
5531     END IF;
5532 
5533     sync_slh_sll(
5534                  x_return_status => x_return_status,
5535                  x_msg_count     => x_msg_count,
5536                  x_msg_data      => x_msg_data,
5537                  p_for_line      => 'N',
5538                  p_rebook_chr_id => p_rebook_chr_id,
5539                  p_orig_chr_id   => l_orig_chr_id
5540                 );
5541 
5542     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5543        RAISE OKC_API.G_EXCEPTION_ERROR;
5544     END IF;
5545 
5546     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5547           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After SYNC_SLH_SLL');
5548     END IF;
5549 
5550 /* No subsidy impact 10/03/2003
5551     --
5552     -- Sync Subsidy lines
5553     --
5554     okl_subsidy_process_pvt.rebook_synchronize(
5555                                                p_api_version    => p_api_version,
5556                                                p_init_msg_list  => OKL_API.G_FALSE,
5557                                                x_return_status  => x_return_status,
5558                                                x_msg_count      => x_msg_count,
5559                                                x_msg_data       => x_msg_data,
5560                                                p_rbk_chr_id     => p_rebook_chr_id,
5561                                                p_orig_chr_id    => l_orig_chr_id
5562                                               );
5563 
5564     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5565        raise OKC_API.G_EXCEPTION_ERROR;
5566     END IF;
5567 
5568     debug_message('After Sync Subsidy lines');
5569 */
5570 
5571 /* Not required, as changes are not allowed during rebook
5572     sync_sales_tax(
5573                    x_return_status => x_return_status,
5574                    x_msg_count     => x_msg_count,
5575                    x_msg_data      => x_msg_data,
5576                    p_rebook_chr_id => p_rebook_chr_id,
5577                    p_orig_chr_id   => l_orig_chr_id
5578                   );
5579 
5580     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5581        RAISE OKC_API.G_EXCEPTION_ERROR;
5582     END IF;
5583 */
5584 
5585     -- Sync passthru vendor and line parameters
5586     sync_passthru_detail(
5587                    x_return_status => x_return_status,
5588                    x_msg_count     => x_msg_count,
5589                    x_msg_data      => x_msg_data,
5590                    p_rebook_chr_id => p_rebook_chr_id,
5591                    p_orig_chr_id   => l_orig_chr_id
5592                   );
5593 
5594     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5595        RAISE OKC_API.G_EXCEPTION_ERROR;
5596     END IF;
5597 
5598     --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5599     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5600                            x_msg_data    => x_msg_data);
5601 
5602   EXCEPTION
5603       WHEN OKC_API.G_EXCEPTION_ERROR THEN
5604          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
5605 			p_api_name  => l_api_name,
5606 			p_pkg_name  => G_PKG_NAME,
5607 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
5608 			x_msg_count => x_msg_count,
5609 			x_msg_data  => x_msg_data,
5610 			p_api_type  => G_API_TYPE);
5611 
5612       WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5613          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
5614 			p_api_name  => l_api_name,
5615 			p_pkg_name  => G_PKG_NAME,
5616 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
5617 			x_msg_count => x_msg_count,
5618 			x_msg_data  => x_msg_data,
5619 			p_api_type  => G_API_TYPE);
5620 
5621       WHEN OTHERS THEN
5622          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
5623 			p_api_name  => l_api_name,
5624 			p_pkg_name  => G_PKG_NAME,
5625 			p_exc_name  => 'OTHERS',
5626 			x_msg_count => x_msg_count,
5627 			x_msg_data  => x_msg_data,
5628 			p_api_type  => G_API_TYPE);
5629 
5630   END sync_rebook_orig_contract;
5631 
5632 ------------------------------------------------------------------------------
5633 -- PROCEDURE create_txn_contract
5634 --
5635 --  This procedure creates Rebook Contract and Create a Transaction for that
5636 --
5637 -- Calls:
5638 -- Called By:
5639 ------------------------------------------------------------------------------
5640   PROCEDURE create_txn_contract(
5641                                 p_api_version        IN  NUMBER,
5642                                 p_init_msg_list      IN  VARCHAR2, -- DEFAULT OKC_API.G_FALSE,
5643                                 x_return_status      OUT NOCOPY VARCHAR2,
5644                                 x_msg_count          OUT NOCOPY NUMBER,
5645                                 x_msg_data           OUT NOCOPY VARCHAR2,
5646                                 p_from_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
5647                                 p_rebook_reason_code IN  VARCHAR2,
5648                                 p_rebook_description IN  VARCHAR2,
5649                                 p_trx_date           IN  DATE,
5650                                 x_tcnv_rec           OUT NOCOPY tcnv_rec_type,
5651                                 x_rebook_chr_id      OUT NOCOPY OKC_K_HEADERS_V.ID%TYPE
5652                                ) IS
5653 
5654   l_api_name    VARCHAR2(35)    := 'create_txn_contract';
5655   l_proc_name   VARCHAR2(35)    := 'CREATE_TXN_CONTRACT';
5656   l_api_version CONSTANT NUMBER := 1;
5657 
5658   l_tcnv_rec        tcnv_rec_type;
5659   l_out_tcnv_rec    tcnv_rec_type;
5660 
5661     /*
5662     -- mvasudev, 08/23/2004
5663     -- Added PROCEDURE to enable Business Event
5664     */
5665 	PROCEDURE raise_business_event(
5666     	p_chr_id IN NUMBER
5667     ,p_new_chr_id IN NUMBER
5668 	   ,x_return_status OUT NOCOPY VARCHAR2
5669     )
5670 	IS
5671 
5672       l_parameter_list           wf_parameter_list_t;
5673 	BEGIN
5674 
5675   		 wf_event.AddParameterToList(G_WF_ITM_SRC_CONTRACT_ID,p_chr_id,l_parameter_list);
5676   		 wf_event.AddParameterToList(G_WF_ITM_REVISION_DATE,fnd_date.date_to_canonical(p_trx_date),l_parameter_list);
5677   		 wf_event.AddParameterToList(G_WF_ITM_DEST_CONTRACT_ID,p_new_chr_id,l_parameter_list);
5678 
5679          OKL_WF_PVT.raise_event (p_api_version    => p_api_version,
5680                                  p_init_msg_list  => p_init_msg_list,
5681 								 x_return_status  => x_return_status,
5682 								 x_msg_count      => x_msg_count,
5683 								 x_msg_data       => x_msg_data,
5684 								 p_event_name     => G_WF_EVT_KHR_REBOOK_REQUESTED,
5685 								 p_parameters     => l_parameter_list);
5686 
5687 
5688 
5689      EXCEPTION
5690      WHEN OTHERS THEN
5691        x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5692        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5693      END raise_business_event;
5694 
5695 
5696     /*
5697     -- mvasudev, 08/23/2004
5698     -- END, PROCEDURE to enable Business Event
5699     */
5700 
5701 
5702   BEGIN -- main process begins here
5703 
5704       x_return_status := OKC_API.G_RET_STS_SUCCESS;
5705       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5706               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5707       END IF;
5708       -- call START_ACTIVITY to create savepoint, check compatibility
5709       -- and initialize message list
5710       x_return_status := OKC_API.START_ACTIVITY(
5711 			p_api_name      => l_api_name,
5712 			p_pkg_name      => G_PKG_NAME,
5713 			p_init_msg_list => p_init_msg_list,
5714 			l_api_version   => l_api_version,
5715 			p_api_version   => p_api_version,
5716 			p_api_type      => G_API_TYPE,
5717 			x_return_status => x_return_status);
5718 
5719       -- check if activity started successfully
5720       IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5721          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5722       ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
5723          RAISE OKC_API.G_EXCEPTION_ERROR;
5724       END IF;
5725 
5726       --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5727       -- Create Rebook Contract
5728       --
5729       create_rebook_contract(
5730                              p_api_version        => p_api_version,
5731                              p_init_msg_list      => p_init_msg_list,
5732                              x_return_status      => x_return_status,
5733                              x_msg_count          => x_msg_count,
5734                              x_msg_data           => x_msg_data,
5735                              p_from_chr_id        => p_from_chr_id,
5736                              x_rebook_chr_id      => x_rebook_chr_id,
5737                              p_rbk_date           => p_trx_date
5738                             );
5739 
5740       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5741          RAISE OKC_API.G_EXCEPTION_ERROR;
5742       END IF;
5743 
5744       -- Create Transaction for the rebook-ed contract
5745       okl_transaction_pvt.create_transaction(
5746                          p_api_version        => p_api_version,
5747                          p_init_msg_list      => p_init_msg_list,
5748                          x_return_status      => x_return_status,
5749                          x_msg_count          => x_msg_count,
5750                          x_msg_data           => x_msg_data,
5751                          p_chr_id             => p_from_chr_id,
5752                          p_new_chr_id         => x_rebook_chr_id,
5753                          p_reason_code        => p_rebook_reason_code,
5754                          p_description        => p_rebook_description,
5755                          p_trx_date           => p_trx_date,
5756                          p_trx_type           => 'REBOOK',
5757                          x_tcnv_rec           => x_tcnv_rec
5758                         );
5759 
5760       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5761          RAISE OKC_API.G_EXCEPTION_ERROR;
5762       END IF;
5763 
5764    /*
5765    -- mvasudev, 08/23/2004
5766    -- Code change to enable Business Event
5767    */
5768 	raise_business_event(p_chr_id        => p_from_chr_id
5769 	                    ,p_new_chr_id => x_rebook_chr_id
5770 	                    ,x_return_status => x_return_status);
5771     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5772        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5773     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5774        RAISE OKL_API.G_EXCEPTION_ERROR;
5775     END IF;
5776 
5777    /*
5778    -- mvasudev, 08/23/2004
5779    -- END, Code change to enable Business Event
5780    */
5781 
5782       --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5783       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5784                            x_msg_data    => x_msg_data);
5785 
5786   EXCEPTION
5787       WHEN OKC_API.G_EXCEPTION_ERROR THEN
5788          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
5789 			p_api_name  => l_api_name,
5790 			p_pkg_name  => G_PKG_NAME,
5791 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
5792 			x_msg_count => x_msg_count,
5793 			x_msg_data  => x_msg_data,
5794 			p_api_type  => G_API_TYPE);
5795 
5796       WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5797          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
5798 			p_api_name  => l_api_name,
5799 			p_pkg_name  => G_PKG_NAME,
5800 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
5801 			x_msg_count => x_msg_count,
5802 			x_msg_data  => x_msg_data,
5803 			p_api_type  => G_API_TYPE);
5804 
5805       WHEN OTHERS THEN
5806          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
5807 			p_api_name  => l_api_name,
5808 			p_pkg_name  => G_PKG_NAME,
5809 			p_exc_name  => 'OTHERS',
5810 			x_msg_count => x_msg_count,
5811 			x_msg_data  => x_msg_data,
5812 			p_api_type  => G_API_TYPE);
5813 
5814   END create_txn_contract;
5815 
5816 ------------------------------------------------------------------------------
5817 -- PROCEDURE process_securitization_stream
5818 --
5819 --  This procedure process securitization stream after rebook process completes.
5820 --  This process must be called after rebook stream is synchronized
5821 --  back to original contract.
5822 --
5823 -- Calls:
5824 -- Called By: sync_rebook_stream
5825 ------------------------------------------------------------------------------
5826    PROCEDURE  process_securitization_stream(
5827                                     x_return_status OUT NOCOPY VARCHAR2,
5828                                     x_msg_count     OUT NOCOPY NUMBER,
5829                                     x_msg_data      OUT NOCOPY VARCHAR2,
5830                                     p_orig_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE,
5831                                     p_rebook_chr_id IN  OKC_K_HEADERS_V.ID%TYPE
5832                                    ) IS
5833 
5834   l_api_name    VARCHAR2(35)    := 'process_securitization_stream';
5835   l_proc_name   VARCHAR2(35)    := 'PROCESS_SECURITIZATION_STREAM';
5836   l_api_version CONSTANT NUMBER := 1;
5837 
5838   CURSOR txn_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
5839   SELECT date_transaction_occurred
5840   FROM   okl_trx_contracts
5841   WHERE  khr_id   = p_chr_id
5842   AND    tcn_type = 'TRBK'
5843   AND    tsu_code = 'ENTERED'
5844   AND    representation_type = 'PRIMARY'; -- MGAAP 7263041
5845 
5846   CURSOR disb_strm_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
5847   SELECT strm.id
5848   FROM   okl_streams strm,
5849          okl_strm_type_v TYPE
5850   WHERE  TYPE.id                   = strm.sty_id
5851   AND    TYPE.stream_type_subclass = 'INVESTOR_DISBURSEMENT'
5852   AND    strm.khr_id               = p_chr_id
5853   AND    strm.say_code             = 'CURR';
5854 
5855   CURSOR accu_strm_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
5856   SELECT strm.id
5857   FROM   okl_streams strm,
5858          okl_strm_type_v TYPE
5859   WHERE  TYPE.id       = strm.sty_id
5860 /*
5861   AND    TYPE.name IN (
5862                        'INVESTOR RENTAL ACCRUAL',
5863                        'INVESTOR PRE-TAX INCOME',
5864                        'INVESTOR INTEREST INCOME',
5865                        'INVESTOR VARIABLE INTEREST'
5866                       )
5867 */
5868   AND    TYPE.stream_type_purpose IN (
5869                        'INVESTOR_RENTAL_ACCRUAL',
5870                        'INVESTOR_PRE_TAX_INCOME',
5871                        'INVESTOR_INTEREST_INCOME',
5872                        'INVESTOR_VARIABLE_INTEREST'
5873                       )
5874   AND    strm.khr_id   = p_chr_id
5875   AND    strm.say_code = 'CURR';
5876 
5877   i NUMBER := 0;
5878   l_disb_strm_tbl stmv_tbl_type;
5879   x_disb_strm_tbl stmv_tbl_type;
5880 
5881   l_accu_strm_tbl stmv_tbl_type;
5882   x_accu_strm_tbl stmv_tbl_type;
5883 
5884   l_rebook_date DATE;
5885   l_contract_secu VARCHAR2(1);
5886   l_inv_agmt_chr_id_tbl inv_agmt_chr_id_tbl_type;
5887 
5888   secu_failed EXCEPTION;
5889 
5890   BEGIN
5891     IF (G_DEBUG_ENABLED = 'Y') THEN
5892       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5893     END IF;
5894 
5895     x_return_status := OKC_API.G_RET_STS_SUCCESS;
5896     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5897           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5898     END IF;
5899 
5900     --
5901     -- Check for Securitized Contract
5902     --
5903     FOR txn_rec IN txn_csr (p_orig_chr_id)
5904     LOOP
5905       l_rebook_date := txn_rec.date_transaction_occurred;
5906     END LOOP;
5907 
5908     okl_securitization_pvt.check_khr_securitized(
5909                                                  p_api_version         => 1.0,
5910                                                  p_init_msg_list       => OKC_API.G_FALSE,
5911                                                  x_return_status       => x_return_status,
5912                                                  x_msg_count           => x_msg_count,
5913                                                  x_msg_data            => x_msg_data,
5914                                                  p_khr_id              => p_orig_chr_id,
5915                                                  p_effective_date      => l_rebook_date,
5916                                                  x_value               => l_contract_secu,
5917                                                  x_inv_agmt_chr_id_tbl => l_inv_agmt_chr_id_tbl
5918                                                 );
5919 
5920     IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
5921        RAISE secu_failed;
5922     END IF;
5923 
5924     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5925           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract Securitized? '||l_contract_secu);
5926     END IF;
5927 
5928     IF (l_contract_secu <> OKL_API.G_TRUE) THEN -- Do not proceed, return success
5929        x_return_status := OKL_API.G_RET_STS_SUCCESS;
5930        RETURN;
5931     END IF;
5932 
5933     --
5934     -- HISTorize disbursement streams, with subclass = 'INVESTOR_DISBURSEMENT'
5935     --
5936     FOR disb_strm_rec IN disb_strm_csr (p_orig_chr_id)
5937     LOOP
5938        i := disb_strm_csr%ROWCOUNT;
5939        l_disb_strm_tbl(i).id        := disb_strm_rec.id;
5940        l_disb_strm_tbl(i).say_code  := 'HIST';
5941        l_disb_strm_tbl(i).active_yn := 'N';
5942        l_disb_strm_tbl(i).date_history  := SYSDATE;
5943     END LOOP;
5944 
5945     IF (l_disb_strm_tbl.COUNT > 0) THEN
5946         okl_streams_pub.update_streams(
5947                                        p_api_version    => 1.0,
5948                                        p_init_msg_list  => OKC_API.G_FALSE,
5949                                        x_return_status  => x_return_status,
5950                                        x_msg_count      => x_msg_count,
5951                                        x_msg_data       => x_msg_data,
5952                                        p_stmv_tbl       => l_disb_strm_tbl,
5953                                        x_stmv_tbl       => x_disb_strm_tbl
5954                                      );
5955 
5956       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5957          RAISE secu_failed;
5958       END IF;
5959     END IF;
5960 
5961     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5962           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After disbursment HIST streams');
5963     END IF;
5964     --
5965     -- Create Pool transaction after rebook
5966     --
5967     okl_securitization_pvt.modify_pool_contents(
5968                                                 p_api_version         => 1.0,
5969                                                 p_init_msg_list       => OKC_API.G_FALSE,
5970                                                 x_return_status       => x_return_status,
5971                                                 x_msg_count           => x_msg_count,
5972                                                 x_msg_data            => x_msg_data,
5973                                                 p_transaction_reason  => OKL_SECURITIZATION_PVT.G_TRX_REASON_CONTRACT_REBOOK,
5974                                                 p_khr_id              => p_orig_chr_id,
5975                                                 p_transaction_date    => l_rebook_date,
5976                                                 p_effective_date      => l_rebook_date
5977                                                );
5978 
5979     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
5980        RAISE secu_failed;
5981     END IF;
5982     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5983           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Modify pool contents');
5984     END IF;
5985 
5986 -- Bug# 4775555: Start
5987 -- Accrual Streams will now be Historized in OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS
5988 -- This API will create the new accrual streams, link the old and new streams
5989 -- and then Historize the old streams
5990 /*
5991     --
5992     -- HISTorize accrual streams
5993     --
5994     FOR accu_strm_rec IN accu_strm_csr (p_orig_chr_id)
5995     LOOP
5996        i := accu_strm_csr%ROWCOUNT;
5997        l_accu_strm_tbl(i).id        := accu_strm_rec.id;
5998        l_accu_strm_tbl(i).say_code  := 'HIST';
5999        l_accu_strm_tbl(i).active_yn := 'N';
6000     END LOOP;
6001 
6002     IF (l_accu_strm_tbl.COUNT > 0) THEN
6003         okl_streams_pub.update_streams(
6004                                        p_api_version    => 1.0,
6005                                        p_init_msg_list  => OKC_API.G_FALSE,
6006                                        x_return_status  => x_return_status,
6007                                        x_msg_count      => x_msg_count,
6008                                        x_msg_data       => x_msg_data,
6009                                        p_stmv_tbl       => l_accu_strm_tbl,
6010                                        x_stmv_tbl       => x_accu_strm_tbl
6011                                      );
6012 
6013       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6014          RAISE secu_failed;
6015       END IF;
6016     END IF;
6017 
6018     debug_message('After accrual HIST streams');
6019 */
6020 -- Bug# 4775555: End
6021 
6022     --
6023     -- Regenerate disbursement streams
6024     --
6025     okl_stream_generator_pvt.create_disb_streams(
6026                                                  p_api_version         => 1.0,
6027                                                  p_init_msg_list       => OKC_API.G_FALSE,
6028                                                  x_return_status       => x_return_status,
6029                                                  x_msg_count           => x_msg_count,
6030                                                  x_msg_data            => x_msg_data,
6031                                                  p_contract_id         => p_orig_chr_id
6032                                                 );
6033 
6034     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6035        RAISE secu_failed;
6036     END IF;
6037     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6038           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After regerating disb. streams');
6039     END IF;
6040 
6041     -- Bug# 4775555
6042     --
6043     -- Regenerate Present Value Disbursement streams
6044     --
6045     okl_stream_generator_pvt.create_pv_streams(
6046                                        p_api_version         => 1.0,
6047                                        p_init_msg_list       => OKC_API.G_FALSE,
6048                                        x_return_status       => x_return_status,
6049                                        x_msg_count           => x_msg_count,
6050                                        x_msg_data            => x_msg_data,
6051                                        p_contract_id         => p_orig_chr_id
6052                                        );
6053 
6054     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6055        RAISE secu_failed;
6056     END IF;
6057     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6058           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After regerating Present Value Disbursement streams');
6059     END IF;
6060 
6061     --
6062     -- Generate Investor accrual streams
6063     --
6064     OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS(
6065                                        p_api_version    => 1.0,
6066                                        p_init_msg_list  => OKL_API.G_FALSE,
6067                                        x_return_status  => x_return_status,
6068                                        x_msg_count      => x_msg_count,
6069                                        x_msg_data       => x_msg_data,
6070                                        p_khr_id         => p_orig_chr_id
6071                                       );
6072 
6073     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6074        RAISE secu_failed;
6075     END IF;
6076     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6077           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After regerating Investor accrual streams');
6078     END IF;
6079 
6080     RETURN;
6081 
6082   EXCEPTION
6083       WHEN secu_failed THEN
6084          NULL; -- excception is handled by caller
6085 
6086       WHEN OTHERS THEN
6087          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
6088 			p_api_name  => l_api_name,
6089 			p_pkg_name  => G_PKG_NAME,
6090 			p_exc_name  => 'OTHERS',
6091 			x_msg_count => x_msg_count,
6092 			x_msg_data  => x_msg_data,
6093 			p_api_type  => G_API_TYPE);
6094 
6095   END process_securitization_stream;
6096 
6097 ------------------------------------------------------------------------------
6098 -- PROCEDURE sync_rebook_stream
6099 --
6100 --  This procedure Synchronizes between Rebooked Contract Stream and Orginal Stream
6101 --
6102 -- Calls:
6103 -- Called By:
6104 ------------------------------------------------------------------------------
6105 
6106   PROCEDURE sync_rebook_stream(
6107                                p_api_version        IN  NUMBER,
6108                                p_init_msg_list      IN  VARCHAR2, -- DEFAULT OKC_API.G_FALSE,
6109                                x_return_status      OUT NOCOPY VARCHAR2,
6110                                x_msg_count          OUT NOCOPY NUMBER,
6111                                x_msg_data           OUT NOCOPY VARCHAR2,
6112                                p_chr_id             IN  OKC_K_HEADERS_V.ID%TYPE,
6113                                p_stream_status      IN  OKL_STREAMS.SAY_CODE%TYPE
6114                               ) IS
6115 
6116   l_api_name    VARCHAR2(35)    := 'sync_rebook_stream';
6117   l_proc_name   VARCHAR2(35)    := 'SYNC_REBOOK_STREAM';
6118   l_api_version CONSTANT NUMBER := 1;
6119 
6120   l_orig_chr_id NUMBER;
6121 
6122   -- Bug# 4775555: Start
6123   cursor l_rbk_trx_csr(p_chr_id IN NUMBER) is
6124   SELECT ktrx.date_transaction_occurred,ktrx.id,
6125          khr.multi_gaap_yn, pdt.reporting_pdt_id -- MGAAP 7263041
6126   FROM   okc_k_headers_b CHR,
6127          okl_trx_contracts ktrx,
6128          okl_k_headers khr,
6129          okl_products pdt
6130   WHERE  ktrx.khr_id_new = chr.id
6131   AND    ktrx.tsu_code = 'ENTERED'
6132   AND    ktrx.rbr_code is NOT NULL
6133   AND    ktrx.tcn_type = 'TRBK'
6134   AND    CHR.id = p_chr_id
6135   AND    CHR.ORIG_SYSTEM_SOURCE_CODE = 'OKL_REBOOK'
6136   -- MGAAP start 7263041
6137   AND    ktrx.representation_type = 'PRIMARY'
6138   AND    chr.id = khr.id
6139   AND    khr.pdt_id = pdt.id;
6140   -- MGAAP end 7263041
6141 
6142   l_rbk_trx_rec     l_rbk_trx_csr%ROWTYPE;
6143   l_inv_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
6144   l_inv_stream_tbl  OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
6145   lx_trx_number OKL_TRX_CONTRACTS.trx_number%TYPE := null; -- MGAAP 7263041
6146   -- Bug# 4775555: End
6147 
6148   BEGIN
6149     IF (G_DEBUG_ENABLED = 'Y') THEN
6150       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6151     END IF;
6152 
6153       x_return_status := OKC_API.G_RET_STS_SUCCESS;
6154       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6155               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
6156       END IF;
6157       -- call START_ACTIVITY to create savepoint, check compatibility
6158       -- and initialize message list
6159       x_return_status := OKC_API.START_ACTIVITY(
6160 			p_api_name      => l_api_name,
6161 			p_pkg_name      => G_PKG_NAME,
6162 			p_init_msg_list => p_init_msg_list,
6163 			l_api_version   => l_api_version,
6164 			p_api_version   => p_api_version,
6165 			p_api_type      => G_API_TYPE,
6166 			x_return_status => x_return_status);
6167 
6168       -- check if activity started successfully
6169       IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6170          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6171       ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
6172          RAISE OKC_API.G_EXCEPTION_ERROR;
6173       END IF;
6174 --**********************************************************
6175 
6176       get_orig_chr_id(
6177                       x_return_status => x_return_status,
6178                       p_chr_id        => p_chr_id,
6179                       x_orig_chr_id   => l_orig_chr_id
6180                      );
6181       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6182          okl_api.set_message(
6183                               G_APP_NAME,
6184                               G_LLA_NO_ORIG_REFERENCE
6185                              );
6186          RAISE OKC_API.G_EXCEPTION_ERROR;
6187       END IF;
6188 
6189 /*
6190  * Bug# , 03/12/2003
6191  * Code commented as HISTorization of stream
6192  * is done during stream synchronization process later
6193  * at copy_rebook_stream() procedure
6194 */
6195 /*
6196       -- Change status of Original Stream to 'HIST'
6197       change_stream_status(
6198                            x_return_status => x_return_status,
6199                            x_msg_count     => x_msg_count,
6200                            x_msg_data      => x_msg_data,
6201                            p_chr_id        => l_orig_chr_id,
6202                            p_status        => 'HIST',
6203                            p_active_yn     => 'N'
6204                           );
6205 
6206       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6207          raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6208       END IF;
6209 
6210       debug_message('Change Status: '||x_return_status);
6211 */
6212 
6213       -- Copy Rebooked Streams under Original Contract
6214       copy_rebook_stream(
6215                          x_return_status => x_return_status,
6216                          x_msg_count     => x_msg_count,
6217                          x_msg_data      => x_msg_data,
6218                          p_orig_chr_id   => l_orig_chr_id,
6219                          p_rebook_chr_id => p_chr_id
6220                         );
6221 
6222       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6223          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6224       END IF;
6225 
6226       -- Change status of Rebooked Stream to 'HIST'
6227       change_stream_status(
6228                            x_return_status => x_return_status,
6229                            x_msg_count     => x_msg_count,
6230                            x_msg_data      => x_msg_data,
6231                            p_chr_id        => p_chr_id,
6232                            p_status        => 'HIST',
6233                            p_active_yn     => 'N'
6234                           );
6235 
6236       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6237          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6238       END IF;
6239 
6240       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6241               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Change Status 2: '||x_return_status);
6242       END IF;
6243 
6244       --
6245       -- Securitization stream processing
6246       --
6247       process_securitization_stream(
6248                                     x_return_status => x_return_status,
6249                                     x_msg_count     => x_msg_count,
6250                                     x_msg_data      => x_msg_data,
6251                                     p_orig_chr_id   => l_orig_chr_id,
6252                                     p_rebook_chr_id => p_chr_id
6253                                    );
6254 
6255       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6256          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6257       END IF;
6258 
6259       -- Bug# 4775555: Start
6260       --
6261       -- Create Investor Disbursement Adjustment
6262       --
6263       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6264               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call create_inv_disb_adjustment');
6265       END IF;
6266       create_inv_disb_adjustment(
6267                          p_api_version     => p_api_version,
6268                          p_init_msg_list   => p_init_msg_list,
6269                          x_return_status   => x_return_status,
6270                          x_msg_count       => x_msg_count,
6271                          x_msg_data        => x_msg_data,
6272                          p_orig_khr_id     => l_orig_chr_id
6273                          );
6274       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6275               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call create_inv_disb_adjustment'||x_return_status);
6276       END IF;
6277 
6278       IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6279          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6280       ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
6281          RAISE OKC_API.G_EXCEPTION_ERROR;
6282       END IF;
6283 
6284       --get rebook transaction
6285       OPEN l_rbk_trx_csr (p_chr_id => p_chr_id);
6286       FETCH l_rbk_trx_csr INTO l_rbk_trx_rec;
6287       CLOSE l_rbk_trx_csr;
6288 
6289       --
6290       -- Create Investor Accrual Adjustment
6291       --
6292       OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;  -- MGAAP 7263041
6293       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6294               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call calc_inv_acc_adjustment');
6295       END IF;
6296       calc_inv_acc_adjustment(
6297                          p_api_version     => p_api_version,
6298                          p_init_msg_list   => p_init_msg_list,
6299                          x_return_status   => x_return_status,
6300                          x_msg_count       => x_msg_count,
6301                          x_msg_data        => x_msg_data,
6302                          p_orig_khr_id     => l_orig_chr_id,
6303                          p_trx_id          => l_rbk_trx_rec.id,
6304                          p_trx_date        => sysdate,
6305                          x_inv_accrual_rec => l_inv_accrual_rec,
6306                          x_inv_stream_tbl  => l_inv_stream_tbl
6307                          );
6308       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6309               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call calc_inv_acc_adjustment'||x_return_status);
6310       END IF;
6311 
6312       IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6313          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6314       ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
6315          RAISE OKC_API.G_EXCEPTION_ERROR;
6316       END IF;
6317 
6318       IF (l_inv_stream_tbl.COUNT > 0) THEN
6319         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6320                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call okl_generate_accruals_pvt.adjust_accruals');
6321         END IF;
6322         OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
6323           p_api_version    => p_api_version,
6324           p_init_msg_list  => p_init_msg_list,
6325           x_return_status  => x_return_status,
6326           x_msg_count      => x_msg_count,
6327           x_msg_data       => x_msg_data ,
6328           x_trx_number     => lx_trx_number,
6329           p_accrual_rec    => l_inv_accrual_rec,
6330           p_stream_tbl     => l_inv_stream_tbl);
6331         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6332                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call okl_generate_accruals_pvt.adjust_accruals'||x_return_status);
6333         END IF;
6334 
6335         IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6336           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6337         ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6338           RAISE Okl_Api.G_EXCEPTION_ERROR;
6339         END IF;
6340       END IF;
6341       -- Bug# 4775555: End
6342 
6343       -- MGAAP start 7263041
6344 
6345       IF (l_rbk_trx_rec.multi_gaap_yn = 'Y') THEN
6346 
6347         OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
6348 
6349         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6350                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call calc_inv_acc_adjustment for SECONDARY');
6351         END IF;
6352         calc_inv_acc_adjustment(
6353                            p_api_version     => p_api_version,
6354                            p_init_msg_list   => p_init_msg_list,
6355                            x_return_status   => x_return_status,
6356                            x_msg_count       => x_msg_count,
6357                            x_msg_data        => x_msg_data,
6358                            p_orig_khr_id     => l_orig_chr_id,
6359                            p_trx_id          => l_rbk_trx_rec.id,
6360                            p_trx_date        => sysdate,
6361                            x_inv_accrual_rec => l_inv_accrual_rec,
6362                            x_inv_stream_tbl  => l_inv_stream_tbl,
6363                            p_product_id      => l_rbk_trx_rec.reporting_pdt_id
6364                            );
6365         OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
6366         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6367                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call calc_inv_acc_adjustment'||x_return_status);
6368         END IF;
6369 
6370         IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6371            RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6372         ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
6373            RAISE OKC_API.G_EXCEPTION_ERROR;
6374         END IF;
6375 
6376         IF (l_inv_stream_tbl.COUNT > 0) THEN
6377           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6378                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call okl_generate_accruals_pvt.adjust_accruals');
6379           END IF;
6380 
6381           l_inv_accrual_rec.trx_number := lx_trx_number;
6382 
6383           OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
6384             p_api_version    => p_api_version,
6385             p_init_msg_list  => p_init_msg_list,
6386             x_return_status  => x_return_status,
6387             x_msg_count      => x_msg_count,
6388             x_msg_data       => x_msg_data ,
6389             x_trx_number     => lx_trx_number,
6390             p_accrual_rec    => l_inv_accrual_rec,
6391             p_stream_tbl     => l_inv_stream_tbl,
6392             p_representation_type     => 'SECONDARY');
6393           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6394                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call okl_generate_accruals_pvt.adjust_accruals'||x_return_status);
6395           END IF;
6396 
6397           IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6398             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6399           ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6400             RAISE Okl_Api.G_EXCEPTION_ERROR;
6401           END IF;
6402         END IF;
6403 
6404       END IF;
6405       -- MGAAP end 7263041
6406 
6407 --**********************************************************
6408       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6409                            x_msg_data    => x_msg_data);
6410 
6411   EXCEPTION
6412       WHEN OKC_API.G_EXCEPTION_ERROR THEN
6413          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
6414 			p_api_name  => l_api_name,
6415 			p_pkg_name  => G_PKG_NAME,
6416 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
6417 			x_msg_count => x_msg_count,
6418 			x_msg_data  => x_msg_data,
6419 			p_api_type  => G_API_TYPE);
6420 
6421       WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6422          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
6423 			p_api_name  => l_api_name,
6424 			p_pkg_name  => G_PKG_NAME,
6425 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
6426 			x_msg_count => x_msg_count,
6427 			x_msg_data  => x_msg_data,
6428 			p_api_type  => G_API_TYPE);
6429 
6430       WHEN OTHERS THEN
6431          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
6432 			p_api_name  => l_api_name,
6433 			p_pkg_name  => G_PKG_NAME,
6434 			p_exc_name  => 'OTHERS',
6435 			x_msg_count => x_msg_count,
6436 			x_msg_data  => x_msg_data,
6437 			p_api_type  => G_API_TYPE);
6438 
6439   END sync_rebook_stream;
6440 
6441 ------------------------------------------------------------------------------
6442 -- PROCEDURE create_rebook_contract
6443 --
6444 --  This procedure creates a Rebook Contract from Original Contract provieded as parameter
6445 --  p_from_chr_id and set the status of new contract as 'ENTERED'.
6446 --  This process does not touch/chnage the original contract
6447 --
6448 -- Calls:
6449 -- Called By:
6450 ------------------------------------------------------------------------------
6451 
6452   PROCEDURE create_rebook_contract(
6453                                    p_api_version        IN  NUMBER,
6454                                    p_init_msg_list      IN  VARCHAR2, -- DEFAULT OKC_API.G_FALSE,
6455                                    x_return_status      OUT NOCOPY VARCHAR2,
6456                                    x_msg_count          OUT NOCOPY NUMBER,
6457                                    x_msg_data           OUT NOCOPY VARCHAR2,
6458                                    p_from_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
6459                                    x_rebook_chr_id      OUT NOCOPY OKC_K_HEADERS_V.ID%TYPE,
6460                                    p_rbk_date           IN  DATE DEFAULT NULL
6461                                   ) IS
6462 
6463   l_api_name             VARCHAR2(35)    := 'create_rebook_contract';
6464   l_proc_name            VARCHAR2(35)    := 'CREATE_REBOOK_CONTRACT';
6465   l_api_version          CONSTANT NUMBER := 1;
6466   x_chr_id               OKC_K_HEADERS_V.ID%TYPE;
6467   l_seq_no               NUMBER;
6468   l_orig_contract_number OKC_K_HEADERS_V.CONTRACT_NUMBER%TYPE;
6469   l_orig_sts_code        OKC_K_HEADERS_V.sts_code%TYPE; --|          24-Mar-08 cklee  Bug# 6801137 -- Added validation logic         |
6470   l_new_contract_number  OKC_K_HEADERS_V.CONTRACT_NUMBER%TYPE;
6471   l_khrv_rec             khrv_rec_type;
6472   x_khrv_rec             khrv_rec_type;
6473   l_chrv_rec             chrv_rec_type;
6474   x_chrv_rec             chrv_rec_type;
6475   x_cle_id               OKC_K_LINES_V.ID%TYPE;
6476   l_from_cle_id_tbl      okl_kle_pvt.klev_tbl_type;
6477   x_cle_id_tbl           okl_kle_pvt.klev_tbl_type;
6478   i                      NUMBER := 1;
6479 
6480 --start:|          24-Mar-08 cklee  Bug# 6801137 -- Added validation logic         |
6481 /*  CURSOR orig_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
6482   SELECT contract_number
6483   FROM   okc_k_headers_v
6484   WHERE  id = p_chr_id;
6485 */
6486   CURSOR orig_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
6487   SELECT contract_number, sts_code
6488   FROM   okc_k_headers_v
6489   WHERE  id = p_chr_id;
6490 --end:|          24-Mar-08 cklee  Bug# 6801137 -- Added validation logic         |
6491 
6492   CURSOR top_line_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
6493   SELECT id
6494   FROM   okc_k_lines_v
6495   WHERE  chr_id = p_chr_id;
6496   --AND    lse_id = 33; -- ??? Temporary , Fin Asset Line Only
6497 
6498   l_orig_chr_id NUMBER;
6499 
6500   BEGIN
6501     IF (G_DEBUG_ENABLED = 'Y') THEN
6502       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6503     END IF;
6504 
6505       x_return_status := OKC_API.G_RET_STS_SUCCESS;
6506       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6507               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
6508       END IF;
6509       -- call START_ACTIVITY to create savepoint, check compatibility
6510       -- and initialize message list
6511       x_return_status := OKC_API.START_ACTIVITY(
6512 			p_api_name      => l_api_name,
6513 			p_pkg_name      => G_PKG_NAME,
6514 			p_init_msg_list => p_init_msg_list,
6515 			l_api_version   => l_api_version,
6516 			p_api_version   => p_api_version,
6517 			p_api_type      => G_API_TYPE,
6518 			x_return_status => x_return_status);
6519 
6520       -- check if activity started successfully
6521       IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6522          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6523       ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
6524          RAISE OKC_API.G_EXCEPTION_ERROR;
6525       END IF;
6526 --**********************************************************
6527       -- Get Sequence Number to generate Contract Number
6528       SELECT okl_rbk_seq.NEXTVAL
6529       INTO   l_seq_no
6530       FROM   DUAL;
6531 
6532       -- Get Contract Number from Original Contract
6533       OPEN orig_csr(p_from_chr_id);
6534       FETCH orig_csr INTO l_orig_contract_number, l_orig_sts_code;--:|          24-Mar-08 cklee  Bug# 6801137 -- Added validation logic         |
6535 
6536       IF orig_csr%NOTFOUND THEN
6537          okl_api.set_message(
6538                              G_APP_NAME,
6539                              G_LLA_CHR_ID
6540                             );
6541          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6542 --start:|          24-Mar-08 cklee  Bug# 6801137 -- Added validation logic         |
6543       ELSE
6544          IF l_orig_sts_code <> 'BOOKED' THEN
6545            okl_api.set_message(
6546                              G_APP_NAME,
6547                              'OKL_LLA_REV_ONLY_BOOKED'
6548                             );
6549            RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6550          END IF;
6551 --end:|          24-Mar-08 cklee  Bug# 6801137 -- Added validation logic         |
6552 
6553       END IF;
6554 
6555       CLOSE orig_csr;
6556       l_new_contract_number :=  l_orig_contract_number||'-RB'||l_seq_no;
6557 
6558       --
6559       -- Copy Contract to Create Rebook Contract
6560       --
6561       okl_copy_contract_pub.copy_lease_contract_new(
6562                                                  p_api_version              => 1.0,
6563                                                  p_init_msg_list            => OKC_API.G_FALSE,
6564                                                  x_return_status            => x_return_status,
6565                                                  x_msg_count                => x_msg_count,
6566                                                  x_msg_data                 => x_msg_data,
6567                                                  p_chr_id                   => p_from_chr_id,
6568                                                  p_contract_number          => l_new_contract_number,
6569                                                  p_contract_number_modifier => NULL,
6570                                                  p_renew_ref_yn             => 'N',
6571                                                  p_trans_type               => 'CRB',
6572                                                  x_chr_id                   => x_chr_id,
6573                                                  p_rbk_date               => p_rbk_date
6574                                                 );
6575 
6576       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6577          RAISE OKC_API.G_EXCEPTION_ERROR;
6578       END IF;
6579 
6580 
6581 /*
6582       okl_copy_contract_pub.copy_contract(
6583                                           p_api_version                  => 1.0,
6584                                           p_init_msg_list                => OKC_API.G_FALSE,
6585                                           x_return_status                => x_return_status,
6586                                           x_msg_count                    => x_msg_count,
6587                                           x_msg_data                     => x_msg_data,
6588                                           p_commit                       => OKC_API.G_FALSE,
6589                                           p_chr_id                       => p_from_chr_id,
6590                                           p_contract_number              => l_new_contract_number,
6591                                           p_contract_number_modifier     => NULL,
6592                                           p_to_template_yn               => 'N',
6593                                           p_renew_ref_yn                 => 'N',
6594                                           p_copy_lines_yn                => 'N',
6595                                           p_override_org                 => 'N',
6596                                           x_chr_id                       => x_chr_id
6597                                          );
6598 
6599       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6600          RAISE OKC_API.G_EXCEPTION_ERROR;
6601       END IF;
6602 
6603       debug_message('New Chr ID: '||x_chr_id);
6604 
6605       i := 1;
6606       FOR top_line_rec IN top_line_csr(p_from_chr_id)
6607       LOOP
6608          debug_message('Top Line: '||top_line_rec.id);
6609          l_from_cle_id_tbl(i).id := top_line_rec.id;
6610          i := i + 1;
6611       END LOOP;
6612 
6613          okl_copy_asset_pub.copy_all_lines(
6614                                              p_api_version        => 1.0,
6615                                              p_init_msg_list      => OKC_API.G_FALSE,
6616                                              x_return_status      => x_return_status,
6617                                              x_msg_count          => x_msg_count,
6618                                              x_msg_data           => x_msg_data,
6619                                              P_from_cle_id_tbl    => l_from_cle_id_tbl,
6620                                              p_to_chr_id          => x_chr_id,
6621                                              p_to_template_yn	  => 'N',
6622                                              p_copy_reference	  => 'Y',
6623                                              p_copy_line_party_yn => 'Y',
6624                                              p_renew_ref_yn       => 'N',
6625                                              p_trans_type         => 'CRB',
6626                                              x_cle_id_tbl         => x_cle_id_tbl
6627                                             );
6628          IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6629             RAISE OKC_API.G_EXCEPTION_ERROR;
6630          END IF;
6631 
6632 */
6633       --
6634       -- Update Rebook Contract Status to 'NEW'
6635       -- and source to 'OKL_REBOOK'
6636       --
6637       l_khrv_rec.id                      := x_chr_id;
6638       l_chrv_rec.id                      := x_chr_id;
6639       l_chrv_rec.sts_code                := 'NEW';
6640       l_chrv_rec.orig_system_source_code := 'OKL_REBOOK';
6641 
6642       Okl_Okc_Migration_Pvt.update_contract_header(
6643 	                                           p_api_version       => 1.0,
6644 	                                           p_init_msg_list     => OKC_API.G_FALSE,
6645                                                    x_return_status     => x_return_status,
6646                                                    x_msg_count         => x_msg_count,
6647                                                    x_msg_data          => x_msg_data,
6648                                                    p_restricted_update => OKC_API.G_FALSE,
6649                                                    p_chrv_rec          => l_chrv_rec,
6650                                                    x_chrv_rec          => x_chrv_rec
6651 					          );
6652 /* dedey - 27-AUG-2002
6653 
6654    --changed the call as it is over-writing line start date
6655    --with old date
6656 
6657       okl_contract_pub.update_contract_header(
6658                                               p_api_version         => 1.0,
6659                                               p_init_msg_list       => p_init_msg_list,
6660                                               x_return_status       => x_return_status,
6661                                               x_msg_count           => x_msg_count,
6662                                               x_msg_data            => x_msg_data,
6663                                               p_restricted_update   => OKC_API.G_FALSE,
6664                                               p_chrv_rec            => l_chrv_rec,
6665                                               p_khrv_rec            => l_khrv_rec,
6666                                               x_chrv_rec            => x_chrv_rec,
6667                                               x_khrv_rec            => x_khrv_rec
6668                                              );
6669 */
6670 
6671       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6672          RAISE OKC_API.G_EXCEPTION_ERROR;
6673       END IF;
6674 
6675       x_rebook_chr_id := x_chr_id;
6676 
6677 --**********************************************************
6678       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6679                            x_msg_data    => x_msg_data);
6680 
6681   EXCEPTION
6682       WHEN OKC_API.G_EXCEPTION_ERROR THEN
6683          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
6684 			p_api_name  => l_api_name,
6685 			p_pkg_name  => G_PKG_NAME,
6686 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
6687 			x_msg_count => x_msg_count,
6688 			x_msg_data  => x_msg_data,
6689 			p_api_type  => G_API_TYPE);
6690 
6691       WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6692          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
6693 			p_api_name  => l_api_name,
6694 			p_pkg_name  => G_PKG_NAME,
6695 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
6696 			x_msg_count => x_msg_count,
6697 			x_msg_data  => x_msg_data,
6698 			p_api_type  => G_API_TYPE);
6699 
6700       WHEN OTHERS THEN
6701          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
6702 			p_api_name  => l_api_name,
6703 			p_pkg_name  => G_PKG_NAME,
6704 			p_exc_name  => 'OTHERS',
6705 			x_msg_count => x_msg_count,
6706 			x_msg_data  => x_msg_data,
6707 			p_api_type  => G_API_TYPE);
6708 
6709   END create_rebook_contract;
6710 
6711 --Bug# 4212626: start
6712   ------------------------------------------------------------------------------
6713 -- PROCEDURE link_streams
6714 --
6715 --  This procedure links the WORK Streams created during Rebook
6716 --  to the corresponding matching CURR Streams in the original contract and
6717 --  also updates the WORK streams with Source Transaction Id.
6718 --
6719 -- Calls:
6720 -- Called By:
6721 ------------------------------------------------------------------------------
6722   PROCEDURE link_streams(
6723                          p_api_version     IN  NUMBER,
6724                          p_init_msg_list   IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
6725                          x_return_status   OUT NOCOPY VARCHAR2,
6726                          x_msg_count       OUT NOCOPY NUMBER,
6727                          x_msg_data        OUT NOCOPY VARCHAR2,
6728                          p_khr_id          IN  NUMBER
6729                          ) IS
6730 
6731   l_api_name             VARCHAR2(35)    := 'link_streams';
6732   l_proc_name            VARCHAR2(35)    := 'LINK_STREAMS';
6733   l_api_version          CONSTANT NUMBER := 1;
6734 
6735   CURSOR chk_rbk_csr(p_chr_id IN NUMBER) is
6736   SELECT '!',chr.orig_system_id1, ktrx.id
6737   FROM   okc_k_headers_b chr,
6738          okl_trx_contracts ktrx
6739   WHERE  ktrx.khr_id_new = chr.id
6740   AND    ktrx.tsu_code = 'ENTERED'
6741   AND    ktrx.rbr_code is NOT NULL
6742   AND    ktrx.tcn_type = 'TRBK'
6743   AND    chr.id = p_chr_id
6744   AND    chr.orig_system_source_code = 'OKL_REBOOK'
6745   AND    ktrx.representation_type = 'PRIMARY'; -- MGAAP 7263041
6746 
6747   CURSOR chk_mass_rbk_csr (p_chr_id IN NUMBER) IS
6748   SELECT '!', ktrx.id
6749   FROM   okc_k_headers_b chr,
6750          okl_trx_contracts ktrx
6751   WHERE  chr.id          = p_chr_id
6752   AND    ktrx.khr_id     =  chr.id
6753   AND    ktrx.tsu_code   = 'ENTERED'
6754   AND    ktrx.rbr_code   IS NOT NULL
6755   AND    ktrx.tcn_type   = 'TRBK'
6756   AND    ktrx.representation_type = 'PRIMARY' -- MGAAP 7263041
6757   AND    EXISTS (SELECT '1'
6758                  FROM   okl_rbk_selected_contract rbk_khr
6759                  WHERE  rbk_khr.khr_id = chr.id
6760                  AND    rbk_khr.status <> 'PROCESSED');
6761 
6762   CURSOR curr_streams_csr(p_khr_id IN NUMBER) IS
6763   SELECT new_stm.id  new_stm_id,
6764          new_stm.kle_id
6765   FROM   okl_streams new_stm
6766   WHERE  new_stm.khr_id = p_khr_id
6767   AND    new_stm.say_code = 'WORK';
6768 
6769   CURSOR ol_rbk_kle_hist_strms_csr(p_new_stm_id  IN NUMBER,
6770                                    p_rbk_khr_id  IN NUMBER,
6771                                    p_orig_khr_id IN NUMBER) IS
6772   SELECT orig_stm.id  orig_stm_id
6773   FROM   okl_streams new_stm,
6774          okc_k_lines_b cle,
6775          okl_streams orig_stm
6776   WHERE  new_stm.id = p_new_stm_id
6777   AND    cle.id = new_stm.kle_id
6778   AND    cle.dnz_chr_id = p_rbk_khr_id
6779   AND    orig_stm.khr_id = p_orig_khr_id
6780   AND    orig_stm.kle_id = cle.orig_system_id1
6781   AND    orig_stm.sty_id = new_stm.sty_id
6782   AND    NVL(orig_stm.purpose_code,'ORIG') = NVL(new_stm.purpose_code,'ORIG')
6783   AND    orig_stm.say_code  = 'CURR';
6784 
6785   CURSOR ol_rbk_khr_hist_strms_csr(p_new_stm_id  IN NUMBER,
6786                                    p_orig_khr_id IN NUMBER) IS
6787   SELECT orig_stm.id  orig_stm_id
6788   FROM   okl_streams new_stm,
6789          okl_streams orig_stm
6790   WHERE  new_stm.id = p_new_stm_id
6791   AND    orig_stm.khr_id = p_orig_khr_id
6792   AND    orig_stm.kle_id IS NULL
6793   AND    orig_stm.sty_id = new_stm.sty_id
6794   AND    NVL(orig_stm.purpose_code,'ORIG') = NVL(new_stm.purpose_code,'ORIG')
6795   AND    orig_stm.say_code  = 'CURR';
6796 
6797   l_orig_stm_id OKL_STREAMS.ID%TYPE;
6798 
6799   CURSOR mass_rbk_hist_strms_csr(p_new_stm_id IN NUMBER,
6800                                  p_khr_id     IN NUMBER) IS
6801   SELECT orig_stm.id  orig_stm_id
6802   FROM   okl_streams new_stm,
6803          okl_streams orig_stm
6804   WHERE  new_stm.id = p_new_stm_id
6805   AND    orig_stm.khr_id = new_stm.khr_id
6806   AND    NVL(orig_stm.kle_id,-1) = NVL(new_stm.kle_id,-1)
6807   AND    orig_stm.sty_id = new_stm.sty_id
6808   AND    NVL(orig_stm.purpose_code,'ORIG') = NVL(new_stm.purpose_code,'ORIG')
6809   AND    orig_stm.say_code = 'CURR';
6810 
6811   mass_rbk_hist_strms_rec mass_rbk_hist_strms_csr%ROWTYPE;
6812 
6813   l_rbk_khr           VARCHAR2(1);
6814   l_mass_rbk_khr      VARCHAR2(1);
6815   l_orig_khr_id       NUMBER;
6816   l_mass_rbk_trx_id   NUMBER;
6817   l_online_rbk_trx_id NUMBER;
6818 
6819   l_new_strm_tbl stmv_tbl_type;
6820   x_new_strm_tbl stmv_tbl_type;
6821 
6822   l_new_strm_count NUMBER := 0;
6823 
6824   --Bug# 6344223
6825   --Cursor to check whether split asset transaction is in progress for the contract
6826   CURSOR check_split_trx_csr IS
6827   SELECT tas.id
6828   FROM OKL_TXL_ASSETS_B txl, OKL_TRX_ASSETS tas
6829   WHERE txl.tal_type= 'ALI'
6830   AND txl.dnz_khr_id = p_khr_id
6831   AND txl.tas_id = tas.id
6832   AND tas.tas_type = 'ALI'
6833   AND tas.tsu_code = 'ENTERED';
6834 
6835   l_split_trans_id    OKL_TRX_ASSETS.ID%TYPE;
6836   --end Bug# 6344223
6837 
6838   BEGIN
6839     IF (G_DEBUG_ENABLED = 'Y') THEN
6840       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6841     END IF;
6842 
6843       x_return_status := OKL_API.G_RET_STS_SUCCESS;
6844       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6845               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
6846       END IF;
6847       -- call START_ACTIVITY to create savepoint, check compatibility
6848       -- and initialize message list
6849       x_return_status := OKL_API.START_ACTIVITY(
6850 			p_api_name      => l_api_name,
6851 			p_pkg_name      => G_PKG_NAME,
6852 			p_init_msg_list => p_init_msg_list,
6853 			l_api_version   => l_api_version,
6854 			p_api_version   => p_api_version,
6855 			p_api_type      => G_API_TYPE,
6856 			x_return_status => x_return_status);
6857 
6858       -- check if activity started successfully
6859       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6860          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6861       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6862          raise OKL_API.G_EXCEPTION_ERROR;
6863       END IF;
6864 
6865       --Bug# 6344223
6866       OPEN check_split_trx_csr;
6867       FETCH check_split_trx_csr INTO l_split_trans_id;
6868       CLOSE check_split_trx_csr;
6869       --end Bug# 6344223
6870 
6871       --check for mass rebook contract
6872       l_mass_rbk_khr := '?';
6873       l_mass_rbk_trx_id := null;
6874       OPEN chk_mass_rbk_csr (p_chr_id => p_khr_id);
6875       FETCH chk_mass_rbk_csr INTO l_mass_rbk_khr, l_mass_rbk_trx_id;
6876       CLOSE chk_mass_rbk_csr;
6877       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6878               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_mass_rbk_khr: '||l_mass_rbk_khr);
6879         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_mass_rbk_trx_id: '||l_mass_rbk_trx_id);
6880       END IF;
6881 
6882       --check for rebook contract
6883       l_rbk_khr := '?';
6884       l_orig_khr_id := null;
6885       l_online_rbk_trx_id := null;
6886       OPEN chk_rbk_csr (p_chr_id => p_khr_id);
6887       FETCH chk_rbk_csr INTO l_rbk_khr,l_orig_khr_id,l_online_rbk_trx_id;
6888       CLOSE chk_rbk_csr;
6889       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6890               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rbk_khr: '||l_rbk_khr);
6891         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_khr_id: '||l_orig_khr_id);
6892         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_online_rbk_trx_id: '||l_online_rbk_trx_id);
6893       END IF;
6894 
6895       --Added condition l_split_trans_id IS NOT NULL for Bug# 6344223
6896       IF ((l_split_trans_id IS NOT NULL) OR l_mass_rbk_khr = '!' OR  l_rbk_khr = '!') THEN
6897 
6898         l_new_strm_tbl.DELETE;
6899         l_new_strm_count := 0;
6900 
6901         FOR curr_streams_rec IN curr_streams_csr(p_khr_id => p_khr_id)
6902         LOOP
6903 
6904           l_new_strm_count := l_new_strm_count + 1;
6905           l_new_strm_tbl(l_new_strm_count).id  := curr_streams_rec.new_stm_id;
6906 
6907           --Added condition l_split_trans_id IS NOT NULL for Bug# 6344223
6908           IF (l_mass_rbk_khr = '!' OR (l_split_trans_id IS NOT NULL)) THEN
6909           -- Process for Mass Rebook and Split Asset
6910 
6911             --Bug# 6344223
6912             IF (l_mass_rbk_khr = '!') THEN
6913               l_new_strm_tbl(l_new_strm_count).trx_id  := l_mass_rbk_trx_id;
6914             ELSIF (l_split_trans_id IS NOT NULL) THEN
6915               l_new_strm_tbl(l_new_strm_count).trx_id  := l_split_trans_id;
6916             END IF;
6917 
6918             mass_rbk_hist_strms_rec.orig_stm_id := NULL;
6919             OPEN mass_rbk_hist_strms_csr(p_new_stm_id => curr_streams_rec.new_stm_id,
6920                                          p_khr_id     => p_khr_id);
6921             FETCH mass_rbk_hist_strms_csr INTO mass_rbk_hist_strms_rec;
6922             CLOSE mass_rbk_hist_strms_csr;
6923 
6924             IF mass_rbk_hist_strms_rec.orig_stm_id IS NOT NULL THEN
6925               l_new_strm_tbl(l_new_strm_count).link_hist_stream_id := mass_rbk_hist_strms_rec.orig_stm_id;
6926             END IF;
6927 
6928           ELSIF l_rbk_khr = '!' THEN
6929           -- Process for Online Rebook
6930 
6931             l_new_strm_tbl(l_new_strm_count).trx_id  := l_online_rbk_trx_id;
6932 
6933             l_orig_stm_id := NULL;
6934             IF (curr_streams_rec.kle_id IS NULL) THEN
6935             -- Contract Header level stream
6936               OPEN ol_rbk_khr_hist_strms_csr(p_new_stm_id  => curr_streams_rec.new_stm_id,
6937                                              p_orig_khr_id => l_orig_khr_id);
6938               FETCH ol_rbk_khr_hist_strms_csr INTO l_orig_stm_id;
6939               CLOSE ol_rbk_khr_hist_strms_csr;
6940 
6941             ELSE
6942             -- Contract Line level stream
6943               OPEN ol_rbk_kle_hist_strms_csr(p_new_stm_id  => curr_streams_rec.new_stm_id,
6944                                              p_rbk_khr_id  => p_khr_id,
6945                                              p_orig_khr_id => l_orig_khr_id);
6946               FETCH ol_rbk_kle_hist_strms_csr INTO l_orig_stm_id;
6947               CLOSE ol_rbk_kle_hist_strms_csr;
6948             END IF;
6949 
6950             IF l_orig_stm_id IS NOT NULL THEN
6951               l_new_strm_tbl(l_new_strm_count).link_hist_stream_id := l_orig_stm_id;
6952             END IF;
6953 
6954           END IF;
6955 
6956           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6957                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'New Stream ID: '||l_new_strm_tbl(l_new_strm_count).id);
6958             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig Stream ID: '||l_new_strm_tbl(l_new_strm_count).link_hist_stream_id);
6959           END IF;
6960 
6961         END LOOP;
6962 
6963         IF (l_new_strm_tbl.COUNT > 0) THEN
6964 
6965           -- Call Streams api to update Link_Hist_Stream_Id and Trx_Id
6966           okl_streams_pub.update_streams(
6967                                       p_api_version    => 1.0,
6968                                       p_init_msg_list  => OKL_API.G_FALSE,
6969                                       x_return_status  => x_return_status,
6970                                       x_msg_count      => x_msg_count,
6971                                       x_msg_data       => x_msg_data,
6972                                       p_stmv_tbl       => l_new_strm_tbl,
6973                                       x_stmv_tbl       => x_new_strm_tbl
6974                                      );
6975 
6976           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6977                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of New Strms - Trx ID and Hist ID '||x_return_status);
6978           END IF;
6979 
6980           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6981             raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6982           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6983             raise OKL_API.G_EXCEPTION_ERROR;
6984           END IF;
6985         END IF;
6986       END IF;
6987 
6988       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6989                            x_msg_data    => x_msg_data);
6990 
6991   EXCEPTION
6992       when OKL_API.G_EXCEPTION_ERROR then
6993          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6994 			p_api_name  => l_api_name,
6995 			p_pkg_name  => G_PKG_NAME,
6996 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6997 			x_msg_count => x_msg_count,
6998 			x_msg_data  => x_msg_data,
6999 			p_api_type  => G_API_TYPE);
7000 
7001       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7002          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7003 			p_api_name  => l_api_name,
7004 			p_pkg_name  => G_PKG_NAME,
7005 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7006 			x_msg_count => x_msg_count,
7007 			x_msg_data  => x_msg_data,
7008 			p_api_type  => G_API_TYPE);
7009 
7010       when OTHERS then
7011          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7012 			p_api_name  => l_api_name,
7013 			p_pkg_name  => G_PKG_NAME,
7014 			p_exc_name  => 'OTHERS',
7015 			x_msg_count => x_msg_count,
7016 			x_msg_data  => x_msg_data,
7017 			p_api_type  => G_API_TYPE);
7018 
7019   END link_streams;
7020 
7021   --Bug# 4884423
7022   ------------------------------------------------------------------------------
7023 -- PROCEDURE create_pth_disb_adjustment
7024 --
7025 --  This procedure calculates the passthrough disbursement adjustment
7026 --  where there is a difference between amount actually disbursed and amount
7027 --  that should have been disbursed and calls the Disbursement api to create the
7028 --  disbursement transaction. The current streams taken into account for
7029 --  calculating disbursement adjustment are then marked as Disbursment adjusted
7030 --  in order to stop duplicate disbursement.
7031 --
7032 -- Calls:
7033 -- Called By:
7034 ------------------------------------------------------------------------------
7035   PROCEDURE create_pth_disb_adjustment(
7036                          p_api_version     IN  NUMBER,
7037                          p_init_msg_list   IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
7038                          x_return_status   OUT NOCOPY VARCHAR2,
7039                          x_msg_count       OUT NOCOPY NUMBER,
7040                          x_msg_data        OUT NOCOPY VARCHAR2,
7041                          p_rbk_khr_id      IN  NUMBER,
7042                          p_orig_khr_id     IN  NUMBER,
7043                          p_trx_id          IN  NUMBER,
7044                          p_trx_date        IN  DATE
7045                          ) IS
7046 
7047   l_api_name             VARCHAR2(35)    := 'create_pth_disb_adjustment';
7048   l_proc_name            VARCHAR2(35)    := 'CREATE_PTH_DISB_ADJUSTMENT';
7049   l_api_version          CONSTANT NUMBER := 1;
7050 
7051   CURSOR curr_billable_streams_csr(p_khr_id  IN NUMBER) IS
7052   SELECT new_stm.id     new_stm_id,
7053          orig_stm.id    orig_stm_id,
7054          orig_stm.sty_id,
7055          orig_stm.kle_id
7056   FROM   okl_streams new_stm,
7057          okl_strm_type_b sty,
7058          okl_streams orig_stm,
7059          okl_party_payment_hdr pph
7060   WHERE  new_stm.khr_id = p_khr_id
7061   AND    new_stm.say_code = 'CURR'
7062   AND    new_stm.sty_id = sty.id
7063   AND    sty.billable_yn = 'Y'
7064   AND    orig_stm.id = new_stm.link_hist_stream_id
7065   AND    pph.dnz_chr_id = new_stm.khr_id
7066   AND    pph.cle_id = new_stm.kle_id
7067   AND    pph.payout_basis = 'DUE_DATE'
7068   AND    pph.passthru_term = 'BASE';
7069 
7070   CURSOR max_disb_date_csr(p_stm_id IN NUMBER) IS
7071   SELECT MAX(sel.stream_element_date) stream_element_date
7072   FROM okl_strm_elements sel
7073   WHERE sel.stm_id = p_stm_id
7074   AND   sel.date_disbursed IS NOT NULL;
7075 
7076   CURSOR actual_amount_disb_csr(p_stm_id IN NUMBER) IS
7077   SELECT NVL(SUM(sel.amount),0) amount
7078   FROM okl_strm_elements sel
7079   WHERE sel.stm_id = p_stm_id
7080   AND   sel.date_disbursed IS NOT NULL;
7081 
7082   CURSOR amount_to_be_disb_csr(p_stm_id IN NUMBER,
7083                                p_max_disb_date IN DATE) IS
7084   SELECT sel.id sel_id,
7085          NVL(sel.amount,0) amount
7086   FROM okl_strm_elements sel
7087   WHERE sel.stm_id = p_stm_id
7088   AND   sel.stream_element_date <= p_max_disb_date;
7089 
7090   -- Cursor to fetch Streams deleted during rebook
7091   CURSOR del_billable_streams_csr(p_orig_khr_id  IN NUMBER,
7092                                   p_rbk_khr_id   IN NUMBER) IS
7093   SELECT orig_stm.id  orig_stm_id,
7094          orig_stm.sty_id,
7095          orig_stm.kle_id,
7096          cle.lse_id
7097   FROM   okl_streams orig_stm,
7098          okl_strm_type_b sty,
7099          okc_k_lines_b cle,
7100          okl_party_payment_hdr pph
7101   WHERE  orig_stm.khr_id = p_orig_khr_id
7102   AND    orig_stm.say_code = 'CURR'
7103   AND    orig_stm.sty_id = sty.id
7104   AND    orig_stm.sgn_code NOT IN ('INTC','LATE_CALC') -- Bug6472228
7105   AND    sty.billable_yn = 'Y'
7106   AND    cle.id = orig_stm.kle_id
7107   AND    cle.dnz_chr_id = orig_stm.khr_id
7108   AND    pph.dnz_chr_id = orig_stm.khr_id
7109   AND    pph.cle_id = orig_stm.kle_id
7110   AND    pph.payout_basis = 'DUE_DATE'
7111   AND    pph.passthru_term = 'BASE'
7112   AND    NOT EXISTS (SELECT 1
7113                      FROM okl_streams new_stm
7114                      WHERE new_stm.khr_id = p_rbk_khr_id
7115                      AND   new_stm.say_code = 'CURR'
7116                      AND   new_stm.link_hist_stream_id = orig_stm.id);
7117 
7118   l_max_disb_date DATE;
7119   l_actual_amount_disbursed NUMBER;
7120   l_amount_to_be_disbursed NUMBER;
7121   l_disb_adjustment NUMBER;
7122 
7123   l_selv_tbl  selv_tbl_type;
7124   x_selv_tbl  selv_tbl_type;
7125 
7126   l_selv_count NUMBER;
7127   i NUMBER;
7128   l_rebook_adj_tbl OKL_REBOOK_CM_PVT.rebook_adj_tbl_type;
7129 
7130   -- sjalasut, added variable that supports out parameter
7131   lx_disb_rec OKL_BPD_TERMINATION_ADJ_PVT.disb_rec_type;
7132 
7133   BEGIN
7134     IF (G_DEBUG_ENABLED = 'Y') THEN
7135       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
7136     END IF;
7137 
7138       x_return_status := OKL_API.G_RET_STS_SUCCESS;
7139       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7140               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
7141       END IF;
7142       -- call START_ACTIVITY to create savepoint, check compatibility
7143       -- and initialize message list
7144       x_return_status := OKL_API.START_ACTIVITY(
7145 			p_api_name      => l_api_name,
7146 			p_pkg_name      => G_PKG_NAME,
7147 			p_init_msg_list => p_init_msg_list,
7148 			l_api_version   => l_api_version,
7149 			p_api_version   => p_api_version,
7150 			p_api_type      => G_API_TYPE,
7151 			x_return_status => x_return_status);
7152 
7153       -- check if activity started successfully
7154       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7155          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7156       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7157          raise OKL_API.G_EXCEPTION_ERROR;
7158       END IF;
7159 
7160       -- For On-line and Mass rebook, calculate disbursement adjustment
7161       -- for all Current Billable Streams for which disbursement was done
7162       -- in the Original contract
7163 
7164       i := 0;
7165       l_rebook_adj_tbl.DELETE;
7166       FOR curr_billable_streams_rec in curr_billable_streams_csr(p_khr_id => p_rbk_khr_id)
7167       LOOP
7168 
7169         l_max_disb_date := NULL;
7170         OPEN max_disb_date_csr(p_stm_id => curr_billable_streams_rec.orig_stm_id);
7171         FETCH max_disb_date_csr INTO l_max_disb_date;
7172         CLOSE max_disb_date_csr;
7173 
7174         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7175                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'New Stream Id: '||curr_billable_streams_rec.new_stm_id);
7176           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig Stream Id: '||curr_billable_streams_rec.orig_stm_id);
7177           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Max Disbursed Date: '||l_max_disb_date);
7178         END IF;
7179 
7180         IF l_max_disb_date IS NOT NULL THEN
7181 
7182           l_actual_amount_disbursed := 0;
7183           OPEN actual_amount_disb_csr(p_stm_id => curr_billable_streams_rec.orig_stm_id);
7184           FETCH actual_amount_disb_csr INTO l_actual_amount_disbursed;
7185           CLOSE actual_amount_disb_csr;
7186 
7187           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7188                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Actual Amount Disbursed: '||l_actual_amount_disbursed);
7189           END IF;
7190 
7191           l_amount_to_be_disbursed := 0;
7192           l_selv_count := 0;
7193           l_selv_tbl.DELETE;
7194 
7195           FOR amount_to_be_disb_rec IN
7196               amount_to_be_disb_csr(p_stm_id => curr_billable_streams_rec.new_stm_id,
7197                                     p_max_disb_date => l_max_disb_date)
7198           LOOP
7199 
7200             -- Call Streams api to update date_disbursed
7201             l_selv_count := l_selv_count + 1;
7202             l_amount_to_be_disbursed := l_amount_to_be_disbursed + amount_to_be_disb_rec.amount;
7203 
7204             l_selv_tbl(l_selv_count).id        := amount_to_be_disb_rec.sel_id;
7205             l_selv_tbl(l_selv_count).date_disbursed := trunc(SYSDATE);
7206 
7207           END LOOP;
7208 
7209           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7210                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Amount to be Disbursed: '||l_amount_to_be_disbursed);
7211           END IF;
7212 
7213           l_disb_adjustment := l_amount_to_be_disbursed -  l_actual_amount_disbursed;
7214 
7215           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7216                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Disbursement Adjustment: '||l_disb_adjustment);
7217           END IF;
7218 
7219           IF l_disb_adjustment <> 0 THEN
7220             i := i + 1;
7221             l_rebook_adj_tbl(i).khr_id          := p_orig_khr_id;
7222             l_rebook_adj_tbl(i).kle_id          := curr_billable_streams_rec.kle_id;
7223             l_rebook_adj_tbl(i).sty_id          := curr_billable_streams_rec.sty_id;
7224             l_rebook_adj_tbl(i).adjusted_amount := l_disb_adjustment;
7225             l_rebook_adj_tbl(i).date_invoiced   := p_trx_date;
7226 
7227             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7228                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Disbursement Adjustment Record');
7229               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i '||i);
7230               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).khr_id: '||l_rebook_adj_tbl(i).khr_id);
7231               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).kle_id: '||l_rebook_adj_tbl(i).kle_id);
7232               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).sty_id: '||l_rebook_adj_tbl(i).sty_id);
7233               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).adjusted_amount: '||l_rebook_adj_tbl(i).adjusted_amount);
7234               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).date_invoiced: '||l_rebook_adj_tbl(i).date_invoiced);
7235             END IF;
7236 
7237           END IF;
7238 
7239           IF (l_selv_tbl.COUNT > 0) THEN
7240             okl_streams_pub.update_stream_elements(
7241                                       p_api_version    => 1.0,
7242                                       p_init_msg_list  => OKL_API.G_FALSE,
7243                                       x_return_status  => x_return_status,
7244                                       x_msg_count      => x_msg_count,
7245                                       x_msg_data       => x_msg_data,
7246                                       p_selv_tbl       => l_selv_tbl,
7247                                       x_selv_tbl       => x_selv_tbl
7248                                      );
7249 
7250             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7251                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of Stream Elements - Date Disbursed '||x_return_status);
7252             END IF;
7253 
7254             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7255               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7256             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7257               raise OKL_API.G_EXCEPTION_ERROR;
7258             END IF;
7259           END IF;
7260 
7261         END IF;
7262       END LOOP;
7263 
7264       -- For On-line rebook, calculate billing adjustment
7265       -- for Streams deleted during Rebook
7266       -- Insurance Streams are ignored by this process, so no
7267       -- adjustment will be calculated for Insurance Streams here
7268       IF (p_rbk_khr_id <> p_orig_khr_id) THEN  -- Online rebook
7269 
7270         FOR del_billable_streams_rec IN
7271             del_billable_streams_csr(p_orig_khr_id  => p_orig_khr_id,
7272                                      p_rbk_khr_id   => p_rbk_khr_id)
7273         LOOP
7274           -- Do not process Insurance Streams
7275           IF (NVL(del_billable_streams_rec.lse_id,-1) <> G_INSURANCE_LSE_ID) THEN
7276 
7277             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7278                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Deleted Orig Stream Id: '||del_billable_streams_rec.orig_stm_id);
7279             END IF;
7280 
7281             l_actual_amount_disbursed := 0;
7282             OPEN actual_amount_disb_csr(p_stm_id => del_billable_streams_rec.orig_stm_id);
7283             FETCH actual_amount_disb_csr INTO l_actual_amount_disbursed;
7284             CLOSE actual_amount_disb_csr;
7285 
7286             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7287                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Actual Amount Disbursed: '||l_actual_amount_disbursed);
7288             END IF;
7289 
7290             l_disb_adjustment := -1 * l_actual_amount_disbursed;
7291 
7292             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7293                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Disbursement Adjustment: '||l_disb_adjustment);
7294             END IF;
7295 
7296             IF l_actual_amount_disbursed <> 0 THEN
7297               i := i + 1;
7298               l_rebook_adj_tbl(i).khr_id          := p_orig_khr_id;
7299               l_rebook_adj_tbl(i).kle_id          := del_billable_streams_rec.kle_id;
7300               l_rebook_adj_tbl(i).sty_id          := del_billable_streams_rec.sty_id;
7301               l_rebook_adj_tbl(i).adjusted_amount := l_disb_adjustment;
7302               l_rebook_adj_tbl(i).date_invoiced   := p_trx_date;
7303 
7304               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7305                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Disbursement Adjustment Record');
7306                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i '||i);
7307                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).khr_id: '||l_rebook_adj_tbl(i).khr_id);
7308                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).kle_id: '||l_rebook_adj_tbl(i).kle_id);
7309                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).sty_id: '||l_rebook_adj_tbl(i).sty_id);
7310                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).adjusted_amount: '||l_rebook_adj_tbl(i).adjusted_amount);
7311                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).date_invoiced: '||l_rebook_adj_tbl(i).date_invoiced);
7312               END IF;
7313 
7314             END IF;
7315           END IF;
7316         END LOOP;
7317 
7318       END IF;
7319 
7320       IF (l_rebook_adj_tbl.COUNT > 0) THEN
7321 
7322         -- sjalasut, added code for Contract Rebook Enhancement. START
7323         OKL_BPD_TERMINATION_ADJ_PVT.create_rbk_passthru_adj
7324           (p_api_version    => p_api_version
7325           ,p_init_msg_list  => p_init_msg_list
7326           ,p_rebook_adj_tbl => l_rebook_adj_tbl
7327           ,x_disb_rec       => lx_disb_rec
7328           ,x_return_status  => x_return_status
7329           ,x_msg_count      => x_msg_count
7330           ,x_msg_data       => x_msg_data);
7331 
7332         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7333                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After calling OKL_BPD_TERMINATION_ADJ_PVT.create_rbk_passthru_adj '||x_return_status);
7334         END IF;
7335 
7336         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7337           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7338         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7339           RAISE OKL_API.G_EXCEPTION_ERROR;
7340         END IF;
7341         -- sjalasut, added code for Contract Rebook Enhancement. END
7342 
7343       END IF;
7344 
7345       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
7346                            x_msg_data    => x_msg_data);
7347 
7348   EXCEPTION
7349       when OKL_API.G_EXCEPTION_ERROR then
7350          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7351 			p_api_name  => l_api_name,
7352 			p_pkg_name  => G_PKG_NAME,
7353 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7354 			x_msg_count => x_msg_count,
7355 			x_msg_data  => x_msg_data,
7356 			p_api_type  => G_API_TYPE);
7357 
7358       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7359          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7360 			p_api_name  => l_api_name,
7361 			p_pkg_name  => G_PKG_NAME,
7362 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7363 			x_msg_count => x_msg_count,
7364 			x_msg_data  => x_msg_data,
7365 			p_api_type  => G_API_TYPE);
7366 
7367       when OTHERS then
7368          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7369 			p_api_name  => l_api_name,
7370 			p_pkg_name  => G_PKG_NAME,
7371 			p_exc_name  => 'OTHERS',
7372 			x_msg_count => x_msg_count,
7373 			x_msg_data  => x_msg_data,
7374 			p_api_type  => G_API_TYPE);
7375 
7376   END create_pth_disb_adjustment;
7377   --Bug# 4884423
7378 
7379   ------------------------------------------------------------------------------
7380 -- PROCEDURE create_billing_adjustment
7381 --
7382 --  This procedure calculates the billing adjustment for all billable streams
7383 --  where there is a difference between amount actually billed and amount
7384 --  that should have been billed and calls the Billing api to create the
7385 --  billing transaction. The current streams taken into account for
7386 --  calculating billing adjustment are then marked as Billing adjusted in order
7387 --  to stop duplicate billing.
7388 --
7389 -- Calls:
7390 -- Called By:
7391 ------------------------------------------------------------------------------
7392   PROCEDURE create_billing_adjustment(
7393                          p_api_version     IN  NUMBER,
7394                          p_init_msg_list   IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
7395                          x_return_status   OUT NOCOPY VARCHAR2,
7396                          x_msg_count       OUT NOCOPY NUMBER,
7397                          x_msg_data        OUT NOCOPY VARCHAR2,
7398                          p_rbk_khr_id      IN  NUMBER,
7399                          p_orig_khr_id     IN  NUMBER,
7400                          p_trx_id          IN  NUMBER,
7401                          p_trx_date        IN  DATE
7402                          ) IS
7403 
7404   l_api_name             VARCHAR2(35)    := 'create_billing_adjustment';
7405   l_proc_name            VARCHAR2(35)    := 'CREATE_BILLING_ADJUSTMENT';
7406   l_api_version          CONSTANT NUMBER := 1;
7407 
7408   CURSOR curr_billable_streams_csr(p_khr_id  IN NUMBER) IS
7409   SELECT new_stm.id     new_stm_id,
7410          orig_stm.id    orig_stm_id,
7411          orig_stm.sty_id,
7412          orig_stm.kle_id
7413   FROM   okl_streams new_stm,
7414          okl_strm_type_b sty,
7415          okl_streams orig_stm
7416   WHERE  new_stm.khr_id = p_khr_id
7417   AND    new_stm.say_code = 'CURR'
7418   AND    new_stm.sty_id = sty.id
7419   AND    sty.billable_yn = 'Y'
7420   AND    orig_stm.id = new_stm.link_hist_stream_id;
7421 
7422   CURSOR max_bill_date_csr(p_stm_id IN NUMBER) IS
7423   SELECT MAX(sel.stream_element_date) stream_element_date
7424   FROM okl_strm_elements sel
7425   WHERE sel.stm_id = p_stm_id
7426   AND   sel.date_billed IS NOT NULL;
7427 
7428   CURSOR actual_amount_billed_csr(p_stm_id IN NUMBER) IS
7429   SELECT NVL(SUM(sel.amount),0) amount
7430   FROM okl_strm_elements sel
7431   WHERE sel.stm_id = p_stm_id
7432   AND   sel.date_billed IS NOT NULL;
7433 
7434   CURSOR amount_to_be_billed_csr(p_stm_id IN NUMBER,
7435                                  p_max_bill_date IN DATE) IS
7436   SELECT sel.id sel_id,
7437          NVL(sel.amount,0) amount
7438   FROM okl_strm_elements sel
7439   WHERE sel.stm_id = p_stm_id
7440   AND   sel.stream_element_date <= p_max_bill_date;
7441 
7442   -- Cursor to fetch Streams deleted during rebook
7443   CURSOR del_billable_streams_csr(p_orig_khr_id  IN NUMBER,
7444                                   p_rbk_khr_id   IN NUMBER) IS
7445   SELECT orig_stm.id  orig_stm_id,
7446          orig_stm.sty_id,
7447          orig_stm.kle_id,
7448          cle.lse_id
7449   FROM   okl_streams orig_stm,
7450          okl_strm_type_b sty,
7451          okc_k_lines_b cle
7452   WHERE  orig_stm.khr_id = p_orig_khr_id
7453   AND    orig_stm.say_code = 'CURR'
7454   AND    orig_stm.sty_id = sty.id
7455   AND    orig_stm.sgn_code NOT IN ('INTC','LATE_CALC') -- Bug 6472228
7456   -- gboomina Bug 6129455 - Start
7457   AND    sty.STREAM_TYPE_PURPOSE <>'ACTUAL_PROPERTY_TAX'
7458   -- gboomina Bug 6129455 - End
7459   AND    sty.billable_yn = 'Y'
7460   AND    cle.id(+) = orig_stm.kle_id
7461   AND    cle.dnz_chr_id(+) = orig_stm.khr_id
7462   AND    NOT EXISTS (SELECT 1
7463                      FROM okl_streams new_stm
7464                      WHERE new_stm.khr_id = p_rbk_khr_id
7465                      AND   new_stm.say_code = 'CURR'
7466                      AND   new_stm.link_hist_stream_id = orig_stm.id);
7467 
7468   l_max_bill_date DATE;
7469   l_actual_amount_billed NUMBER;
7470   l_amount_to_be_billed NUMBER;
7471   l_billing_adjustment NUMBER;
7472 
7473   l_selv_tbl  selv_tbl_type;
7474   x_selv_tbl  selv_tbl_type;
7475 
7476   l_selv_count NUMBER;
7477   i NUMBER;
7478   l_rebook_adj_tbl OKL_REBOOK_CM_PVT.rebook_adj_tbl_type;
7479 
7480   -- sjalasut, added variable that supports out parameter
7481   lx_disb_rec OKL_BPD_TERMINATION_ADJ_PVT.disb_rec_type;
7482 
7483   BEGIN
7484     IF (G_DEBUG_ENABLED = 'Y') THEN
7485       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
7486     END IF;
7487 
7488       x_return_status := OKL_API.G_RET_STS_SUCCESS;
7489       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7490               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
7491       END IF;
7492       -- call START_ACTIVITY to create savepoint, check compatibility
7493       -- and initialize message list
7494       x_return_status := OKL_API.START_ACTIVITY(
7495 			p_api_name      => l_api_name,
7496 			p_pkg_name      => G_PKG_NAME,
7497 			p_init_msg_list => p_init_msg_list,
7498 			l_api_version   => l_api_version,
7499 			p_api_version   => p_api_version,
7500 			p_api_type      => G_API_TYPE,
7501 			x_return_status => x_return_status);
7502 
7503       -- check if activity started successfully
7504       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7505          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7506       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7507          raise OKL_API.G_EXCEPTION_ERROR;
7508       END IF;
7509 
7510       -- For On-line and Mass rebook, calculate billing adjustment
7511       -- for all Current Billable Streams for which billing was done
7512       -- in the Original contract
7513 
7514       i := 0;
7515       l_rebook_adj_tbl.DELETE;
7516       FOR curr_billable_streams_rec in curr_billable_streams_csr(p_khr_id => p_rbk_khr_id)
7517       LOOP
7518 
7519         l_max_bill_date := NULL;
7520         OPEN max_bill_date_csr(p_stm_id => curr_billable_streams_rec.orig_stm_id);
7521         FETCH max_bill_date_csr INTO l_max_bill_date;
7522         CLOSE max_bill_date_csr;
7523 
7524         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7525                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'New Stream Id: '||curr_billable_streams_rec.new_stm_id);
7526           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig Stream Id: '||curr_billable_streams_rec.orig_stm_id);
7527           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Max Bill Date: '||l_max_bill_date);
7528         END IF;
7529 
7530         IF l_max_bill_date IS NOT NULL THEN
7531 
7532           l_actual_amount_billed := 0;
7533           OPEN actual_amount_billed_csr(p_stm_id => curr_billable_streams_rec.orig_stm_id);
7534           FETCH actual_amount_billed_csr INTO l_actual_amount_billed;
7535           CLOSE actual_amount_billed_csr;
7536 
7537           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7538                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Actual Amount Billed: '||l_actual_amount_billed);
7539           END IF;
7540 
7541           l_amount_to_be_billed := 0;
7542           l_selv_count := 0;
7543           l_selv_tbl.DELETE;
7544 
7545           FOR amount_to_be_billed_rec IN
7546               amount_to_be_billed_csr(p_stm_id => curr_billable_streams_rec.new_stm_id,
7547                                       p_max_bill_date => l_max_bill_date)
7548           LOOP
7549 
7550             -- Call Streams api to update date_billed, bill_adj_flag
7551             l_selv_count := l_selv_count + 1;
7552             l_amount_to_be_billed := l_amount_to_be_billed + amount_to_be_billed_rec.amount;
7553 
7554             l_selv_tbl(l_selv_count).id        := amount_to_be_billed_rec.sel_id;
7555             l_selv_tbl(l_selv_count).date_billed := SYSDATE;
7556             l_selv_tbl(l_selv_count).bill_adj_flag  := 'Y';
7557 
7558           END LOOP;
7559 
7560           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7561                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Amount to be Billed: '||l_amount_to_be_billed);
7562           END IF;
7563 
7564           l_billing_adjustment := l_amount_to_be_billed -  l_actual_amount_billed;
7565 
7566           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7567                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Billing Adjustment: '||l_billing_adjustment);
7568           END IF;
7569 
7570           IF l_billing_adjustment <> 0 THEN
7571             i := i + 1;
7572             l_rebook_adj_tbl(i).khr_id          := p_orig_khr_id;
7573             l_rebook_adj_tbl(i).kle_id          := curr_billable_streams_rec.kle_id;
7574             l_rebook_adj_tbl(i).sty_id          := curr_billable_streams_rec.sty_id;
7575             l_rebook_adj_tbl(i).adjusted_amount := l_billing_adjustment;
7576             l_rebook_adj_tbl(i).date_invoiced   := p_trx_date;
7577 
7578             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7579                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Billing Adjustment Record');
7580               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i '||i);
7581               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).khr_id: '||l_rebook_adj_tbl(i).khr_id);
7582               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).kle_id: '||l_rebook_adj_tbl(i).kle_id);
7583               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).sty_id: '||l_rebook_adj_tbl(i).sty_id);
7584               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).adjusted_amount: '||l_rebook_adj_tbl(i).adjusted_amount);
7585               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).date_invoiced: '||l_rebook_adj_tbl(i).date_invoiced);
7586             END IF;
7587 
7588           END IF;
7589 
7590           IF (l_selv_tbl.COUNT > 0) THEN
7591             okl_streams_pub.update_stream_elements(
7592                                       p_api_version    => 1.0,
7593                                       p_init_msg_list  => OKL_API.G_FALSE,
7594                                       x_return_status  => x_return_status,
7595                                       x_msg_count      => x_msg_count,
7596                                       x_msg_data       => x_msg_data,
7597                                       p_selv_tbl       => l_selv_tbl,
7598                                       x_selv_tbl       => x_selv_tbl
7599                                      );
7600 
7601             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7602                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of Stream Elements - Date Billed and Bill Adj Flag '||x_return_status);
7603             END IF;
7604 
7605             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7606               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7607             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7608               raise OKL_API.G_EXCEPTION_ERROR;
7609             END IF;
7610           END IF;
7611 
7612         END IF;
7613       END LOOP;
7614 
7615       -- For On-line rebook, calculate billing adjustment
7616       -- for Streams deleted during Rebook
7617       -- Insurance Streams are ignored by this process, so no
7618       -- adjustment will be calculated for Insurance Streams here
7619       IF (p_rbk_khr_id <> p_orig_khr_id) THEN  -- Online rebook
7620 
7621         FOR del_billable_streams_rec IN
7622             del_billable_streams_csr(p_orig_khr_id  => p_orig_khr_id,
7623                                      p_rbk_khr_id   => p_rbk_khr_id)
7624         LOOP
7625           -- Do not process Insurance Streams
7626           IF (NVL(del_billable_streams_rec.lse_id,-1) <> G_INSURANCE_LSE_ID) THEN
7627 
7628             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7629                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Deleted Orig Stream Id: '||del_billable_streams_rec.orig_stm_id);
7630             END IF;
7631 
7632             l_actual_amount_billed := 0;
7633             OPEN actual_amount_billed_csr(p_stm_id => del_billable_streams_rec.orig_stm_id);
7634             FETCH actual_amount_billed_csr INTO l_actual_amount_billed;
7635             CLOSE actual_amount_billed_csr;
7636 
7637             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7638                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Actual Amount Billed: '||l_actual_amount_billed);
7639             END IF;
7640 
7641             l_billing_adjustment := -1 * l_actual_amount_billed;
7642 
7643             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7644                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Billing Adjustment: '||l_billing_adjustment);
7645             END IF;
7646 
7647             IF l_actual_amount_billed <> 0 THEN
7648               i := i + 1;
7649               l_rebook_adj_tbl(i).khr_id          := p_orig_khr_id;
7650               l_rebook_adj_tbl(i).kle_id          := del_billable_streams_rec.kle_id;
7651               l_rebook_adj_tbl(i).sty_id          := del_billable_streams_rec.sty_id;
7652               l_rebook_adj_tbl(i).adjusted_amount := l_billing_adjustment;
7653               l_rebook_adj_tbl(i).date_invoiced   := p_trx_date;
7654 
7655               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7656                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Billing Adjustment Record');
7657                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i '||i);
7658                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).khr_id: '||l_rebook_adj_tbl(i).khr_id);
7659                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).kle_id: '||l_rebook_adj_tbl(i).kle_id);
7660                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).sty_id: '||l_rebook_adj_tbl(i).sty_id);
7661                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).adjusted_amount: '||l_rebook_adj_tbl(i).adjusted_amount);
7662                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rebook_adj_tbl(i).date_invoiced: '||l_rebook_adj_tbl(i).date_invoiced);
7663               END IF;
7664 
7665             END IF;
7666           END IF;
7667         END LOOP;
7668 
7669       END IF;
7670 
7671       IF (l_rebook_adj_tbl.COUNT > 0) THEN
7672         OKL_REBOOK_CM_PVT.Rebook_Bill_adjustments
7673           (p_api_version          => p_api_version
7674           ,p_init_msg_list        => p_init_msg_list
7675           ,x_return_status        => x_return_status
7676           ,x_msg_count            => x_msg_count
7677           ,x_msg_data             => x_msg_data
7678           ,p_commit               => OKL_API.G_FALSE
7679           ,p_rebook_adj_tbl       => l_rebook_adj_tbl
7680           );
7681 
7682         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7683                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After calling OKL_REBOOK_CM_PVT.Rebook_Bill_adjustments '||x_return_status);
7684         END IF;
7685 
7686         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7687           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7688         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7689           raise OKL_API.G_EXCEPTION_ERROR;
7690         END IF;
7691 
7692         --Bug# 4884423
7693         --Added new procedure for passthrough adjustments
7694         /*
7695         -- sjalasut, added code for Contract Rebook Enhancement. START
7696         OKL_BPD_TERMINATION_ADJ_PVT.create_rbk_passthru_adj(p_api_version    => p_api_version
7697                                                            ,p_init_msg_list  => p_init_msg_list
7698                                                            ,p_rebook_adj_tbl => l_rebook_adj_tbl
7699                                                            ,x_disb_rec       => lx_disb_rec
7700                                                            ,x_return_status  => x_return_status
7701                                                            ,x_msg_count      => x_msg_count
7702                                                            ,x_msg_data       => x_msg_data
7703                                                            );
7704         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7705           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7706         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7707           RAISE OKL_API.G_EXCEPTION_ERROR;
7708         END IF;
7709         -- sjalasut, added code for Contract Rebook Enhancement. END
7710         */
7711 
7712       END IF;
7713 
7714       --Bug# 4884423
7715       OKL_CONTRACT_REBOOK_PVT.create_pth_disb_adjustment
7716           (p_api_version     => p_api_version,
7717            p_init_msg_list   => p_init_msg_list,
7718            x_return_status   => x_return_status,
7719            x_msg_count       => x_msg_count,
7720            x_msg_data        => x_msg_data,
7721            p_rbk_khr_id      => p_rbk_khr_id,
7722            p_orig_khr_id     => p_orig_khr_id,
7723            p_trx_id          => p_trx_id,
7724            p_trx_date        => p_trx_date
7725           );
7726 
7727       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7728         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7729       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7730         RAISE OKL_API.G_EXCEPTION_ERROR;
7731       END IF;
7732 
7733       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
7734                            x_msg_data    => x_msg_data);
7735 
7736   EXCEPTION
7737       when OKL_API.G_EXCEPTION_ERROR then
7738          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7739 			p_api_name  => l_api_name,
7740 			p_pkg_name  => G_PKG_NAME,
7741 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7742 			x_msg_count => x_msg_count,
7743 			x_msg_data  => x_msg_data,
7744 			p_api_type  => G_API_TYPE);
7745 
7746       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7747          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7748 			p_api_name  => l_api_name,
7749 			p_pkg_name  => G_PKG_NAME,
7750 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7751 			x_msg_count => x_msg_count,
7752 			x_msg_data  => x_msg_data,
7753 			p_api_type  => G_API_TYPE);
7754 
7755       when OTHERS then
7756          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7757 			p_api_name  => l_api_name,
7758 			p_pkg_name  => G_PKG_NAME,
7759 			p_exc_name  => 'OTHERS',
7760 			x_msg_count => x_msg_count,
7761 			x_msg_data  => x_msg_data,
7762 			p_api_type  => G_API_TYPE);
7763 
7764   END create_billing_adjustment;
7765 
7766 
7767 -- dedey, Bug#4264314
7768 /*
7769 
7770   ------------------------------------------------------------------------------
7771 -- PROCEDURE create_accrual_adjustment
7772 --
7773 --  This procedure calculates the accrual adjustment for all accrual streams
7774 --  where there is a difference between amount actually accrued and amount
7775 --  that should have been accrued and calls the Accrual api to make the
7776 --  accrual adjustment. The current streams taken into account for
7777 --  calculating accrual adjustment are then marked as Accrual adjusted in order
7778 --  to stop duplicate accrual.
7779 --
7780 -- Calls:
7781 -- Called By:
7782 ------------------------------------------------------------------------------
7783   PROCEDURE create_accrual_adjustment(
7784                          p_api_version     IN  NUMBER,
7785                          p_init_msg_list   IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
7786                          x_return_status   OUT NOCOPY VARCHAR2,
7787                          x_msg_count       OUT NOCOPY NUMBER,
7788                          x_msg_data        OUT NOCOPY VARCHAR2,
7789                          p_rbk_khr_id      IN  NUMBER,
7790                          p_orig_khr_id     IN  NUMBER,
7791                          p_trx_id          IN  NUMBER,
7792                          p_trx_date        IN  DATE
7793                          ) IS
7794 
7795   l_api_name             VARCHAR2(35)    := 'create_accrual_adjustment';
7796   l_proc_name            VARCHAR2(35)    := 'CREATE_ACCRUAL_ADJUSTMENT';
7797   l_api_version          CONSTANT NUMBER := 1;
7798 
7799   CURSOR curr_accrual_streams_csr(p_khr_id  IN NUMBER) IS
7800   SELECT new_stm.id   new_stm_id,
7801          orig_stm.id  orig_stm_id,
7802          orig_stm.sty_id,
7803          orig_stm.kle_id,
7804          styt.name
7805   FROM   okl_streams new_stm,
7806          okl_prod_strm_types psty,
7807          okl_k_headers khr,
7808          okl_streams orig_stm,
7809          okl_strm_type_tl styt
7810   WHERE  khr.id = p_khr_id
7811   AND    psty.pdt_id = khr.pdt_id
7812   AND    psty.accrual_yn = 'Y'
7813   AND    psty.sty_id = new_stm.sty_id
7814   AND    new_stm.khr_id = khr.id
7815   AND    new_stm.say_code = 'CURR'
7816   AND    orig_stm.id = new_stm.link_hist_stream_id
7817   AND    styt.id = orig_stm.sty_id
7818   AND    styt.language = USERENV('LANG');
7819 
7820   CURSOR max_accrual_date_csr(p_stm_id IN NUMBER) IS
7821   SELECT MAX(sel.stream_element_date) stream_element_date
7822   FROM okl_strm_elements sel
7823   WHERE sel.stm_id = p_stm_id
7824   AND   sel.accrued_yn IS NOT NULL;
7825 
7826   CURSOR actual_amount_accrued_csr(p_stm_id IN NUMBER) IS
7827   SELECT NVL(SUM(sel.amount),0) amount
7828   FROM okl_strm_elements sel
7829   WHERE sel.stm_id = p_stm_id
7830   AND   sel.accrued_yn IS NOT NULL;
7831 
7832   CURSOR amount_to_be_accrued_csr(p_stm_id IN NUMBER,
7833                                   p_max_accrual_date IN DATE) IS
7834   SELECT sel.id sel_id,
7835          NVL(sel.amount,0) amount
7836   FROM okl_strm_elements sel
7837   WHERE sel.stm_id = p_stm_id
7838   AND   sel.stream_element_date <= p_max_accrual_date;
7839 
7840   -- Cursor to fetch Streams deleted during rebook
7841   CURSOR del_accrual_streams_csr(p_orig_khr_id  IN NUMBER,
7842                                  p_rbk_khr_id   IN NUMBER) IS
7843   SELECT orig_stm.id orig_stm_id,
7844          orig_stm.sty_id,
7845          orig_stm.kle_id,
7846          styt.name,
7847          cle.lse_id
7848   FROM   okl_streams orig_stm,
7849          okl_prod_strm_types psty,
7850          okl_k_headers khr,
7851          okc_k_lines_b cle,
7852          okl_strm_type_tl styt
7853   WHERE  khr.id = p_orig_khr_id
7854   AND    psty.pdt_id = khr.pdt_id
7855   AND    psty.accrual_yn = 'Y'
7856   AND    psty.sty_id = orig_stm.sty_id
7857   AND    orig_stm.khr_id = khr.id
7858   AND    orig_stm.say_code = 'CURR'
7859   AND    cle.id(+) = orig_stm.kle_id
7860   AND    cle.dnz_chr_id(+) = orig_stm.khr_id
7861   AND    NOT EXISTS (SELECT 1
7862                      FROM okl_streams new_stm
7863                      WHERE new_stm.khr_id = p_rbk_khr_id
7864                      AND   new_stm.say_code = 'CURR'
7865                      AND   new_stm.link_hist_stream_id = orig_stm.id)
7866   AND    styt.id = orig_stm.sty_id
7867   AND    styt.language = USERENV('LANG');
7868 
7869   l_max_accrual_date DATE;
7870   l_actual_amount_accrued NUMBER;
7871   l_amount_to_be_accrued NUMBER;
7872   l_accrual_adjustment NUMBER;
7873 
7874   l_selv_tbl    selv_tbl_type;
7875   x_selv_tbl    selv_tbl_type;
7876 
7877   l_selv_count  NUMBER;
7878 
7879   i             NUMBER;
7880   lx_trx_number OKL_TRX_CONTRACTS.trx_number%TYPE;
7881   l_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
7882   l_stream_tbl  OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
7883   l_gl_date     DATE;
7884 
7885   BEGIN
7886 
7887       x_return_status := OKL_API.G_RET_STS_SUCCESS;
7888       debug_message(l_proc_name);
7889       -- call START_ACTIVITY to create savepoint, check compatibility
7890       -- and initialize message list
7891       x_return_status := OKL_API.START_ACTIVITY(
7892 			p_api_name      => l_api_name,
7893 			p_pkg_name      => G_PKG_NAME,
7894 			p_init_msg_list => p_init_msg_list,
7895 			l_api_version   => l_api_version,
7896 			p_api_version   => p_api_version,
7897 			p_api_type      => G_API_TYPE,
7898 			x_return_status => x_return_status);
7899 
7900       -- check if activity started successfully
7901       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7902          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7903       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7904          raise OKL_API.G_EXCEPTION_ERROR;
7905       END IF;
7906 
7907       -- For On-line and Mass rebook, calculate accrual adjustment
7908       -- for all Current Accrual Streams for which Accruals were generated
7909       -- in the Original contract
7910 
7911       i := 0;
7912       l_stream_tbl.DELETE;
7913       FOR curr_accrual_streams_rec in curr_accrual_streams_csr(p_khr_id => p_rbk_khr_id)
7914       LOOP
7915 
7916         l_max_accrual_date := NULL;
7917         OPEN max_accrual_date_csr(p_stm_id => curr_accrual_streams_rec.orig_stm_id);
7918         FETCH max_accrual_date_csr INTO l_max_accrual_date;
7919         CLOSE max_accrual_date_csr;
7920 
7921         debug_message('New Stream Id: '||curr_accrual_streams_rec.new_stm_id);
7922         debug_message('Orig Stream Id: '||curr_accrual_streams_rec.orig_stm_id);
7923         debug_message('Max Accrual Date: '||l_max_accrual_date);
7924 
7925         IF l_max_accrual_date IS NOT NULL THEN
7926 
7927           l_actual_amount_accrued := 0;
7928           OPEN actual_amount_accrued_csr(p_stm_id => curr_accrual_streams_rec.orig_stm_id);
7929           FETCH actual_amount_accrued_csr INTO l_actual_amount_accrued;
7930           CLOSE actual_amount_accrued_csr;
7931 
7932           debug_message('Actual Amount Accrued: '||l_actual_amount_accrued);
7933 
7934           l_amount_to_be_accrued := 0;
7935           l_selv_count := 0;
7936           l_selv_tbl.DELETE;
7937 
7938           FOR amount_to_be_accrued_rec IN
7939               amount_to_be_accrued_csr(p_stm_id => curr_accrual_streams_rec.new_stm_id,
7940                                       p_max_accrual_date => l_max_accrual_date)
7941           LOOP
7942 
7943             -- Call Streams api to update accrued_yn, accrual_adj_flag
7944             l_selv_count := l_selv_count + 1;
7945             l_amount_to_be_accrued := l_amount_to_be_accrued + amount_to_be_accrued_rec.amount;
7946 
7947             l_selv_tbl(l_selv_count).id        := amount_to_be_accrued_rec.sel_id;
7948             l_selv_tbl(l_selv_count).accrued_yn := 'Y';
7949             l_selv_tbl(l_selv_count).accrual_adj_flag  := 'Y';
7950 
7951           END LOOP;
7952 
7953           debug_message('Amount to be Accrued: '||l_amount_to_be_accrued);
7954 
7955           l_accrual_adjustment := l_amount_to_be_accrued -  l_actual_amount_accrued;
7956 
7957           debug_message('Accrual Adjustment: '||l_accrual_adjustment);
7958 
7959           IF l_accrual_adjustment <> 0 THEN
7960             i := i + 1;
7961             l_stream_tbl(i).stream_type_id   := curr_accrual_streams_rec.sty_id;
7962             l_stream_tbl(i).stream_type_name := curr_accrual_streams_rec.name;
7963             l_stream_tbl(i).stream_amount    := l_accrual_adjustment;
7964             l_stream_tbl(i).kle_id           := curr_accrual_streams_rec.kle_id;
7965 
7966             debug_message('Accrual Adjustment Record');
7967             debug_message('i '||i);
7968             debug_message('l_stream_tbl(i).stream_type_id: '||l_stream_tbl(i).stream_type_id);
7969             debug_message('l_stream_tbl(i).stream_type_name: '||l_stream_tbl(i).stream_type_name);
7970             debug_message('l_stream_tbl(i).stream_amount: '||l_stream_tbl(i).stream_amount);
7971             debug_message('l_stream_tbl(i).kle_id: '||l_stream_tbl(i).kle_id);
7972           END IF;
7973 
7974           IF (l_selv_tbl.COUNT > 0) THEN
7975             okl_streams_pub.update_stream_elements(
7976                                       p_api_version    => 1.0,
7977                                       p_init_msg_list  => OKL_API.G_FALSE,
7978                                       x_return_status  => x_return_status,
7979                                       x_msg_count      => x_msg_count,
7980                                       x_msg_data       => x_msg_data,
7981                                       p_selv_tbl       => l_selv_tbl,
7982                                       x_selv_tbl       => x_selv_tbl
7983                                      );
7984 
7985             debug_message('After Update of Stream Elements - Accrued Yn and Accrual Adj Flag '||x_return_status);
7986 
7987             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7988               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7989             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7990               raise OKL_API.G_EXCEPTION_ERROR;
7991             END IF;
7992           END IF;
7993 
7994         END IF;
7995       END LOOP;
7996 
7997       -- For On-line rebook, calculate accrual adjustment
7998       -- for Streams deleted during Rebook
7999       -- Insurance Streams are ignored by this process, so no
8000       -- adjustment will be calculated for Insurance Streams here
8001       IF (p_rbk_khr_id <> p_orig_khr_id) THEN  -- Online rebook
8002 
8003         FOR del_accrual_streams_rec IN
8004             del_accrual_streams_csr(p_orig_khr_id  => p_orig_khr_id,
8005                                     p_rbk_khr_id   => p_rbk_khr_id)
8006         LOOP
8007 
8008           -- Do not process Insurance Streams
8009           IF (NVL(del_accrual_streams_rec.lse_id,-1) <> G_INSURANCE_LSE_ID) THEN
8010 
8011             debug_message('Deleted Orig Stream Id: '||del_accrual_streams_rec.orig_stm_id);
8012 
8013             l_actual_amount_accrued := 0;
8014             OPEN actual_amount_accrued_csr(p_stm_id => del_accrual_streams_rec.orig_stm_id);
8015             FETCH actual_amount_accrued_csr INTO l_actual_amount_accrued;
8016             CLOSE actual_amount_accrued_csr;
8017 
8018             debug_message('Actual Amount Accrued: '||l_actual_amount_accrued);
8019 
8020             l_accrual_adjustment := -1 * l_actual_amount_accrued;
8021 
8022             debug_message('Accrual Adjustment: '||l_accrual_adjustment);
8023 
8024             IF l_actual_amount_accrued <> 0 THEN
8025               i := i + 1;
8026               l_stream_tbl(i).stream_type_id   := del_accrual_streams_rec.sty_id;
8027               l_stream_tbl(i).stream_type_name := del_accrual_streams_rec.name;
8028               l_stream_tbl(i).stream_amount    := l_accrual_adjustment;
8029               l_stream_tbl(i).kle_id           := del_accrual_streams_rec.kle_id;
8030 
8031               debug_message('Accrual Adjustment Record');
8032               debug_message('i '||i);
8033               debug_message('l_stream_tbl(i).stream_type_id: '||l_stream_tbl(i).stream_type_id);
8034               debug_message('l_stream_tbl(i).stream_type_name: '||l_stream_tbl(i).stream_type_name);
8035               debug_message('l_stream_tbl(i).stream_amount: '||l_stream_tbl(i).stream_amount);
8036               debug_message('l_stream_tbl(i).kle_id: '||l_stream_tbl(i).kle_id);
8037             END IF;
8038           END IF;
8039         END LOOP;
8040 
8041       END IF;
8042 
8043       IF (l_stream_tbl.COUNT > 0) THEN
8044 
8045         l_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_gl_date => p_trx_date);
8046 
8047         l_accrual_rec.contract_id   := p_orig_khr_id;
8048         l_accrual_rec.accrual_date  := l_gl_date;
8049         l_accrual_rec.description   := 'Rebook Adjustment';
8050         l_accrual_rec.source_trx_id := p_trx_id;
8051         l_accrual_rec.source_trx_type := 'TCN';
8052 
8053         debug_message('Accrual Adjustment Header Record');
8054         debug_message('l_accrual_rec.contract_id: '||l_accrual_rec.contract_id);
8055         debug_message('l_accrual_rec.accrual_date: '||l_accrual_rec.accrual_date);
8056         debug_message('l_accrual_rec.description: '||l_accrual_rec.description);
8057         debug_message('l_accrual_rec.source_trx_id: '||l_accrual_rec.source_trx_id);
8058         debug_message('l_accrual_rec.source_trx_type: '||l_accrual_rec.source_trx_type);
8059 
8060         OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
8061           p_api_version    => p_api_version,
8062           p_init_msg_list  => p_init_msg_list,
8063           x_return_status  => x_return_status,
8064           x_msg_count      => x_msg_count,
8065           x_msg_data       => x_msg_data ,
8066           x_trx_number     => lx_trx_number,
8067           p_accrual_rec    => l_accrual_rec,
8068           p_stream_tbl     => l_stream_tbl);
8069 
8070         debug_message('After calling OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS '||x_return_status);
8071 
8072         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8073           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8074         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8075           raise OKL_API.G_EXCEPTION_ERROR;
8076         END IF;
8077       END IF;
8078 
8079       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
8080                            x_msg_data    => x_msg_data);
8081 
8082   EXCEPTION
8083       when OKL_API.G_EXCEPTION_ERROR then
8084          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8085 			p_api_name  => l_api_name,
8086 			p_pkg_name  => G_PKG_NAME,
8087 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
8088 			x_msg_count => x_msg_count,
8089 			x_msg_data  => x_msg_data,
8090 			p_api_type  => G_API_TYPE);
8091 
8092       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8093          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8094 			p_api_name  => l_api_name,
8095 			p_pkg_name  => G_PKG_NAME,
8096 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8097 			x_msg_count => x_msg_count,
8098 			x_msg_data  => x_msg_data,
8099 			p_api_type  => G_API_TYPE);
8100 
8101       when OTHERS then
8102          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8103 			p_api_name  => l_api_name,
8104 			p_pkg_name  => G_PKG_NAME,
8105 			p_exc_name  => 'OTHERS',
8106 			x_msg_count => x_msg_count,
8107 			x_msg_data  => x_msg_data,
8108 			p_api_type  => G_API_TYPE);
8109 
8110   END create_accrual_adjustment;
8111 --Bug# 4212626: end
8112 */
8113 
8114   ------------------------------------------------------------------------------
8115 -- PROCEDURE calc_accrual_adjustment
8116 --
8117 --  This procedure calculates the accrual adjustment for all accrual streams
8118 --  where there is a difference between amount actually accrued and amount
8119 --  that should have been accrued and calls the Accrual api to make the
8120 --  accrual adjustment. The current streams taken into account for
8121 --  calculating accrual adjustment are then marked as Accrual adjusted in order
8122 --  to stop duplicate accrual.
8123 --
8124 -- Calls:
8125 -- Called By:
8126 -- Added new input parameters p_trx_tbl_code and p_trx_type for Bug# 6344223
8127 ------------------------------------------------------------------------------
8128 PROCEDURE calc_accrual_adjustment(
8129                          p_api_version     IN  NUMBER,
8130                          p_init_msg_list   IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
8131                          x_return_status   OUT NOCOPY VARCHAR2,
8132                          x_msg_count       OUT NOCOPY NUMBER,
8133                          x_msg_data        OUT NOCOPY VARCHAR2,
8134                          p_rbk_khr_id      IN  NUMBER,
8135                          p_orig_khr_id     IN  NUMBER,
8136                          p_trx_id          IN  NUMBER,
8137                          p_trx_date        IN  DATE,
8138                          x_accrual_rec     OUT NOCOPY OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type,
8139                          x_stream_tbl      OUT NOCOPY OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type,
8140                          p_trx_tbl_code    IN  VARCHAR2 DEFAULT 'TCN',
8141                          p_trx_type        IN  VARCHAR2 DEFAULT 'CRB'
8142                          ) IS
8143 
8144   l_api_name             VARCHAR2(35)    := 'calc_accrual_adjustment';
8145   l_proc_name            VARCHAR2(35)    := 'calc_accrual_adjustment';
8146   l_api_version          CONSTANT NUMBER := 1;
8147 
8148   CURSOR curr_accrual_streams_csr(p_khr_id  IN NUMBER,
8149                                   p_reporting_pdt_id IN NUMBER) IS -- MGAAP
8150   SELECT new_stm.id   new_stm_id,
8151          orig_stm.id  orig_stm_id,
8152          orig_stm.sty_id,
8153          orig_stm.kle_id,
8154          sty.name
8155   --FROM   okl_streams new_stm,
8156   FROM   okl_streams_rep_v new_stm, -- MGAAP 7263041
8157          okl_prod_strm_types psty,
8158          okl_k_headers khr,
8159          --okl_streams orig_stm,
8160          okl_streams_rep_v orig_stm, -- MGAAP 7263041
8161          okl_strm_type_v sty
8162   WHERE  khr.id = p_khr_id
8163   --AND    psty.pdt_id = khr.pdt_id
8164   AND    psty.pdt_id = DECODE(OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY,
8165                 'PRIMARY', khr.pdt_id, p_reporting_pdt_id) -- MGAAP 7263041
8166   AND    psty.accrual_yn = 'Y'
8167   AND    psty.sty_id = new_stm.sty_id
8168   AND    new_stm.khr_id = khr.id
8169   AND    new_stm.say_code = 'CURR'
8170   AND    orig_stm.id = new_stm.link_hist_stream_id
8171   AND    sty.id = orig_stm.sty_id
8172   -- Bug# 4775555: Exclude Investor accrual streams
8173   AND    sty.stream_type_purpose NOT IN
8174          ('INVESTOR_RENTAL_ACCRUAL',
8175           'INVESTOR_PRETAX_INCOME',
8176           'INVESTOR_INTEREST_INCOME',
8177           'INVESTOR_VARIABLE_INTEREST');
8178 
8179   CURSOR max_accrual_date_csr(p_stm_id IN NUMBER) IS
8180   SELECT MAX(sel.stream_element_date) stream_element_date
8181   FROM okl_strm_elements sel
8182   WHERE sel.stm_id = p_stm_id
8183   AND   sel.accrued_yn IS NOT NULL;
8184 
8185   CURSOR actual_amount_accrued_csr(p_stm_id IN NUMBER) IS
8186   SELECT NVL(SUM(sel.amount),0) amount
8187   FROM okl_strm_elements sel
8188   WHERE sel.stm_id = p_stm_id
8189   AND   sel.accrued_yn IS NOT NULL;
8190 
8191   CURSOR amount_to_be_accrued_csr(p_stm_id IN NUMBER,
8192                                   p_max_accrual_date IN DATE) IS
8193   SELECT sel.id sel_id,
8194          NVL(sel.amount,0) amount
8195   FROM okl_strm_elements sel
8196   WHERE sel.stm_id = p_stm_id
8197   AND   sel.stream_element_date <= p_max_accrual_date;
8198 
8199   -- Cursor to fetch Streams deleted during rebook
8200   CURSOR del_accrual_streams_csr(p_orig_khr_id  IN NUMBER,
8201                                  p_rbk_khr_id   IN NUMBER,
8202                                  p_reporting_pdt_id   IN NUMBER) IS -- MGAAP
8203   SELECT orig_stm.id orig_stm_id,
8204          orig_stm.sty_id,
8205          orig_stm.kle_id,
8206          sty.name,
8207          cle.lse_id
8208   --FROM   okl_streams orig_stm,
8209   FROM   okl_streams_rep_v orig_stm, -- MGAAP 7263041
8210          okl_prod_strm_types psty,
8211          okl_k_headers khr,
8212          okc_k_lines_b cle,
8213          okl_strm_type_v sty
8214   WHERE  khr.id = p_orig_khr_id
8215   --AND    psty.pdt_id = khr.pdt_id
8216   AND    psty.pdt_id = DECODE(OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY,
8217                 'PRIMARY', khr.pdt_id, p_reporting_pdt_id) -- MGAAP 7263041
8218   AND    psty.accrual_yn = 'Y'
8219   AND    psty.sty_id = orig_stm.sty_id
8220   AND    orig_stm.khr_id = khr.id
8221   AND    orig_stm.say_code = 'CURR'
8222   AND    orig_stm.sgn_code NOT IN ('INTC','LATE_CALC') -- Bug6472228
8223   AND    cle.id(+) = orig_stm.kle_id
8224   AND    cle.dnz_chr_id(+) = orig_stm.khr_id
8225   AND    NOT EXISTS (SELECT 1
8226                      --FROM okl_streams new_stm
8227                      FROM okl_streams_rep_v new_stm -- MGAAP 7263041
8228                      WHERE new_stm.khr_id = p_rbk_khr_id
8229                      AND   new_stm.say_code = 'CURR'
8230                      AND   new_stm.link_hist_stream_id = orig_stm.id)
8231   AND    sty.id = orig_stm.sty_id
8232   -- Bug# 4775555: Exclude Investor accrual streams
8233   AND    sty.stream_type_purpose NOT IN
8234          ('INVESTOR_RENTAL_ACCRUAL',
8235           'INVESTOR_PRETAX_INCOME',
8236           'INVESTOR_INTEREST_INCOME',
8237           'INVESTOR_VARIABLE_INTEREST');
8238 
8239   l_max_accrual_date DATE;
8240   l_actual_amount_accrued NUMBER;
8241   l_amount_to_be_accrued NUMBER;
8242   l_accrual_adjustment NUMBER;
8243 
8244   l_selv_tbl    selv_tbl_type;
8245   x_selv_tbl    selv_tbl_type;
8246 
8247   l_selv_count  NUMBER;
8248 
8249   i             NUMBER;
8250   --lx_trx_number OKL_TRX_CONTRACTS.trx_number%TYPE;
8251   l_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
8252   l_stream_tbl  OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
8253   l_gl_date     DATE;
8254 
8255   -- MGAAP start 7263041
8256   CURSOR c_get_reporting_pdt_id(p_chr_id IN NUMBER) IS
8257   SELECT b.reporting_pdt_id, a.multi_gaap_yn
8258   FROM   okl_k_headers a,
8259          okl_products b
8260   WHERE  a.ID = p_chr_id
8261   AND    a.PDT_ID = b.ID;
8262 
8263   l_reporting_pdt_id OKL_PRODUCTS.reporting_pdt_id%TYPE := null;
8264   l_multi_gaap_yn  OKL_K_HEADERS.MULTI_GAAP_YN%TYPE;
8265   l_current_mgaap_context VARCHAR2(10);
8266   -- MGAAP end 7263041
8267 
8268   BEGIN
8269     IF (G_DEBUG_ENABLED = 'Y') THEN
8270       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
8271     END IF;
8272 
8273       x_return_status := OKL_API.G_RET_STS_SUCCESS;
8274       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8275               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
8276       END IF;
8277       -- call START_ACTIVITY to create savepoint, check compatibility
8278       -- and initialize message list
8279       x_return_status := OKL_API.START_ACTIVITY(
8280 			p_api_name      => l_api_name,
8281 			p_pkg_name      => G_PKG_NAME,
8282 			p_init_msg_list => p_init_msg_list,
8283 			l_api_version   => l_api_version,
8284 			p_api_version   => p_api_version,
8285 			p_api_type      => G_API_TYPE,
8286 			x_return_status => x_return_status);
8287 
8288       -- check if activity started successfully
8289       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8290          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8291       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8292          RAISE OKL_API.G_EXCEPTION_ERROR;
8293       END IF;
8294 
8295       -- For On-line and Mass rebook, calculate accrual adjustment
8296       -- for all Current Accrual Streams for which Accruals were generated
8297       -- in the Original contract
8298 
8299       -- MGAAP start 7263041
8300       l_current_mgaap_context := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
8301       IF (l_current_mgaap_context = 'REPORT') THEN
8302         OPEN c_get_reporting_pdt_id(p_rbk_khr_id);
8303         FETCH c_get_reporting_pdt_id INTO l_reporting_pdt_id, l_multi_gaap_yn;
8304         CLOSE c_get_reporting_pdt_id;
8305       END IF;
8306       -- MGAAP end 7263041
8307 
8308       i := 0;
8309       l_stream_tbl.DELETE;
8310       FOR curr_accrual_streams_rec IN curr_accrual_streams_csr(p_khr_id => p_rbk_khr_id, p_reporting_pdt_id => l_reporting_pdt_id)
8311       LOOP
8312 
8313         l_max_accrual_date := NULL;
8314         OPEN max_accrual_date_csr(p_stm_id => curr_accrual_streams_rec.orig_stm_id);
8315         FETCH max_accrual_date_csr INTO l_max_accrual_date;
8316         CLOSE max_accrual_date_csr;
8317 
8318         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8319                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'New Stream Id: '||curr_accrual_streams_rec.new_stm_id);
8320           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig Stream Id: '||curr_accrual_streams_rec.orig_stm_id);
8321           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Max Accrual Date: '||l_max_accrual_date);
8322         END IF;
8323 
8324         IF l_max_accrual_date IS NOT NULL THEN
8325 
8326           l_actual_amount_accrued := 0;
8327           OPEN actual_amount_accrued_csr(p_stm_id => curr_accrual_streams_rec.orig_stm_id);
8328           FETCH actual_amount_accrued_csr INTO l_actual_amount_accrued;
8329           CLOSE actual_amount_accrued_csr;
8330 
8331           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8332                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Actual Amount Accrued: '||l_actual_amount_accrued);
8333           END IF;
8334 
8335           l_amount_to_be_accrued := 0;
8336           l_selv_count := 0;
8337           l_selv_tbl.DELETE;
8338 
8339           FOR amount_to_be_accrued_rec IN
8340               amount_to_be_accrued_csr(p_stm_id => curr_accrual_streams_rec.new_stm_id,
8341                                       p_max_accrual_date => l_max_accrual_date)
8342           LOOP
8343 
8344             -- Call Streams api to update accrued_yn, accrual_adj_flag
8345             l_selv_count := l_selv_count + 1;
8346             l_amount_to_be_accrued := l_amount_to_be_accrued + amount_to_be_accrued_rec.amount;
8347 
8348             l_selv_tbl(l_selv_count).id        := amount_to_be_accrued_rec.sel_id;
8349             l_selv_tbl(l_selv_count).accrued_yn := 'Y';
8350             l_selv_tbl(l_selv_count).accrual_adj_flag  := 'Y';
8351 
8352           END LOOP;
8353 
8354           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8355                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Amount to be Accrued: '||l_amount_to_be_accrued);
8356           END IF;
8357 
8358           l_accrual_adjustment := l_amount_to_be_accrued -  l_actual_amount_accrued;
8359 
8360           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8361                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Accrual Adjustment: '||l_accrual_adjustment);
8362           END IF;
8363 
8364           IF l_accrual_adjustment <> 0 THEN
8365             i := i + 1;
8366             l_stream_tbl(i).stream_type_id   := curr_accrual_streams_rec.sty_id;
8367             l_stream_tbl(i).stream_type_name := curr_accrual_streams_rec.name;
8368             l_stream_tbl(i).stream_amount    := l_accrual_adjustment;
8369             l_stream_tbl(i).kle_id           := curr_accrual_streams_rec.kle_id;
8370 
8371             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8372                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Accrual Adjustment Record');
8373               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i '||i);
8374               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_type_id: '||l_stream_tbl(i).stream_type_id);
8375               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_type_name: '||l_stream_tbl(i).stream_type_name);
8376               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_amount: '||l_stream_tbl(i).stream_amount);
8377               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).kle_id: '||l_stream_tbl(i).kle_id);
8378             END IF;
8379           END IF;
8380 
8381           IF (l_selv_tbl.COUNT > 0) THEN
8382             okl_streams_pub.update_stream_elements(
8383                                       p_api_version    => 1.0,
8384                                       p_init_msg_list  => OKL_API.G_FALSE,
8385                                       x_return_status  => x_return_status,
8386                                       x_msg_count      => x_msg_count,
8387                                       x_msg_data       => x_msg_data,
8388                                       p_selv_tbl       => l_selv_tbl,
8389                                       x_selv_tbl       => x_selv_tbl
8390                                      );
8391 
8392             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8393                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of Stream Elements - Accrued Yn and Accrual Adj Flag '||x_return_status);
8394             END IF;
8395 
8396             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8397               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8398             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8399               RAISE OKL_API.G_EXCEPTION_ERROR;
8400             END IF;
8401           END IF;
8402 
8403         END IF;
8404       END LOOP;
8405 
8406       -- For On-line rebook, calculate accrual adjustment
8407       -- for Streams deleted during Rebook
8408       -- Insurance Streams are ignored by this process, so no
8409       -- adjustment will be calculated for Insurance Streams here
8410       IF (p_rbk_khr_id <> p_orig_khr_id) THEN  -- Online rebook
8411 
8412         FOR del_accrual_streams_rec IN
8413             del_accrual_streams_csr(p_orig_khr_id  => p_orig_khr_id,
8414                                     p_rbk_khr_id   => p_rbk_khr_id,
8415                                     p_reporting_pdt_id   => l_reporting_pdt_id)
8416         LOOP
8417 
8418           -- Do not process Insurance Streams
8419           IF (NVL(del_accrual_streams_rec.lse_id,-1) <> G_INSURANCE_LSE_ID) THEN
8420 
8421             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8422                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Deleted Orig Stream Id: '||del_accrual_streams_rec.orig_stm_id);
8423             END IF;
8424 
8425             l_actual_amount_accrued := 0;
8426             OPEN actual_amount_accrued_csr(p_stm_id => del_accrual_streams_rec.orig_stm_id);
8427             FETCH actual_amount_accrued_csr INTO l_actual_amount_accrued;
8428             CLOSE actual_amount_accrued_csr;
8429 
8430             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8431                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Actual Amount Accrued: '||l_actual_amount_accrued);
8432             END IF;
8433 
8434             l_accrual_adjustment := -1 * l_actual_amount_accrued;
8435 
8436             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8437                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Accrual Adjustment: '||l_accrual_adjustment);
8438             END IF;
8439 
8440             IF l_actual_amount_accrued <> 0 THEN
8441               i := i + 1;
8442               l_stream_tbl(i).stream_type_id   := del_accrual_streams_rec.sty_id;
8443               l_stream_tbl(i).stream_type_name := del_accrual_streams_rec.name;
8444               l_stream_tbl(i).stream_amount    := l_accrual_adjustment;
8445               l_stream_tbl(i).kle_id           := del_accrual_streams_rec.kle_id;
8446 
8447               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8448                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Accrual Adjustment Record');
8449                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i '||i);
8450                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_type_id: '||l_stream_tbl(i).stream_type_id);
8451                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_type_name: '||l_stream_tbl(i).stream_type_name);
8452                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_amount: '||l_stream_tbl(i).stream_amount);
8453                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).kle_id: '||l_stream_tbl(i).kle_id);
8454               END IF;
8455             END IF;
8456           END IF;
8457         END LOOP;
8458 
8459       END IF;
8460 
8461       IF (l_stream_tbl.COUNT > 0) THEN
8462 
8463         l_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_gl_date => p_trx_date);
8464 
8465         l_accrual_rec.contract_id   := p_orig_khr_id;
8466         l_accrual_rec.accrual_date  := l_gl_date;
8467         l_accrual_rec.source_trx_id := p_trx_id;
8468 
8469         --Bug# 6344223
8470         l_accrual_rec.source_trx_type := p_trx_tbl_code;
8471         IF p_trx_type = 'CRB' THEN
8472           l_accrual_rec.description   := 'Rebook Adjustment';
8473         ELSIF p_trx_type = 'ALI' THEN
8474           l_accrual_rec.description   := 'Split Asset Adjustment';
8475         END IF;
8476         --end Bug# 6344223
8477 
8478         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8479                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Accrual Adjustment Header Record');
8480           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.contract_id: '||l_accrual_rec.contract_id);
8481           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.accrual_date: '||l_accrual_rec.accrual_date);
8482           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.description: '||l_accrual_rec.description);
8483           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.source_trx_id: '||l_accrual_rec.source_trx_id);
8484           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.source_trx_type: '||l_accrual_rec.source_trx_type);
8485         END IF;
8486 
8487 
8488           x_stream_tbl := l_stream_tbl;
8489           x_accrual_rec := l_accrual_rec;
8490       END IF;
8491 
8492       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
8493                            x_msg_data    => x_msg_data);
8494 
8495   EXCEPTION
8496       WHEN OKL_API.G_EXCEPTION_ERROR THEN
8497          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8498 			p_api_name  => l_api_name,
8499 			p_pkg_name  => G_PKG_NAME,
8500 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
8501 			x_msg_count => x_msg_count,
8502 			x_msg_data  => x_msg_data,
8503 			p_api_type  => G_API_TYPE);
8504 
8505       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8506          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8507 			p_api_name  => l_api_name,
8508 			p_pkg_name  => G_PKG_NAME,
8509 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8510 			x_msg_count => x_msg_count,
8511 			x_msg_data  => x_msg_data,
8512 			p_api_type  => G_API_TYPE);
8513 
8514       WHEN OTHERS THEN
8515          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8516 			p_api_name  => l_api_name,
8517 			p_pkg_name  => G_PKG_NAME,
8518 			p_exc_name  => 'OTHERS',
8519 			x_msg_count => x_msg_count,
8520 			x_msg_data  => x_msg_data,
8521 			p_api_type  => G_API_TYPE);
8522   END calc_accrual_adjustment;
8523 
8524 -- dedey, Bug#4264314
8525 
8526 -- Bug# 4775555: Start
8527 ------------------------------------------------------------------------------
8528 -- PROCEDURE create_inv_disb_adjustment
8529 --
8530 --  This procedure calculates the disbursement adjustment for all disbursement streams
8531 --  where there is a difference between amount actually disbursed and amount
8532 --  that should have been disbursed and creates an Inverstor Disbursement Adjustment
8533 --  Stream for the adjustment amount. The current streams taken into account for
8534 --  calculating disbursement adjustment are then marked as Disbursement adjusted in order
8535 --  to stop duplicate disbursement.
8536 --
8537 -- Calls:
8538 -- Called By:
8539 ------------------------------------------------------------------------------
8540   PROCEDURE create_inv_disb_adjustment(
8541                          p_api_version     IN  NUMBER,
8542                          p_init_msg_list   IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
8543                          x_return_status   OUT NOCOPY VARCHAR2,
8544                          x_msg_count       OUT NOCOPY NUMBER,
8545                          x_msg_data        OUT NOCOPY VARCHAR2,
8546                          p_orig_khr_id     IN  NUMBER
8547                          ) IS
8548 
8549   l_api_name             VARCHAR2(35)    := 'create_inv_disb_adjustment';
8550   l_proc_name            VARCHAR2(35)    := 'CREATE_INV_DISB_ADJUSTMENT';
8551   l_api_version          CONSTANT NUMBER := 1;
8552 
8553   CURSOR  chr_assets_csr(p_khr_id IN NUMBER) IS
8554   SELECT  id    cle_id
8555   FROM    okc_k_lines_b cle
8556   WHERE   cle.chr_id = p_khr_id
8557   AND     cle.dnz_chr_id = p_khr_id
8558   AND     cle.lse_id = 33;
8559 
8560   CURSOR  curr_sec_strms_csr(p_khr_id IN NUMBER,
8561                              p_kle_id IN NUMBER) IS
8562   SELECT  pol.khr_id     agreement_id,
8563           new_stm.khr_id khr_id,
8564           new_stm.kle_id kle_id,
8565           new_stm.sty_id sty_id,
8566           new_stm.id     new_stm_id,
8567           orig_stm.id    orig_stm_id
8568   FROM    okl_pools pol,
8569           okl_pool_contents pcn,
8570 	  okl_strm_type_b sty,
8571 	  okl_streams new_stm,
8572           okl_streams orig_stm
8573   WHERE   pcn.sty_id = sty.id
8574   AND     pcn.pol_id = pol.id
8575   AND     new_stm.kle_id = pcn.kle_id
8576   AND     new_stm.khr_id = pcn.khr_id
8577   AND     new_stm.sty_id = pcn.sty_id
8578   AND     new_stm.say_code = 'CURR'
8579   AND     new_stm.active_yn = 'Y'
8580   AND     pol.status_code = 'ACTIVE'
8581   AND     pcn.status_code = 'ACTIVE'
8582   AND     new_stm.khr_id = p_khr_id
8583   AND     new_stm.kle_id = p_kle_id
8584   AND     sty.billable_yn = 'Y'
8585   AND     orig_stm.id = new_stm.link_hist_stream_id;
8586 
8587   CURSOR actual_amount_disb_csr(p_stm_id IN NUMBER) IS
8588   SELECT NVL(SUM(inv_sel.amount),0) amount
8589   FROM   okl_strm_elements inv_sel,
8590          okl_strm_elements sel
8591   WHERE  sel.stm_id = p_stm_id
8592   AND    sel.date_billed IS NOT NULL
8593   AND    inv_sel.sel_id = sel.id;
8594 
8595   CURSOR amount_to_be_disb_csr(p_stm_id IN NUMBER) IS
8596   SELECT inv_sel.id sel_id,
8597          NVL(inv_sel.amount,0) amount
8598   FROM   okl_strm_elements inv_sel,
8599          okl_strm_elements sel
8600   WHERE  sel.stm_id = p_stm_id
8601   AND    sel.date_billed IS NOT NULL
8602   AND    inv_sel.sel_id = sel.id;
8603 
8604   l_actual_amount_disb NUMBER;
8605   l_amount_to_be_disb NUMBER;
8606   l_disb_adjustment NUMBER;
8607 
8608   TYPE disb_adj_rec_type IS RECORD (
8609      kle_id       NUMBER := NULL,
8610      disb_adj_amt NUMBER := NULL);
8611 
8612   TYPE disb_adj_tbl_type IS TABLE OF disb_adj_rec_type
8613   INDEX BY BINARY_INTEGER;
8614 
8615   l_disb_adj_tbl  disb_adj_tbl_type;
8616 
8617   l_stmv_rec_init       Okl_Streams_pub.stmv_rec_type;
8618 
8619   l_stmv_rec_new_disb   Okl_Streams_pub.stmv_rec_type;
8620   l_selv_tbl_new_disb   Okl_Streams_pub.selv_tbl_type;
8621   lx_stmv_rec_new_disb  Okl_Streams_pub.stmv_rec_type;
8622   lx_selv_tbl_new_disb  Okl_Streams_pub.selv_tbl_type;
8623 
8624   l_stmv_rec_old_disb   Okl_Streams_pub.stmv_rec_type;
8625   lx_stmv_rec_old_disb  Okl_Streams_pub.stmv_rec_type;
8626 
8627   l_selv_tbl  selv_tbl_type;
8628   x_selv_tbl  selv_tbl_type;
8629 
8630   l_selv_count NUMBER;
8631   i NUMBER;
8632 
8633   CURSOR l_trx_num_csr IS
8634   SELECT OKL_SIF_SEQ.NEXTVAL
8635   FROM dual;
8636 
8637   l_transaction_number NUMBER;
8638 
8639   CURSOR old_disb_adj_stm_csr(p_chr_id  NUMBER,
8640                               p_kle_id  NUMBER)
8641   IS
8642   SELECT stm.id stm_id
8643   FROM   okl_streams stm,
8644          okl_strm_type_b sty
8645   WHERE stm.khr_id    = p_chr_id
8646   AND   stm.kle_id    = p_kle_id
8647   AND   stm.sty_id    = sty.id
8648   AND   stm.say_code  = 'CURR'
8649   AND   stm.active_yn = 'Y'
8650   AND   sty.stream_type_purpose = 'INVESTOR_DISB_ADJUSTMENT';
8651 
8652   l_old_disb_adj_stm_rec old_disb_adj_stm_csr%ROWTYPE;
8653 
8654   CURSOR undisb_adj_amt_csr(p_stm_id  NUMBER)
8655   IS
8656   SELECT NVL(SUM(sel.AMOUNT),0) amount
8657   FROM okl_strm_elements sel
8658   WHERE sel.stm_id = p_stm_id
8659   AND sel.date_billed IS NULL;
8660 
8661   l_undisb_adj_amt_rec undisb_adj_amt_csr%ROWTYPE;
8662 
8663   CURSOR chk_old_adj_disb_csr(p_stm_id  NUMBER)
8664   IS
8665   SELECT 'Y'
8666   FROM okl_strm_elements sel
8667   WHERE sel.stm_id = p_stm_id
8668   AND sel.date_billed IS NULL;
8669 
8670   l_undisb_adj_exists VARCHAR2(30);
8671 
8672   l_disb_adj_sty_id  OKL_STRM_TYPE_B.id%TYPE;
8673   l_inv_agreement_id OKC_K_HEADERS_B.id%TYPE;
8674 
8675  BEGIN
8676    IF (G_DEBUG_ENABLED = 'Y') THEN
8677      G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
8678    END IF;
8679 
8680       x_return_status := OKL_API.G_RET_STS_SUCCESS;
8681       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8682               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
8683       END IF;
8684       -- call START_ACTIVITY to create savepoint, check compatibility
8685       -- and initialize message list
8686       x_return_status := OKL_API.START_ACTIVITY(
8687 			p_api_name      => l_api_name,
8688 			p_pkg_name      => G_PKG_NAME,
8689 			p_init_msg_list => p_init_msg_list,
8690 			l_api_version   => l_api_version,
8691 			p_api_version   => p_api_version,
8692 			p_api_type      => G_API_TYPE,
8693 			x_return_status => x_return_status);
8694 
8695       -- check if activity started successfully
8696       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8697          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8698       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8699          raise OKL_API.G_EXCEPTION_ERROR;
8700       END IF;
8701 
8702       -- For On-line and Mass rebook, calculate disbursement adjustment
8703       -- for all Current Billable Securitized Streams for which billing was done
8704       -- in the Original contract
8705 
8706       i := 0;
8707       l_disb_adj_tbl.DELETE;
8708       FOR chr_assets_rec IN chr_assets_csr(p_khr_id => p_orig_khr_id)
8709       LOOP
8710 
8711         i := i+1;
8712         FOR curr_sec_strms_rec in curr_sec_strms_csr(p_khr_id => p_orig_khr_id,
8713                                                      p_kle_id => chr_assets_rec.cle_id)
8714         LOOP
8715 
8716           l_inv_agreement_id :=  curr_sec_strms_rec.agreement_id;
8717           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8718                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'New Stream Id: '||curr_sec_strms_rec.new_stm_id);
8719             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig Stream Id: '||curr_sec_strms_rec.orig_stm_id);
8720             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Kle Id: '||curr_sec_strms_rec.kle_id);
8721           END IF;
8722 
8723           l_actual_amount_disb:= 0;
8724           OPEN actual_amount_disb_csr(p_stm_id => curr_sec_strms_rec.orig_stm_id);
8725           FETCH actual_amount_disb_csr INTO l_actual_amount_disb;
8726           CLOSE actual_amount_disb_csr;
8727 
8728           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8729                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Actual Amount Disbursed: '||l_actual_amount_disb);
8730           END IF;
8731 
8732           l_amount_to_be_disb := 0;
8733           l_selv_count := 0;
8734           l_selv_tbl.DELETE;
8735 
8736           FOR amount_to_be_disb_rec IN
8737               amount_to_be_disb_csr(p_stm_id => curr_sec_strms_rec.new_stm_id)
8738           LOOP
8739 
8740             -- Call Streams api to update date_billed, bill_adj_flag
8741             l_selv_count := l_selv_count + 1;
8742             l_amount_to_be_disb := l_amount_to_be_disb + amount_to_be_disb_rec.amount;
8743             l_selv_tbl(l_selv_count).id        := amount_to_be_disb_rec.sel_id;
8744             l_selv_tbl(l_selv_count).date_billed := SYSDATE;
8745             l_selv_tbl(l_selv_count).bill_adj_flag  := 'Y';
8746           END LOOP;
8747 
8748           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8749                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Amount to be Disbursed: '||l_amount_to_be_disb);
8750           END IF;
8751 
8752           l_disb_adjustment := l_amount_to_be_disb -  l_actual_amount_disb;
8753 
8754           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8755                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Disbursement Adjustment: '||l_disb_adjustment);
8756           END IF;
8757 
8758           l_disb_adj_tbl(i).kle_id := curr_sec_strms_rec.kle_id;
8759           l_disb_adj_tbl(i).disb_adj_amt := NVL(l_disb_adj_tbl(i).disb_adj_amt,0) + l_disb_adjustment;
8760 
8761           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8762                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i: '||i);
8763             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_disb_adj_tbl(i).kle_id: '||l_disb_adj_tbl(i).kle_id);
8764             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_disb_adj_tbl(i).disb_adj_amt: '||l_disb_adj_tbl(i).disb_adj_amt);
8765           END IF;
8766 
8767           IF (l_selv_tbl.COUNT > 0) THEN
8768             okl_streams_pub.update_stream_elements(
8769                                       p_api_version    => p_api_version,
8770                                       p_init_msg_list  => p_init_msg_list,
8771                                       x_return_status  => x_return_status,
8772                                       x_msg_count      => x_msg_count,
8773                                       x_msg_data       => x_msg_data,
8774                                       p_selv_tbl       => l_selv_tbl,
8775                                       x_selv_tbl       => x_selv_tbl
8776                                      );
8777 
8778             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8779                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of Stream Elements - Date Billed and Bill Adj Flag '||x_return_status);
8780             END IF;
8781 
8782             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8783               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8784             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8785               raise OKL_API.G_EXCEPTION_ERROR;
8786             END IF;
8787           END IF;
8788         END LOOP;
8789       END LOOP;
8790 
8791       IF (l_disb_adj_tbl.COUNT > 0) THEN
8792 
8793         OKL_STREAMS_UTIL.get_primary_stream_type(
8794           p_khr_id               => l_inv_agreement_id,
8795           p_primary_sty_purpose  => 'INVESTOR_DISB_ADJUSTMENT',
8796           x_return_status        => x_return_status,
8797           x_primary_sty_id       => l_disb_adj_sty_id
8798          );
8799 
8800         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8801           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8802         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8803           raise OKL_API.G_EXCEPTION_ERROR;
8804         END IF;
8805 
8806         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8807                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Disb Adjustment Stream Type Id: '||l_disb_adj_sty_id);
8808         END IF;
8809 
8810         --Bug# 6788253
8811         i := l_disb_adj_tbl.FIRST;
8812         LOOP
8813 
8814           l_stmv_rec_old_disb := l_stmv_rec_init;
8815           l_stmv_rec_new_disb := l_stmv_rec_init;
8816           l_selv_tbl_new_disb.DELETE;
8817 
8818           -- Fetch Existing Disbursement Adjustment Stream
8819           l_old_disb_adj_stm_rec.stm_id := NULL;
8820           OPEN old_disb_adj_stm_csr(p_chr_id  => p_orig_khr_id,
8821                                     p_kle_id  => l_disb_adj_tbl(i).kle_id);
8822           FETCH old_disb_adj_stm_csr INTO l_old_disb_adj_stm_rec;
8823           CLOSE old_disb_adj_stm_csr;
8824 
8825           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8826                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Old Disb Adjustment Stream Id: '||l_old_disb_adj_stm_rec.stm_id);
8827           END IF;
8828 
8829           -- If New Disbursement Adjustment <> 0
8830           IF (NVL(l_disb_adj_tbl(i).disb_adj_amt,0) <> 0) THEN
8831 
8832             -- Fetch Existing Undisbursed Adjustment Amount
8833             l_undisb_adj_amt_rec.amount := 0;
8834             IF l_old_disb_adj_stm_rec.stm_id IS NOT NULL THEN
8835               OPEN undisb_adj_amt_csr(p_stm_id => l_old_disb_adj_stm_rec.stm_id);
8836               FETCH undisb_adj_amt_csr INTO l_undisb_adj_amt_rec;
8837               CLOSE undisb_adj_amt_csr;
8838             END IF;
8839 
8840             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8841                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Old Disb Adjustment Amount: '||l_undisb_adj_amt_rec.amount);
8842             END IF;
8843 
8844             -- Historize existing Disbursement Adjustment stream
8845             IF l_old_disb_adj_stm_rec.stm_id IS NOT NULL THEN
8846 
8847               l_stmv_rec_old_disb.id        := l_old_disb_adj_stm_rec.stm_id;
8848               l_stmv_rec_old_disb.say_code  := 'HIST';
8849               l_stmv_rec_old_disb.active_yn := 'N';
8850               l_stmv_rec_old_disb.date_history  := SYSDATE;
8851 
8852               Okl_Streams_Pub.update_streams(
8853                             p_api_version   => p_api_version,
8854                             p_init_msg_list => p_init_msg_list,
8855                             x_return_status => x_return_status,
8856                             x_msg_count     => x_msg_count,
8857                             x_msg_data      => x_msg_data,
8858                             p_stmv_rec      => l_stmv_rec_old_disb,
8859                             x_stmv_rec      => lx_stmv_rec_old_disb);
8860 
8861               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8862                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Historizing Existing Investor Disbursement Adjustment Stream');
8863                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After calling OKL_STREAMS_PUB.update_streams'||x_return_status);
8864               END IF;
8865 
8866               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8867                 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8868               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8869                 raise OKL_API.G_EXCEPTION_ERROR;
8870               END IF;
8871             END IF;
8872 
8873             l_stmv_rec_new_disb.khr_id := p_orig_khr_id;
8874             l_stmv_rec_new_disb.kle_id := l_disb_adj_tbl(i).kle_id;
8875             l_stmv_rec_new_disb.say_code := 'CURR';
8876             l_stmv_rec_new_disb.active_yn := 'Y';
8877             l_stmv_rec_new_disb.date_current := sysdate;
8878 
8879             -- to get the transaction number of the contract
8880             OPEN  l_trx_num_csr;
8881             FETCH l_trx_num_csr INTO l_transaction_number;
8882             CLOSE l_trx_num_csr;
8883 
8884             l_stmv_rec_new_disb.transaction_number := l_transaction_number;
8885             l_stmv_rec_new_disb.sgn_code           := 'MANL';
8886             l_stmv_rec_new_disb.sty_id             := l_disb_adj_sty_id;
8887             l_stmv_rec_new_disb.source_id          := l_inv_agreement_id;
8888             l_stmv_rec_new_disb.source_table       := 'OKL_K_HEADERS';
8889 
8890             l_selv_tbl_new_disb(1).amount := l_disb_adj_tbl(i).disb_adj_amt + l_undisb_adj_amt_rec.amount;
8891             l_selv_tbl_new_disb(1).accrued_yn := 'Y';
8892             l_selv_tbl_new_disb(1).stream_element_date := sysdate;
8893             l_selv_tbl_new_disb(1).se_line_number := 1;
8894 
8895             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8896                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Total Disb Adjustment Amount: '||l_selv_tbl_new_disb(1).amount);
8897             END IF;
8898 
8899             IF l_selv_tbl_new_disb(1).amount <> 0 THEN
8900               Okl_Streams_Pub.create_streams(
8901                             p_api_version   => p_api_version,
8902                             p_init_msg_list => p_init_msg_list,
8903                             x_return_status => x_return_status,
8904                             x_msg_count     => x_msg_count,
8905                             x_msg_data      => x_msg_data,
8906                             p_stmv_rec      => l_stmv_rec_new_disb,
8907                             p_selv_tbl      => l_selv_tbl_new_disb,
8908                             x_stmv_rec      => lx_stmv_rec_new_disb,
8909                             x_selv_tbl      => lx_selv_tbl_new_disb);
8910 
8911               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8912                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Creating New Investor Disbursement Adjustment Stream');
8913                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After calling OKL_STREAMS_PUB.create_streams'||x_return_status);
8914               END IF;
8915 
8916               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8917                 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8918               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8919                 raise OKL_API.G_EXCEPTION_ERROR;
8920               END IF;
8921             END IF;
8922 
8923           -- New Disbursement Adjustment = 0
8924           ELSE
8925 
8926             l_undisb_adj_exists := 'N';
8927             OPEN chk_old_adj_disb_csr(p_stm_id => l_old_disb_adj_stm_rec.stm_id);
8928             FETCH chk_old_adj_disb_csr INTO l_undisb_adj_exists;
8929             CLOSE chk_old_adj_disb_csr;
8930 
8931             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8932                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Undisbursed Disb Adjustment Exists: '||l_undisb_adj_exists);
8933             END IF;
8934 
8935             -- Historize existing Disbursement Adjustment stream
8936             -- if it has been disbursed
8937             IF (l_old_disb_adj_stm_rec.stm_id IS NOT NULL AND l_undisb_adj_exists = 'N') THEN
8938 
8939               l_stmv_rec_old_disb.id        := l_old_disb_adj_stm_rec.stm_id;
8940               l_stmv_rec_old_disb.say_code  := 'HIST';
8941               l_stmv_rec_old_disb.active_yn := 'N';
8942               l_stmv_rec_old_disb.date_history := SYSDATE;
8943 
8944               Okl_Streams_Pub.update_streams(
8945                             p_api_version   => p_api_version,
8946                             p_init_msg_list => p_init_msg_list,
8947                             x_return_status => x_return_status,
8948                             x_msg_count     => x_msg_count,
8949                             x_msg_data      => x_msg_data,
8950                             p_stmv_rec      => l_stmv_rec_old_disb,
8951                             x_stmv_rec      => lx_stmv_rec_old_disb);
8952 
8953               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8954                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Historizing Existing Investor Disbursement Adjustment Stream');
8955                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After calling OKL_STREAMS_PUB.update_streams'||x_return_status);
8956               END IF;
8957 
8958               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8959                 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8960               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8961                 raise OKL_API.G_EXCEPTION_ERROR;
8962               END IF;
8963             END IF;
8964           END IF;
8965 
8966           --Bug# 6788253
8967           EXIT WHEN i = l_disb_adj_tbl.LAST;
8968           i := l_disb_adj_tbl.NEXT(i);
8969         END LOOP;
8970 
8971       END IF;
8972 
8973       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
8974                            x_msg_data    => x_msg_data);
8975 
8976   EXCEPTION
8977       when OKL_API.G_EXCEPTION_ERROR then
8978          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8979 			p_api_name  => l_api_name,
8980 			p_pkg_name  => G_PKG_NAME,
8981 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
8982 			x_msg_count => x_msg_count,
8983 			x_msg_data  => x_msg_data,
8984 			p_api_type  => G_API_TYPE);
8985 
8986       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8987          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8988 			p_api_name  => l_api_name,
8989 			p_pkg_name  => G_PKG_NAME,
8990 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8991 			x_msg_count => x_msg_count,
8992 			x_msg_data  => x_msg_data,
8993 			p_api_type  => G_API_TYPE);
8994 
8995       when OTHERS then
8996          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8997 			p_api_name  => l_api_name,
8998 			p_pkg_name  => G_PKG_NAME,
8999 			p_exc_name  => 'OTHERS',
9000 			x_msg_count => x_msg_count,
9001 			x_msg_data  => x_msg_data,
9002 			p_api_type  => G_API_TYPE);
9003 
9004   END create_inv_disb_adjustment;
9005 
9006     ------------------------------------------------------------------------------
9007 -- PROCEDURE link_inv_accrual_streams
9008 --
9009 --  This procedure links the Inversotr Accrual WORK Streams created during Rebook
9010 --  to the corresponding matching CURR Streams in the original contract and
9011 --  also updates the WORK streams with Source Transaction Id.
9012 --
9013 -- Calls:
9014 -- Called By:
9015 ------------------------------------------------------------------------------
9016   PROCEDURE link_inv_accrual_streams(
9017                          p_api_version     IN  NUMBER,
9018                          p_init_msg_list   IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
9019                          x_return_status   OUT NOCOPY VARCHAR2,
9020                          x_msg_count       OUT NOCOPY NUMBER,
9021                          x_msg_data        OUT NOCOPY VARCHAR2,
9022                          p_khr_id          IN  NUMBER
9023                          ) IS
9024 
9025   l_api_name             VARCHAR2(35)    := 'link_inv_accrual_streams';
9026   l_proc_name            VARCHAR2(35)    := 'LINK_INV_ACCRUAL_STREAMS';
9027   l_api_version          CONSTANT NUMBER := 1;
9028 
9029   CURSOR chk_rbk_csr(p_chr_id IN NUMBER) is
9030   SELECT '!', ktrx.id
9031   FROM   okc_k_headers_b chr,
9032          okl_trx_contracts ktrx,
9033          okc_k_headers_b cpy_chr
9034   WHERE  ktrx.khr_id = chr.id
9035   AND    ktrx.khr_id_new = cpy_chr.id
9036   AND    ktrx.tsu_code = 'ENTERED'
9037   AND    ktrx.rbr_code is NOT NULL
9038   AND    ktrx.tcn_type = 'TRBK'
9039   AND    chr.id = p_chr_id
9040   AND    cpy_chr.orig_system_id1 = chr.id
9041   AND    cpy_chr.orig_system_source_code = 'OKL_REBOOK'
9042   AND    ktrx.representation_type = 'PRIMARY'; -- MGAAP 7263041
9043 
9044   CURSOR chk_mass_rbk_csr (p_chr_id IN NUMBER) IS
9045   SELECT '!', ktrx.id
9046   FROM   okc_k_headers_b chr,
9047          okl_trx_contracts ktrx
9048   WHERE  chr.id          = p_chr_id
9049   AND    ktrx.khr_id     =  chr.id
9050   AND    ktrx.tsu_code   = 'ENTERED'
9051   AND    ktrx.rbr_code   IS NOT NULL
9052   AND    ktrx.tcn_type   = 'TRBK'
9053   AND    ktrx.representation_type = 'PRIMARY'  -- MGAAP 7263041
9054   AND    EXISTS (SELECT '1'
9055                  FROM   okl_rbk_selected_contract rbk_khr
9056                  WHERE  rbk_khr.khr_id = chr.id
9057                  AND    rbk_khr.status <> 'PROCESSED');
9058 
9059   CURSOR curr_streams_csr(p_khr_id IN NUMBER) IS
9060   SELECT new_stm.id  new_stm_id,
9061          new_stm.kle_id
9062   FROM   okl_streams new_stm,
9063          okl_strm_type_b sty
9064   WHERE  new_stm.khr_id   = p_khr_id
9065   AND    new_stm.say_code = 'WORK'
9066   AND    new_stm.sty_id   = sty.id
9067   AND    sty.stream_type_purpose IN
9068          ('INVESTOR_RENTAL_ACCRUAL',
9069           'INVESTOR_PRETAX_INCOME',
9070           'INVESTOR_INTEREST_INCOME',
9071           'INVESTOR_VARIABLE_INTEREST');
9072 
9073   CURSOR hist_strms_csr(p_new_stm_id IN NUMBER,
9074                         p_khr_id     IN NUMBER) IS
9075   SELECT orig_stm.id  orig_stm_id
9076   FROM   okl_streams new_stm,
9077          okl_streams orig_stm
9078   WHERE  new_stm.id = p_new_stm_id
9079   AND    orig_stm.khr_id = new_stm.khr_id
9080   AND    NVL(orig_stm.kle_id,-1) = NVL(new_stm.kle_id,-1)
9081   AND    orig_stm.sty_id = new_stm.sty_id
9082   AND    NVL(orig_stm.purpose_code,'ORIG') = NVL(new_stm.purpose_code,'ORIG')
9083   AND    orig_stm.say_code = 'CURR';
9084 
9085   hist_strms_rec hist_strms_csr%ROWTYPE;
9086 
9087   l_rbk_khr           VARCHAR2(1);
9088   l_mass_rbk_khr      VARCHAR2(1);
9089   l_mass_rbk_trx_id   NUMBER;
9090   l_online_rbk_trx_id NUMBER;
9091 
9092   l_new_strm_tbl stmv_tbl_type;
9093   x_new_strm_tbl stmv_tbl_type;
9094 
9095   l_new_strm_count NUMBER := 0;
9096 
9097   --Bug# 6344223
9098   --Cursor to check whether split asset transaction is in progress for the contract
9099   CURSOR check_split_trx_csr IS
9100   SELECT tas.id
9101   FROM OKL_TXL_ASSETS_B txl, OKL_TRX_ASSETS tas
9102   WHERE txl.tal_type= 'ALI'
9103   AND txl.dnz_khr_id = p_khr_id
9104   AND txl.tas_id = tas.id
9105   AND tas.tas_type = 'ALI'
9106   AND tas.tsu_code = 'ENTERED';
9107 
9108   l_split_trans_id    OKL_TRX_ASSETS.ID%TYPE;
9109   --end Bug# 6344223
9110 
9111   BEGIN
9112     IF (G_DEBUG_ENABLED = 'Y') THEN
9113       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
9114     END IF;
9115 
9116       x_return_status := OKL_API.G_RET_STS_SUCCESS;
9117       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9118               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
9119       END IF;
9120       -- call START_ACTIVITY to create savepoint, check compatibility
9121       -- and initialize message list
9122       x_return_status := OKL_API.START_ACTIVITY(
9123 			p_api_name      => l_api_name,
9124 			p_pkg_name      => G_PKG_NAME,
9125 			p_init_msg_list => p_init_msg_list,
9126 			l_api_version   => l_api_version,
9127 			p_api_version   => p_api_version,
9128 			p_api_type      => G_API_TYPE,
9129 			x_return_status => x_return_status);
9130 
9131       -- check if activity started successfully
9132       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9133          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9134       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
9135          raise OKL_API.G_EXCEPTION_ERROR;
9136       END IF;
9137 
9138       --Bug# 6344223
9139       OPEN check_split_trx_csr;
9140       FETCH check_split_trx_csr INTO l_split_trans_id;
9141       CLOSE check_split_trx_csr;
9142       --end Bug# 6344223
9143 
9144       --check for mass rebook contract
9145       l_mass_rbk_khr := '?';
9146       l_mass_rbk_trx_id := null;
9147       OPEN chk_mass_rbk_csr (p_chr_id => p_khr_id);
9148       FETCH chk_mass_rbk_csr INTO l_mass_rbk_khr,l_mass_rbk_trx_id;
9149       CLOSE chk_mass_rbk_csr;
9150       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9151               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_mass_rbk_khr: '||l_mass_rbk_khr);
9152         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_mass_rbk_trx_id: '||l_mass_rbk_trx_id);
9153       END IF;
9154 
9155       --check for rebook contract
9156       l_rbk_khr := '?';
9157       l_online_rbk_trx_id := null;
9158       OPEN chk_rbk_csr (p_chr_id => p_khr_id);
9159       FETCH chk_rbk_csr INTO l_rbk_khr,l_online_rbk_trx_id;
9160       CLOSE chk_rbk_csr;
9161       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9162               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rbk_khr: '||l_rbk_khr);
9163         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_online_rbk_trx_id: '||l_online_rbk_trx_id);
9164       END IF;
9165 
9166       --Added condition l_split_trans_id IS NOT NULL for Bug# 6344223
9167       IF ((l_split_trans_id IS NOT NULL) OR l_mass_rbk_khr = '!' OR  l_rbk_khr = '!') THEN
9168 
9169         l_new_strm_tbl.DELETE;
9170         l_new_strm_count := 0;
9171 
9172         FOR curr_streams_rec IN curr_streams_csr(p_khr_id => p_khr_id)
9173         LOOP
9174 
9175           l_new_strm_count := l_new_strm_count + 1;
9176           l_new_strm_tbl(l_new_strm_count).id  := curr_streams_rec.new_stm_id;
9177 
9178           IF l_mass_rbk_khr = '!' THEN
9179             l_new_strm_tbl(l_new_strm_count).trx_id  := l_mass_rbk_trx_id;
9180           --Bug# 6344223
9181           ELSIF l_split_trans_id IS NOT NULL THEN
9182             l_new_strm_tbl(l_new_strm_count).trx_id  := l_split_trans_id;
9183           ELSIF l_rbk_khr = '!' THEN
9184             l_new_strm_tbl(l_new_strm_count).trx_id  := l_online_rbk_trx_id;
9185           END IF;
9186 
9187           hist_strms_rec.orig_stm_id := NULL;
9188           OPEN hist_strms_csr(p_new_stm_id => curr_streams_rec.new_stm_id,
9189                               p_khr_id     => p_khr_id);
9190           FETCH hist_strms_csr INTO hist_strms_rec;
9191           CLOSE hist_strms_csr;
9192 
9193           IF hist_strms_rec.orig_stm_id IS NOT NULL THEN
9194               l_new_strm_tbl(l_new_strm_count).link_hist_stream_id := hist_strms_rec.orig_stm_id;
9195           END IF;
9196 
9197           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9198                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'New Stream ID: '||l_new_strm_tbl(l_new_strm_count).id);
9199             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig Stream ID: '||l_new_strm_tbl(l_new_strm_count).link_hist_stream_id);
9200           END IF;
9201 
9202         END LOOP;
9203 
9204         IF (l_new_strm_tbl.COUNT > 0) THEN
9205 
9206           -- Call Streams api to update Link_Hist_Stream_Id and Trx_Id
9207           okl_streams_pub.update_streams(
9208                                       p_api_version    => 1.0,
9209                                       p_init_msg_list  => OKL_API.G_FALSE,
9210                                       x_return_status  => x_return_status,
9211                                       x_msg_count      => x_msg_count,
9212                                       x_msg_data       => x_msg_data,
9213                                       p_stmv_tbl       => l_new_strm_tbl,
9214                                       x_stmv_tbl       => x_new_strm_tbl
9215                                      );
9216 
9217           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9218                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of New Strms - Trx ID and Hist ID '||x_return_status);
9219           END IF;
9220 
9221           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9222             raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9223           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
9224             raise OKL_API.G_EXCEPTION_ERROR;
9225           END IF;
9226         END IF;
9227       END IF;
9228 
9229       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
9230                            x_msg_data    => x_msg_data);
9231 
9232   EXCEPTION
9233       when OKL_API.G_EXCEPTION_ERROR then
9234          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9235 			p_api_name  => l_api_name,
9236 			p_pkg_name  => G_PKG_NAME,
9237 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9238 			x_msg_count => x_msg_count,
9239 			x_msg_data  => x_msg_data,
9240 			p_api_type  => G_API_TYPE);
9241 
9242       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9243          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9244 			p_api_name  => l_api_name,
9245 			p_pkg_name  => G_PKG_NAME,
9246 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9247 			x_msg_count => x_msg_count,
9248 			x_msg_data  => x_msg_data,
9249 			p_api_type  => G_API_TYPE);
9250 
9251       when OTHERS then
9252          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9253 			p_api_name  => l_api_name,
9254 			p_pkg_name  => G_PKG_NAME,
9255 			p_exc_name  => 'OTHERS',
9256 			x_msg_count => x_msg_count,
9257 			x_msg_data  => x_msg_data,
9258 			p_api_type  => G_API_TYPE);
9259 
9260   END link_inv_accrual_streams;
9261 
9262     ------------------------------------------------------------------------------
9263 -- PROCEDURE calc_inv_acc_adjustment
9264 --
9265 --  This procedure calculates the accrual adjustment for Investor accrual streams
9266 --  where there is a difference between amount actually accrued and amount
9267 --  that should have been accrued and calls the Accrual api to make the
9268 --  accrual adjustment. The current streams taken into account for
9269 --  calculating accrual adjustment are then marked as Accrual adjusted in order
9270 --  to stop duplicate accrual.
9271 --
9272 -- Calls:
9273 -- Called By:
9274 -- Added new input parameters p_trx_tbl_code and p_trx_type for Bug# 6344223
9275 ------------------------------------------------------------------------------
9276   PROCEDURE calc_inv_acc_adjustment(
9277                          p_api_version     IN  NUMBER,
9278                          p_init_msg_list   IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
9279                          x_return_status   OUT NOCOPY VARCHAR2,
9280                          x_msg_count       OUT NOCOPY NUMBER,
9281                          x_msg_data        OUT NOCOPY VARCHAR2,
9282                          p_orig_khr_id     IN  NUMBER,
9283                          p_trx_id          IN  NUMBER,
9284                          p_trx_date        IN  DATE,
9285                          x_inv_accrual_rec OUT NOCOPY OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type,
9286                          x_inv_stream_tbl  OUT NOCOPY OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type,
9287                          p_trx_tbl_code    IN  VARCHAR2 DEFAULT 'TCN',
9288                          p_trx_type        IN  VARCHAR2 DEFAULT 'CRB',
9289                          p_product_id      IN  NUMBER   DEFAULT  NULL -- MGAAP
9290                          ) IS
9291 
9292   l_api_name             VARCHAR2(35)    := 'calc_inv_acc_adjustment';
9293   l_proc_name            VARCHAR2(35)    := 'CALC_INV_ACC_ADJUSTMENT';
9294   l_api_version          CONSTANT NUMBER := 1;
9295 
9296   CURSOR curr_accrual_streams_csr(p_khr_id  IN NUMBER) IS
9297   SELECT new_stm.id   new_stm_id,
9298          orig_stm.id  orig_stm_id,
9299          orig_stm.sty_id,
9300          orig_stm.kle_id,
9301          sty.name
9302   --FROM   okl_streams new_stm,
9303   FROM   okl_streams_rep_v new_stm,  -- MGAAP 7263041
9304          okl_prod_strm_types psty,
9305          okl_k_headers khr,
9306          --okl_streams orig_stm,
9307          okl_streams_rep_v orig_stm,  -- MGAAP 7263041
9308          okl_strm_type_v sty
9309   WHERE  khr.id = p_khr_id
9310   --AND    psty.pdt_id = khr.pdt_id
9311   AND    psty.pdt_id = NVL(p_product_id, khr.pdt_id) -- MGAAP 7263041
9312   AND    psty.accrual_yn = 'Y'
9313   AND    psty.sty_id = new_stm.sty_id
9314   AND    new_stm.khr_id = khr.id
9315   AND    new_stm.say_code = 'CURR'
9316   AND    orig_stm.id = new_stm.link_hist_stream_id
9317   AND    sty.id = orig_stm.sty_id
9318   AND    sty.stream_type_purpose IN
9319          ('INVESTOR_RENTAL_ACCRUAL',
9320           'INVESTOR_PRETAX_INCOME',
9321           'INVESTOR_INTEREST_INCOME',
9322           'INVESTOR_VARIABLE_INTEREST');
9323 
9324   CURSOR max_accrual_date_csr(p_stm_id IN NUMBER) IS
9325   SELECT MAX(sel.stream_element_date) stream_element_date
9326   FROM okl_strm_elements sel
9327   WHERE sel.stm_id = p_stm_id
9328   AND   sel.accrued_yn IS NOT NULL;
9329 
9330   CURSOR actual_amount_accrued_csr(p_stm_id IN NUMBER) IS
9331   SELECT NVL(SUM(sel.amount),0) amount
9332   FROM okl_strm_elements sel
9333   WHERE sel.stm_id = p_stm_id
9334   AND   sel.accrued_yn IS NOT NULL;
9335 
9336   CURSOR amount_to_be_accrued_csr(p_stm_id IN NUMBER,
9337                                   p_max_accrual_date IN DATE) IS
9338   SELECT sel.id sel_id,
9339          NVL(sel.amount,0) amount
9340   FROM okl_strm_elements sel
9341   WHERE sel.stm_id = p_stm_id
9342   AND   sel.stream_element_date <= p_max_accrual_date;
9343 
9344   l_max_accrual_date DATE;
9345   l_actual_amount_accrued NUMBER;
9346   l_amount_to_be_accrued NUMBER;
9347   l_accrual_adjustment NUMBER;
9348 
9349   l_selv_tbl    selv_tbl_type;
9350   x_selv_tbl    selv_tbl_type;
9351 
9352   l_selv_count  NUMBER;
9353 
9354   i             NUMBER;
9355 
9356   l_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
9357   l_stream_tbl  OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
9358   l_gl_date     DATE;
9359 
9360   BEGIN
9361     IF (G_DEBUG_ENABLED = 'Y') THEN
9362       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
9363     END IF;
9364 
9365       x_return_status := OKL_API.G_RET_STS_SUCCESS;
9366       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9367               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
9368       END IF;
9369       -- call START_ACTIVITY to create savepoint, check compatibility
9370       -- and initialize message list
9371       x_return_status := OKL_API.START_ACTIVITY(
9372 			p_api_name      => l_api_name,
9373 			p_pkg_name      => G_PKG_NAME,
9374 			p_init_msg_list => p_init_msg_list,
9375 			l_api_version   => l_api_version,
9376 			p_api_version   => p_api_version,
9377 			p_api_type      => G_API_TYPE,
9378 			x_return_status => x_return_status);
9379 
9380       -- check if activity started successfully
9381       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9382          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9383       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9384          RAISE OKL_API.G_EXCEPTION_ERROR;
9385       END IF;
9386 
9387       -- For On-line and Mass rebook, calculate accrual adjustment
9388       -- for all Current Accrual Streams for which Accruals were generated
9389       -- in the Original contract
9390 
9391       i := 0;
9392       l_stream_tbl.DELETE;
9393       FOR curr_accrual_streams_rec IN curr_accrual_streams_csr(p_khr_id => p_orig_khr_id)
9394       LOOP
9395 
9396         l_max_accrual_date := NULL;
9397         OPEN max_accrual_date_csr(p_stm_id => curr_accrual_streams_rec.orig_stm_id);
9398         FETCH max_accrual_date_csr INTO l_max_accrual_date;
9399         CLOSE max_accrual_date_csr;
9400 
9401         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9402                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'New Stream Id: '||curr_accrual_streams_rec.new_stm_id);
9403           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Orig Stream Id: '||curr_accrual_streams_rec.orig_stm_id);
9404           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Max Accrual Date: '||l_max_accrual_date);
9405         END IF;
9406 
9407         IF l_max_accrual_date IS NOT NULL THEN
9408 
9409           l_actual_amount_accrued := 0;
9410           OPEN actual_amount_accrued_csr(p_stm_id => curr_accrual_streams_rec.orig_stm_id);
9411           FETCH actual_amount_accrued_csr INTO l_actual_amount_accrued;
9412           CLOSE actual_amount_accrued_csr;
9413 
9414           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9415                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Actual Amount Accrued: '||l_actual_amount_accrued);
9416           END IF;
9417 
9418           l_amount_to_be_accrued := 0;
9419           l_selv_count := 0;
9420           l_selv_tbl.DELETE;
9421 
9422           FOR amount_to_be_accrued_rec IN
9423               amount_to_be_accrued_csr(p_stm_id => curr_accrual_streams_rec.new_stm_id,
9424                                       p_max_accrual_date => l_max_accrual_date)
9425           LOOP
9426 
9427             -- Call Streams api to update accrued_yn, accrual_adj_flag
9428             l_selv_count := l_selv_count + 1;
9429             l_amount_to_be_accrued := l_amount_to_be_accrued + amount_to_be_accrued_rec.amount;
9430 
9431             l_selv_tbl(l_selv_count).id        := amount_to_be_accrued_rec.sel_id;
9432             l_selv_tbl(l_selv_count).accrued_yn := 'Y';
9433             l_selv_tbl(l_selv_count).accrual_adj_flag  := 'Y';
9434 
9435           END LOOP;
9436 
9437           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9438                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Amount to be Accrued: '||l_amount_to_be_accrued);
9439           END IF;
9440 
9441           l_accrual_adjustment := l_amount_to_be_accrued -  l_actual_amount_accrued;
9442 
9443           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9444                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Accrual Adjustment: '||l_accrual_adjustment);
9445           END IF;
9446 
9447           IF l_accrual_adjustment <> 0 THEN
9448             i := i + 1;
9449             l_stream_tbl(i).stream_type_id   := curr_accrual_streams_rec.sty_id;
9450             l_stream_tbl(i).stream_type_name := curr_accrual_streams_rec.name;
9451             l_stream_tbl(i).stream_amount    := l_accrual_adjustment;
9452             l_stream_tbl(i).kle_id           := curr_accrual_streams_rec.kle_id;
9453 
9454             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9455                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Accrual Adjustment Record');
9456               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i '||i);
9457               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_type_id: '||l_stream_tbl(i).stream_type_id);
9458               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_type_name: '||l_stream_tbl(i).stream_type_name);
9459               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).stream_amount: '||l_stream_tbl(i).stream_amount);
9460               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_stream_tbl(i).kle_id: '||l_stream_tbl(i).kle_id);
9461             END IF;
9462           END IF;
9463 
9464           IF (l_selv_tbl.COUNT > 0) THEN
9465             okl_streams_pub.update_stream_elements(
9466                                       p_api_version    => 1.0,
9467                                       p_init_msg_list  => OKL_API.G_FALSE,
9468                                       x_return_status  => x_return_status,
9469                                       x_msg_count      => x_msg_count,
9470                                       x_msg_data       => x_msg_data,
9471                                       p_selv_tbl       => l_selv_tbl,
9472                                       x_selv_tbl       => x_selv_tbl
9473                                      );
9474 
9475             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9476                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update of Stream Elements - Accrued Yn and Accrual Adj Flag '||x_return_status);
9477             END IF;
9478 
9479             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9480               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9481             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9482               RAISE OKL_API.G_EXCEPTION_ERROR;
9483             END IF;
9484           END IF;
9485 
9486         END IF;
9487       END LOOP;
9488 
9489       IF (l_stream_tbl.COUNT > 0) THEN
9490 
9491         l_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_gl_date => p_trx_date);
9492 
9493         l_accrual_rec.contract_id   := p_orig_khr_id;
9494         l_accrual_rec.accrual_date  := l_gl_date;
9495         l_accrual_rec.source_trx_id := p_trx_id;
9496 
9497         --Bug# 6344223
9498         l_accrual_rec.source_trx_type := p_trx_tbl_code;
9499         IF p_trx_type = 'CRB' THEN
9500           l_accrual_rec.description   := 'Rebook Adjustment';
9501         ELSIF p_trx_type = 'ALI' THEN
9502           l_accrual_rec.description   := 'Split Asset Adjustment';
9503         END IF;
9504         --end Bug# 6344223
9505 
9506         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9507                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Accrual Adjustment Header Record');
9508           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.contract_id: '||l_accrual_rec.contract_id);
9509           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.accrual_date: '||l_accrual_rec.accrual_date);
9510           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.description: '||l_accrual_rec.description);
9511           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.source_trx_id: '||l_accrual_rec.source_trx_id);
9512           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_accrual_rec.source_trx_type: '||l_accrual_rec.source_trx_type);
9513         END IF;
9514 
9515 
9516           x_inv_stream_tbl := l_stream_tbl;
9517           x_inv_accrual_rec := l_accrual_rec;
9518       END IF;
9519 
9520       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
9521                            x_msg_data    => x_msg_data);
9522 
9523   EXCEPTION
9524       WHEN OKL_API.G_EXCEPTION_ERROR THEN
9525          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9526 			p_api_name  => l_api_name,
9527 			p_pkg_name  => G_PKG_NAME,
9528 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9529 			x_msg_count => x_msg_count,
9530 			x_msg_data  => x_msg_data,
9531 			p_api_type  => G_API_TYPE);
9532 
9533       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
9534          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9535 			p_api_name  => l_api_name,
9536 			p_pkg_name  => G_PKG_NAME,
9537 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9538 			x_msg_count => x_msg_count,
9539 			x_msg_data  => x_msg_data,
9540 			p_api_type  => G_API_TYPE);
9541 
9542       WHEN OTHERS THEN
9543          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9544 			p_api_name  => l_api_name,
9545 			p_pkg_name  => G_PKG_NAME,
9546 			p_exc_name  => 'OTHERS',
9547 			x_msg_count => x_msg_count,
9548 			x_msg_data  => x_msg_data,
9549 			p_api_type  => G_API_TYPE);
9550   END calc_inv_acc_adjustment;
9551 -- Bug# 4775555: End
9552 
9553 END OKL_CONTRACT_REBOOK_PVT;