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