DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_MASS_REBOOK_PVT

Source


1 PACKAGE BODY OKL_MASS_REBOOK_PVT AS
2 /* $Header: OKLRMRPB.pls 120.33.12010000.3 2008/11/25 09:17:29 nikshah ship $*/
3 
4 
5     G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
6     G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
7     G_IS_DEBUG_STATEMENT_ON BOOLEAN;
8 
9 --Global Variables
10   G_INIT_NUMBER NUMBER := -9999;
11   G_PKG_NAME    CONSTANT VARCHAR2(200) := 'OKL_MASS_REBOOK_PVT';
12   G_APP_NAME    CONSTANT VARCHAR2(3)   :=  OKL_API.G_APP_NAME;
13   G_API_TYPE    CONSTANT VARCHAR2(4)   := '_PVT';
14 
15   g_stream_trx_number NUMBER; -- Stream Trx number, updated only from rebook_contract
16 
17   --DEBUG
18   G_PPD_TRX_ID   NUMBER := NULL; -- PPD trx id
19   G_PPD_TRX_TYPE VARCHAR2(100) := NULL; -- PPD trx type
20   G_TERMINATION_TRX_ID   NUMBER := NULL; -- termination trx id
21   G_TERMINATION_TRX_TYPE VARCHAR2(100) := NULL; -- termination trx type
22   G_MASS_RBK_TRX_ID      NUMBER := NULL;
23   -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
24   G_ICB_REAMORT CONSTANT OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE
25                 := 'REAMORT';
26   G_RRM_STREAMS CONSTANT OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_METHOD%TYPE
27                 := 'STREAMS';
28   -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
29 
30   subtype rgpv_rec_type IS OKL_RULE_PUB.rgpv_rec_type;
31 
32   subtype rulv_rec_type IS OKL_RULE_PUB.rulv_rec_type;
33   subtype rulv_tbl_type IS OKL_RULE_PUB.rulv_tbl_type;
34 
35   /*TYPE kle_rec_type IS RECORD (
36     ID          OKL_K_LINES_V.ID%TYPE
37   );
38 
39   TYPE kle_tbl_type IS TABLE OF kle_rec_type INDEX BY BINARY_INTEGER; */
40 
41 
42 ------------------------------------------------------------------------------
43 -- PROCEDURE Report_Error
44 -- It is a generalized routine to display error on Concurrent Manager Log file
45 -- Calls:
46 -- Called by:
47 ------------------------------------------------------------------------------
48 
49   PROCEDURE Report_Error(
50                          x_msg_count OUT NOCOPY NUMBER,
51                          x_msg_data  OUT NOCOPY VARCHAR2
52                         ) IS
53 
54   x_msg_index_out NUMBER;
55   x_msg_out       VARCHAR2(2000);
56 
57   BEGIN
58 
59     okl_api.end_activity(
60                          X_msg_count => x_msg_count,
61                          X_msg_data  => x_msg_data
62                         );
63     FOR i in 1..x_msg_count
64     LOOP
65       FND_MSG_PUB.GET(
66                       p_msg_index     => i,
67                       p_encoded       => FND_API.G_FALSE,
68                       p_data          => x_msg_data,
69                       p_msg_index_out => x_msg_index_out
70                      );
71 
72     END LOOP;
73     return;
74   EXCEPTION
75     WHEN OTHERS THEN
76       NULL;
77   END Report_Error;
78 
79 ------------------------------------------------------------------------------
80 -- PROCEDURE get_seq_id
81 --   This proecdure returns unique sequence ID
82 -- Calls:
83 -- Called by:
84 ------------------------------------------------------------------------------
85 
86   FUNCTION get_seq_id RETURN NUMBER IS
87   BEGIN
88     RETURN(okc_p_util.raw_to_number(sys_guid()));
89   END get_seq_id;
90 
91 ------------------------------------------------------------------------------
92 -- PROCEDURE get_formated_value
93 --   This proecdure checks for NUMERIC or CHARACTER Value
94 -- Calls:
95 -- Called by:
96 ------------------------------------------------------------------------------
97 
98   PROCEDURE get_formated_value(
99                                x_return_status OUT NOCOPY VARCHAR2,
100                                p_orig_value    IN  VARCHAR2,
101                                x_fmt_value     OUT NOCOPY VARCHAR2
102                               ) IS
103   l_proc_name VARCHAR2(35) := 'GET_FORMATED_VALUE';
104   l_dummy_number NUMBER;
105   BEGIN
106     IF (G_DEBUG_ENABLED = 'Y') THEN
107       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
108     END IF;
109     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
110           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
111     END IF;
112     x_return_status := OKL_API.G_RET_STS_SUCCESS;
113 
114     -- Check for NUMBER and CHARACTER
115     BEGIN
116       l_dummy_number := TO_NUMBER(p_orig_value);
117       x_fmt_value    := p_orig_value;
118     EXCEPTION
119       WHEN VALUE_ERROR THEN
120          x_fmt_value := ''''||p_orig_value||'''';
121     END;
122 
123     RETURN;
124   EXCEPTION
125     WHEN OTHERS THEN
126        x_return_status := OKL_API.G_RET_STS_ERROR;
127   END get_formated_value;
128 
129 ------------------------------------------------------------------------------
130 -- PROCEDURE get_qcl_id
131 -- It returns qcl_id for QA checker to run
132 -- Calls:
133 -- Called By:
134 ------------------------------------------------------------------------------
135 
136    PROCEDURE get_qcl_id(
137                         x_return_status OUT NOCOPY VARCHAR2,
138                         p_qcl_name      IN  VARCHAR2,
139                         x_qcl_id        OUT NOCOPY NUMBER) IS
140 
141    CURSOR qcl_csr (p_qcL_name VARCHAR2) IS
142    SELECT id
143    FROM   okc_qa_check_lists_v
144    WHERE  name = p_qcl_name;
145 
146    l_id   NUMBER;
147 
148    BEGIN
149 
150       x_return_status := OKL_API.G_RET_STS_SUCCESS;
151 
152       OPEN qcl_csr(p_qcl_name);
153       FETCH qcl_csr INTO l_id;
154       CLOSE qcl_csr;
155 
156       x_qcl_id := l_id;
157 
158    END get_qcl_id;
159 
160 ------------------------------------------------------------------------------
161 -- PROCEDURE build_selection
162 --   This proecdure builds "SELECT" statement from Operands and criteria
163 --   provided on OKL_MASS_RBK_CRITERIA Table against a REQUEST_NAME.
164 --   It returns the SELECT Statement for further processing
165 -- Calls:
166 -- Called by:
167 ------------------------------------------------------------------------------
168   PROCEDURE build_selection(
169                             x_return_status OUT NOCOPY VARCHAR2,
170                             x_msg_count     OUT NOCOPY NUMBER,
171                             x_msg_data      OUT NOCOPY VARCHAR2,
172                             p_request_name  IN  VARCHAR2,
173                             p_transaction_date IN DATE,
174                             x_statement     OUT NOCOPY VARCHAR2
175                            ) IS
176 
177   l_api_name    VARCHAR2(35)    := 'build_selection';
178   l_proc_name   VARCHAR2(35)    := 'BUILD_SELECTION';
179 
180   CURSOR mass_rbk_csr (p_req_name VARCHAR2) IS
181   SELECT *
182   FROM   okl_mass_rbk_criteria
183   WHERE  request_name = p_req_name
184   AND    operand IS NOT NULL
185   ORDER BY line_number;
186 
187   CURSOR crit_csr (p_code VARCHAR2) IS
188   SELECT 'Y'
189   FROM   fnd_lookups
190   WHERE  lookup_type = 'OKL_MASS_RBK_CRITERIA'
191   AND    lookup_code = p_code;
192 
193   l_query         VARCHAR2(2000);
194   l_clause        VARCHAR2(10);
195   l_present       VARCHAR2(1);
196   l_criteria_code VARCHAR2(35);
197   l_fmt_value     VARCHAR2(100);
198   i               NUMBER := 0;
199   l_asset_row     NUMBER := 0;
200   l_fmt_criteria1 VARCHAR2(100);
201   l_fmt_criteria2 VARCHAR2(100);
202   l_asset_query_present VARCHAR2(1);
203 
204   build_error EXCEPTION;
205 
206   BEGIN
207     IF (G_DEBUG_ENABLED = 'Y') THEN
208       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
209     END IF;
210      x_return_status := OKL_API.G_RET_STS_SUCCESS;
211 
212      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
213             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
214      END IF;
215 
216      l_asset_query_present := 'F';  -- Checks the presence of Asset Related Criteria
217 
218      l_query := 'SELECT CON.ID, CON.CONTRACT_NUMBER, LINE.ID, CON.SHORT_DESCRIPTION FROM OKL_K_HEADERS_FULL_V CON, ';
219      l_query := l_query || ' OKL_K_LINES_FULL_V LINE ';
220 
221      --insert into dd_dummy values (1,l_query);
222 
223      FOR rbk_rec IN mass_rbk_csr(p_request_name)
224      LOOP
225 
226         OPEN crit_csr (rbk_rec.criteria_code);
227         FETCH crit_csr INTO l_present;
228         IF crit_csr%NOTFOUND THEN
229            okl_api.set_message(
230                                G_APP_NAME,
231                                G_INVALID_CODE,
232                                'VALUE',
233                                rbk_rec.criteria_code
234                               );
235            RAISE build_error;
236         END IF;
237 
238         CLOSE crit_csr;
239 
240         l_criteria_code := rbk_rec.criteria_code;
241         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
242                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_criteria_code);
243         END IF;
244         -- Special formatting for CONTRACT_NUMBER, always character
245         IF (l_criteria_code = 'CONTRACT_NUMBER') THEN
246 
247           l_fmt_criteria1 := ''''||rbk_rec.criteria_value1||'''';
248 
249         ELSE
250            -- Check criteria_value, set_value type
251            IF (rbk_rec.criteria_value1 IS NOT NULL) THEN
252               get_formated_value(
253                                  x_return_status => x_return_status,
254                                  p_orig_value    => rbk_rec.criteria_value1,
255                                  x_fmt_value     => l_fmt_value
256                                 );
257               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
258                  okl_api.set_message(
259                                      G_APP_NAME,
260                                      G_FORMAT_ERROR
261                                     );
262                  RAISE build_error;
263               END IF;
264 
265               l_fmt_criteria1 := l_fmt_value;
266            ELSE
267               l_fmt_criteria1 := NULL;
268            END IF;
269 
270            IF (rbk_rec.criteria_value2 IS NOT NULL) THEN
271               get_formated_value(
272                                  x_return_status => x_return_status,
273                                  p_orig_value    => rbk_rec.criteria_value2,
274                                  x_fmt_value     => l_fmt_value
275                                 );
276               IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
277                  okl_api.set_message(
278                                      G_APP_NAME,
279                                      G_FORMAT_ERROR
280                                     );
281                  RAISE build_error;
282               END IF;
283 
284               l_fmt_criteria2 := l_fmt_value;
285            ELSE
286               l_fmt_criteria2 := NULL;
287            END IF;
288         END IF;
289 
290         i := i + 1;
291 
292         IF (i = 1) THEN -- First Row
293           l_clause := ' WHERE ';
294         ELSE
295           l_clause := ' AND ' ;
296         END IF;
297 
298         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
299                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_fmt_criteria1||', '||l_fmt_criteria2);
300         END IF;
301 
302 
303         IF (l_criteria_code IN ('BOOK_TYPE_CODE', 'DEPRN_METHOD_CODE', 'DATE_PLACED_IN_SERVICE')) THEN
304            l_asset_row := l_asset_row + 1;
305            l_asset_query_present := 'T';
306            l_query := l_query || l_clause || ' ';
307            IF (l_asset_row = 1) THEN -- First Asset Criteria
308               l_query := l_query || 'EXISTS ( SELECT 1 FROM OKC_K_ITEMS_V ITEM, FA_BOOKS FB ';
309               l_query := l_query || 'WHERE ITEM.JTOT_OBJECT1_CODE = '||''''||'OKX_ASSET'||'''';
310               l_query := l_query || ' AND ITEM.DNZ_CHR_ID = CON.ID ';
311               l_query := l_query || ' AND LINE.ID = ITEM.CLE_ID ';
312               l_query := l_query || ' AND ITEM.OBJECT1_ID1 = FB.ASSET_ID AND';
313               --insert into dd_dummy values (2,l_query);
314               IF (UPPER(rbk_rec.operand) = 'BETWEEN') THEN
315                  l_query := l_query || ' FB.' || l_criteria_code || ' '|| upper(rbk_rec.operand)|| ' ';
316                  l_query := l_query || l_fmt_criteria1 || ' AND ' ||
317                                        l_fmt_criteria2 ||' ';
318                  --insert into dd_dummy values (3,l_query);
319               ELSE
320                  l_query := l_query || ' FB.'||l_criteria_code|| ' ' || upper(rbk_rec.operand) || ' ' || l_fmt_criteria1;
321                  --insert into dd_dummy values (4,l_query);
322               END IF;
323            ELSE
324               IF (UPPER(rbk_rec.operand) = 'BETWEEN') THEN
325 
326                  l_query := l_query || ' FB.'|| l_criteria_code || ' ' || upper(rbk_rec.operand)|| ' ';
327                  l_query := l_query || l_fmt_criteria1 || ' AND ' ||
328                                        l_fmt_criteria2 ||' ';
329                  --insert into dd_dummy values (5,l_query);
330               ELSE
331                  l_query := l_query || ' FB.'||l_criteria_code|| ' ' || upper(rbk_rec.operand) || ' ' || l_fmt_criteria1;
332                  --insert into dd_dummy values (6,l_query);
333               END IF;
334 
335            -- go to FA_BOOKS
336            -- Add criteria from OKL_TXD_ASSETS_V and OKL_TXL_ASSETS_V
337            --
338            END IF;
339         ELSIF (l_criteria_code = 'ASSET_CATEGORY_ID') THEN
340            -- go to FA_ADDITIONS
341            IF (l_asset_query_present = 'T') THEN
342               l_query := l_query || ' ) '; -- Complete Asset Query above
343               l_asset_query_present := 'F';
344            END IF;
345 
346            l_query := l_query || l_clause || ' ';
347            l_query := l_query || ' EXISTS ( SELECT 1 FROM OKC_K_ITEMS_V ITEM, FA_ADDITIONS ASSET ';
348            l_query := l_query || 'WHERE ITEM.JTOT_OBJECT1_CODE = '||''''||'OKX_ASSET'||'''';
349            l_query := l_query || ' AND ITEM.DNZ_CHR_ID = CON.ID ';
350            l_query := l_query || ' AND LINE.ID = ITEM.CLE_ID ';
351            l_query := l_query || ' AND ITEM.OBJECT1_ID1 = ASSET.ASSET_ID ';
352            l_query := l_query || ' AND ASSET.'||l_criteria_code|| ' ' || upper(rbk_rec.operand) || ' ' || l_fmt_criteria1;
353            l_query := l_query || ' )';
354            --insert into dd_dummy values (7,l_query);
355 
356         ELSE
357 
358            l_query := l_query || l_clause || 'CON.'|| l_criteria_code ||' ';
359            --insert into dd_dummy values (8,l_query);
360 
361            IF (upper(rbk_rec.operand) = 'BETWEEN') THEN
362                l_query := l_query || upper(rbk_rec.operand)||' ';
363                l_query := l_query || l_fmt_criteria1 ||' AND '||
364                                      l_fmt_criteria2 ||' ';
365                --insert into dd_dummy values (9,l_query);
366            ELSE
367                l_query := l_query || upper(rbk_rec.operand)||' ';
368                l_query := l_query || l_fmt_criteria1 || ' ';
369                --insert into dd_dummy values (10,l_query);
370            END IF;
371 
372         END IF;  -- Asset criteria
373 
374      END LOOP;
375 
376      IF (l_asset_query_present = 'T') THEN
377         l_query := l_query || ' ) ';
378         l_asset_query_present := 'F';
379      END IF;
380 
381      l_query := l_query || ' AND CON.STS_CODE = '||''''||'BOOKED'||'''';
382       ----
383      --Get the Formatted Value for Revision Date
384      IF (p_transaction_date IS NOT NULL) THEN
385          get_formated_value(
386                             x_return_status => x_return_status,
387                             p_orig_value    => p_transaction_date,
388                             x_fmt_value     => l_fmt_value
389                             );
390      END IF;
391      l_query := l_query || ' '||' AND '|| l_fmt_value || ''||'BETWEEN'||'';
392      l_query := l_query || ' CON.START_DATE AND CON.END_DATE ' ||'';
393      --------
394 
395      l_query := l_query || ' AND CON.ID = LINE.DNZ_CHR_ID ';
396      l_query := l_query || ' AND LINE.STS_CODE = '||''''||'BOOKED'||'''';
397      l_query := l_query || ' AND LINE.LSE_ID = (SELECT ID FROM OKC_LINE_STYLES_V ';
398      l_query := l_query || ' WHERE LTY_CODE = '||''''||'FIXED_ASSET'||''''||')';
399 
400      --
401      -- Add authoring org restriction
402 
403      IF (i = 0) THEN
404         -- Error 1
405        okl_api.set_message(
406                             G_APP_NAME,
407                             G_NOT_VALID_REQUEST,
408                             'REQ_NAME',
409                             p_request_name
410                            );
411         RAISE build_error;
412      END IF;
413 
414      --l_query := l_query || ';';
415 
416      x_statement := l_query;
417      RETURN;
418 
419   EXCEPTION
420      WHEN build_error THEN
421 
422         IF crit_csr%ISOPEN THEN
423            CLOSE crit_csr;
424         END IF;
425 
426         x_return_status := OKL_API.G_RET_STS_ERROR;
427 
428      WHEN OTHERS THEN
429          okl_api.set_message(
430                     G_APP_NAME,
431                     G_UNEXPECTED_ERROR,
432                     'OKL_SQLCODE',
433                     SQLCODE,
434                     'OKL_SQLERRM',
435                     SQLERRM || ': '||G_PKG_NAME||'.'||l_proc_name
436                    );
437          x_return_status := OKL_API.G_RET_STS_ERROR;
438   END build_selection;
439 
440 
441 ------------------------------------------------------------------------------
442 -- PROCEDURE get_contract
443 --   This proecdure uses DYNAMIC SQL to get list of contracts from
444 --   selection criteria provided by user in OKL_MASS_RBK_CRITERIA
445 --   against REQUEST_NAME
446 --   It returns the list of contracts selected under present crietria
447 -- Calls:
448 -- Called by:
449 ------------------------------------------------------------------------------
450   PROCEDURE get_contract(
451                          p_api_version        IN  NUMBER,
452                          p_init_msg_list      IN  VARCHAR2,
453                          x_return_status      OUT NOCOPY VARCHAR2,
454                          x_msg_count          OUT NOCOPY NUMBER,
455                          x_msg_data           OUT NOCOPY VARCHAR2,
456                          p_request_name       IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE,
457                          p_transaction_date   IN  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE DEFAULT SYSDATE,
458                          x_mstv_tbl           OUT NOCOPY mstv_tbl_type,
459                          x_rbk_count          OUT NOCOPY NUMBER
460                         ) IS
461 
462   l_api_name    VARCHAR2(35)    := 'get_contract';
463   l_proc_name   VARCHAR2(35)    := 'GET_CONTRACT';
464   l_api_version NUMBER          := 1.0;
465 
466   l_statement   VARCHAR2(2000);
467   TYPE rbk_csr_type IS REF CURSOR;
468   l_rbk_csr     rbk_csr_type;
469   l_rbk_rec     rbk_rec_type;
470   l_rbk_tbl     rbk_tbl_type;
471   i             NUMBER;
472   l_dummy       VARCHAR2(1);
473 
474   l_mstv_tbl    mstv_tbl_type;
475 
476   get_contract_failed EXCEPTION;
477 
478   CURSOR req_csr (p_request_name OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE) IS
479   SELECT 'Y'
480   FROM  okl_rbk_selected_contract
481   WHERE request_name = p_request_name;
482 
483   BEGIN
484     IF (G_DEBUG_ENABLED = 'Y') THEN
485       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
486     END IF;
487      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
488             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
489      END IF;
490 
491      OPEN req_csr (p_request_name);
492      FETCH req_csr INTO l_dummy;
493      IF req_csr%FOUND THEN
494         okl_api.set_message(
495                             G_APP_NAME,
496                             G_DUPLICATE_REQUEST,
497                             'REQ_NAME',
498                             p_request_name
499                            );
500        x_return_status := OKL_API.G_RET_STS_ERROR;
501        RAISE get_contract_failed;
502      END IF;
503 
504      CLOSE req_csr;
505 
506      --
507      -- Get Statement from Selection criteria
508      --
509 
510      build_selection(
511                      x_return_status => x_return_status,
512                      x_msg_count     => x_msg_count,
513                      x_msg_data      => x_msg_data,
514                      p_request_name  => p_request_name,
515                      p_transaction_date => p_transaction_date,
516                      x_statement     => l_statement
517                     );
518 
519      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
520          raise get_contract_failed;
521      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
522          raise get_contract_failed;
523      END IF;
524 
525      --insert into dd_dummy values (l_statement);
526      --commit;
527 
528      --
529      -- Run Dynamic SQL to get Contracts
530      --
531 
532      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
533             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_statement);
534      END IF;
535      i := 0;
536      OPEN l_rbk_csr FOR l_statement;
537      LOOP
538         i := i+ 1;
539         FETCH l_rbk_csr INTO l_rbk_tbl(i);
540         EXIT WHEN l_rbk_csr%NOTFOUND;
541      END LOOP;
542 
543      --x_rbk_tbl   := l_rbk_tbl;
544      x_rbk_count := l_rbk_tbl.COUNT;
545 
546      IF (x_rbk_count = 0) THEN
547        okl_api.set_message(
548                             G_APP_NAME,
549                             G_NO_MATCH_FOUND
550                            );
551        x_return_status := OKL_API.G_RET_STS_ERROR;
552        RAISE get_contract_failed;
553      ELSE
554      --
555      -- Populate Selection Table with these Contracts
556      --
557      FOR i IN 1..x_rbk_count
558      LOOP
559         l_mstv_tbl(i).request_name         := p_request_name; -- Link with Criteria Table
560         l_mstv_tbl(i).transaction_date     := p_transaction_date;
561         l_mstv_tbl(i).khr_id               := l_rbk_tbl(i).khr_id;
562         l_mstv_tbl(i).contract_number      := l_rbk_tbl(i).contract_number;
563         l_mstv_tbl(i).contract_description := l_rbk_tbl(i).description;
564         l_mstv_tbl(i).kle_id               := l_rbk_tbl(i).kle_id;
565         l_mstv_tbl(i).status               := 'NEW';
566         l_mstv_tbl(i).selected_flag        := 'Y';
567      END LOOP;
568 
569      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
570             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before selected contract insert');
571      END IF;
572 
573      okl_mst_pvt.insert_row(
574                             p_api_version   => 1.0,
575                             p_init_msg_list => OKL_API.G_FALSE,
576                             x_return_status => x_return_status,
577                             x_msg_count     => x_msg_count,
578                             x_msg_data      => x_msg_data,
579                             p_mstv_tbl      => l_mstv_tbl,
580                             x_mstv_tbl      => x_mstv_tbl
581                            );
582 
583         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
584             raise get_contract_failed;
585         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
586             raise get_contract_failed;
587         END IF;
588 
589      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
590             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After selected contract insert');
591      END IF;
592      END IF;
593 
594      RETURN;
595 
596   EXCEPTION
597       WHEN get_contract_failed THEN
598          RETURN;
599 
600       when OTHERS then
601          okl_api.set_message(
602                     G_APP_NAME,
603                     G_UNEXPECTED_ERROR,
604                     'OKL_SQLCODE',
605                     SQLCODE,
606                     'OKL_SQLERRM',
607                     SQLERRM || ': '||G_PKG_NAME||'.'||l_proc_name
608                    );
609          x_return_status := OKL_API.G_RET_STS_ERROR;
610 
611   END get_contract;
612 
613 ------------------------------------------------------------------------------
614 -- PROCEDURE validate_request
615 --   This proecdure checks incoming request before inserting and selecting contract
616 --   for mass re-book process. Checks include OPERAND, CRITERIA_VALUE and SET_VALUE
617 --   for each line in request.
618 -- Calls:
619 -- Called by:
620 ------------------------------------------------------------------------------
621   PROCEDURE validate_request(
622                              x_return_status  OUT NOCOPY VARCHAR2,
623                              x_msg_count      OUT NOCOPY NUMBER,
624                              x_msg_data       OUT NOCOPY VARCHAR2,
625                              p_request_name   IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE,
626                              p_mrbv_tbl       IN  mrbv_tbl_type
627                             ) IS
628 
629   l_api_name     VARCHAR2(35)    := 'validate_request';
630   l_proc_name    VARCHAR2(35)    := 'VALIDATE_REQUEST';
631   l_api_version  NUMBER          := 1.0;
632 
633   l_set_value_present VARCHAR2(1) := 'N';
634   request_failed EXCEPTION;
635   CURSOR get_nls_date_format IS
636     SELECT VALUE
637     FROM v$nls_parameters
638      WHERE parameter = 'NLS_DATE_FORMAT';
639   l_nls_date_format v$nls_parameters.VALUE%TYPE;
640   BEGIN
641     IF (G_DEBUG_ENABLED = 'Y') THEN
642       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
643     END IF;
644     x_return_status := OKL_API.G_RET_STS_SUCCESS;
645     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
646           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
647     END IF;
648 
649     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
650           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Req Lines: '||p_mrbv_tbl.COUNT);
651     END IF;
652 
653     l_set_value_present:= 'N';
654     OPEN get_nls_date_format;
655     FETCH get_nls_date_format INTO l_nls_date_format;
656     CLOSE get_nls_date_format;
657 
658     FOR i IN 1..p_mrbv_tbl.COUNT
659     LOOP
660       IF (p_mrbv_tbl(i).criteria_code = 'CONTRACT_NUMBER') THEN
661 
662          IF (p_mrbv_tbl(i).operand NOT IN ('LIKE','=')) THEN
663             okl_api.set_message(
664                                 G_APP_NAME,
665                                 G_INVALID_OPERAND,
666                                 'OPERAND',
667                                 p_mrbv_tbl(i).operand,
668                                 'CRIT_CODE',
669                                 p_mrbv_tbl(i).criteria_code
670                                );
671             x_return_status := OKL_API.G_RET_STS_ERROR;
672          END IF;
673 
674          IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
675             okl_api.set_message(
676                                 G_APP_NAME,
677                                 G_INVALID_SET_VALUE,
678                                 'CRIT_CODE',
679                                 p_mrbv_tbl(i).criteria_code
680                                );
681             x_return_status := OKL_API.G_RET_STS_ERROR;
682          END IF;
683 
684       ELSIF (p_mrbv_tbl(i).criteria_code = 'START_DATE') THEN
685 
686          IF (p_mrbv_tbl(i).operand NOT IN ('BETWEEN', '<=', '>=')) THEN
687             okl_api.set_message(
688                                 G_APP_NAME,
689                                 G_INVALID_OPERAND,
690                                 'OPERAND',
691                                 p_mrbv_tbl(i).operand,
692                                 'CRIT_CODE',
693                                 p_mrbv_tbl(i).criteria_code
694                                );
695             x_return_status := OKL_API.G_RET_STS_ERROR;
696          END IF;
697          --Check for Date Integrity
698          IF((p_mrbv_tbl(i).operand = 'BETWEEN') AND
699             ((FND_DATE.string_to_date(p_mrbv_tbl(i).CRITERIA_VALUE1,l_nls_date_format)) > (FND_DATE.string_to_date(p_mrbv_tbl(i).CRITERIA_VALUE2,l_nls_date_format)))) THEN
700            -- NAMED INVALID DATE RANGE
701            okl_api.set_message(
702                                 'FND',
703                                 'NAMED INVALID DATE RANGE',
704                                 'RANGE',
705                                 'CONTRACT_START_DATE');
706            x_return_status := OKL_API.G_RET_STS_ERROR;
707 
708          END IF;
709          IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
710             okl_api.set_message(
711                                 G_APP_NAME,
712                                 G_INVALID_SET_VALUE,
713                                 'CRIT_CODE',
714                                 p_mrbv_tbl(i).criteria_code
715                                );
716             x_return_status := OKL_API.G_RET_STS_ERROR;
717          END IF;
718 
719       ELSIF (p_mrbv_tbl(i).criteria_code = 'BOOK_TYPE_CODE') THEN
720 
721          IF (p_mrbv_tbl(i).operand NOT IN ('=')) THEN
722             okl_api.set_message(
723                                 G_APP_NAME,
724                                 G_INVALID_OPERAND,
725                                 'OPERAND',
726                                 p_mrbv_tbl(i).operand,
727                                 'CRIT_CODE',
728                                 p_mrbv_tbl(i).criteria_code
729                                );
730             x_return_status := OKL_API.G_RET_STS_ERROR;
731          END IF;
732 
733          IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
734             okl_api.set_message(
735                                 G_APP_NAME,
736                                 G_INVALID_SET_VALUE,
737                                 'CRIT_CODE',
738                                 p_mrbv_tbl(i).criteria_code
739                                );
740             x_return_status := OKL_API.G_RET_STS_ERROR;
741          END IF;
742       ELSIF (p_mrbv_tbl(i).criteria_code = 'DEPRN_METHOD_CODE') THEN
743          IF (p_mrbv_tbl(i).operand IS NOT NULL
744              AND
745              p_mrbv_tbl(i).operand <> '=') THEN
746             okl_api.set_message(
747                                 G_APP_NAME,
748                                 G_INVALID_OPERAND,
749                                 'OPERAND',
750                                 p_mrbv_tbl(i).operand,
751                                 'CRIT_CODE',
752                                 p_mrbv_tbl(i).criteria_code
753                                );
754             x_return_status := OKL_API.G_RET_STS_ERROR;
755          END IF;
756 
757          IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
758             l_set_value_present := 'Y';
759          END IF;
760 
761       ELSIF (p_mrbv_tbl(i).criteria_code = 'DATE_PLACED_IN_SERVICE') THEN
762          IF (p_mrbv_tbl(i).operand IS NOT NULL
763              AND
764              p_mrbv_tbl(i).operand NOT IN('BETWEEN', '<=', '>=')) THEN
765             okl_api.set_message(
766                                 G_APP_NAME,
767                                 G_INVALID_OPERAND,
768                                 'OPERAND',
769                                 p_mrbv_tbl(i).operand,
770                                 'CRIT_CODE',
771                                 p_mrbv_tbl(i).criteria_code
772                                );
773             x_return_status := OKL_API.G_RET_STS_ERROR;
774          END IF;
775          --Check for Date Integrity
776          IF((p_mrbv_tbl(i).operand = 'BETWEEN') AND
777             ((FND_DATE.string_to_date(p_mrbv_tbl(i).CRITERIA_VALUE1,l_nls_date_format)) > (FND_DATE.string_to_date(p_mrbv_tbl(i).CRITERIA_VALUE2,l_nls_date_format)))) THEN
778            -- NAMED INVALID DATE RANGE
779              okl_api.set_message(
780                                 'FND',
781                                 'NAMED INVALID DATE RANGE',
782                                 'RANGE',
783                                 'INSERVICE_DATE');
784            x_return_status := OKL_API.G_RET_STS_ERROR;
785          END IF;
786          IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
787             l_set_value_present := 'Y';
788          END IF;
789 
790       ELSIF (p_mrbv_tbl(i).criteria_code = 'ASSET_CATEGORY_ID') THEN
791          IF (p_mrbv_tbl(i).operand <> '=') THEN
792             okl_api.set_message(
793                                 G_APP_NAME,
794                                 G_INVALID_OPERAND,
795                                 'OPERAND',
796                                 p_mrbv_tbl(i).operand,
797                                 'CRIT_CODE',
798                                 p_mrbv_tbl(i).criteria_code
799                                );
800             x_return_status := OKL_API.G_RET_STS_ERROR;
801          END IF;
802 
803          IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
804             okl_api.set_message(
805                                 G_APP_NAME,
806                                 G_INVALID_SET_VALUE,
807                                 'CRIT_CODE',
808                                 p_mrbv_tbl(i).criteria_code
809                                );
810             x_return_status := OKL_API.G_RET_STS_ERROR;
811          END IF;
812      /* ELSIF (p_mrbv_tbl(i).criteria_code = 'LIFE_IN_MONTHS'
813              OR
814              p_mrbv_tbl(i).criteria_code = 'BASIC_RATE'
815              OR
816              p_mrbv_tbl(i).criteria_code = 'ADJUSTED_RATE') THEN
817 
818          IF (p_mrbv_tbl(i).operand IS NOT NULL
819              OR
820              p_mrbv_tbl(i).criteria_value1 IS NOT NULL
821              OR
822              p_mrbv_tbl(i).criteria_value2 IS NOT NULL) THEN
823             okl_api.set_message(
824                                 G_APP_NAME,
825                                 G_INVALID_MATCH_OPTION,
826                                 'CRIT_CODE',
827                                 p_mrbv_tbl(i).criteria_code
828                                );
829             x_return_status := OKL_API.G_RET_STS_ERROR;
830          END IF;
831 
832          IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
833             l_set_value_present := 'Y';
834          END IF; */
835 
836       END IF;
837 
838     END LOOP;
839 
840    /* IF (l_set_value_present = 'N') THEN
841        okl_api.set_message(
842                            G_APP_NAME,
843                            G_NO_SET_VALUE,
844                            'REQ_NAME',
845                            p_request_name
846                           );
847        x_return_status := OKL_API.G_RET_STS_ERROR;
848     END IF; */
849 
850   EXCEPTION
851     WHEN request_failed THEN
852        x_return_status := OKL_API.G_RET_STS_ERROR;
853   END validate_request;
854 
855 ------------------------------------------------------------------------------
856 -- PROCEDURE build_and_get_contracts
857 --   Overloaded process to accept transaction date from page
858 --   This proecdure inserts selection criteria to OKL_MASS_RBK_CRITERIA table
859 --   and populates OKL_RBK_SELECTED_CONTRACT table with selected contracts.
860 -- Calls:
861 -- Called by:
862 ------------------------------------------------------------------------------
863 
864   PROCEDURE build_and_get_contracts(
865                                     p_api_version        IN  NUMBER,
866                                     p_init_msg_list      IN  VARCHAR2,
867                                     x_return_status      OUT NOCOPY VARCHAR2,
868                                     x_msg_count          OUT NOCOPY NUMBER,
869                                     x_msg_data           OUT NOCOPY VARCHAR2,
870                                     p_request_name       IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE,
871                                     p_transaction_date   IN  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE,
872                                     p_mrbv_tbl           IN  mrbv_tbl_type,
873                                     x_mstv_tbl           OUT NOCOPY mstv_tbl_type,
874                                     x_rbk_count          OUT NOCOPY NUMBER
875                                    ) IS
876 
877   l_api_name    VARCHAR2(35)    := 'build_and_get_contracts';
878   l_proc_name   VARCHAR2(35)    := 'BUILD_AND_GET_CONTRACTS';
879   l_api_version NUMBER          := 1.0;
880 
881   x_mrbv_tbl    mrbv_tbl_type;
882 
883   BEGIN
884     IF (G_DEBUG_ENABLED = 'Y') THEN
885       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
886     END IF;
887      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
888             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
889      END IF;
890      -- call START_ACTIVITY to create savepoint, check compatibility
891      -- and initialize message list
892      x_return_status := OKL_API.START_ACTIVITY(
893                                                p_api_name      => l_api_name,
894                                                p_pkg_name      => G_PKG_NAME,
895                                                p_init_msg_list => p_init_msg_list,
896                                                l_api_version   => l_api_version,
897                                                p_api_version   => p_api_version,
898                                                p_api_type      => G_API_TYPE,
899                                                x_return_status => x_return_status);
900 
901      -- check if activity started successfully
902      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
903        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
904      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
905        raise OKL_API.G_EXCEPTION_ERROR;
906      END IF;
907 
908      --
909      -- Validate incoming data
910      --
911      validate_request(
912                       x_return_status  => x_return_status,
913                       x_msg_count      => x_msg_count,
914                       x_msg_data       => x_msg_data,
915                       p_request_name   => p_request_name,
916                       p_mrbv_tbl       => p_mrbv_tbl
917                      );
918 
919      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
920         raise OKL_API.G_EXCEPTION_ERROR;
921      END IF;
922 
923      --
924      -- Insert Selection criteria
925      --
926      okl_mrb_pvt.insert_row(
927                             p_api_version   => l_api_version,
928                             p_init_msg_list => p_init_msg_list,
929                             x_return_status => x_return_status,
930                             x_msg_count     => x_msg_count,
931                             x_msg_data      => x_msg_data,
932                             p_mrbv_tbl      => p_mrbv_tbl,
933                             x_mrbv_tbl      => x_mrbv_tbl
934                            );
935 
936      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
937        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
938      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
939        raise OKL_API.G_EXCEPTION_ERROR;
940      END IF;
941 
942      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
943             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Insert');
944      END IF;
945      --
946      -- Get Selected Contracts
947      --
948      get_contract(
949                   p_api_version      => l_api_version,
950                   p_init_msg_list    => p_init_msg_list,
951                   x_return_status    => x_return_status,
952                   x_msg_count        => x_msg_count,
953                   x_msg_data         => x_msg_data,
954                   p_request_name     => p_request_name,
955                   p_transaction_date => p_transaction_date,
956                   x_mstv_tbl         => x_mstv_tbl,
957                   x_rbk_count        => x_rbk_count
958                  );
959 
960      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
961        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
962      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
963        raise OKL_API.G_EXCEPTION_ERROR;
964      END IF;
965 
966      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
967             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Get Contract');
968      END IF;
969 
970      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
971                           x_msg_data    => x_msg_data);
972 
973 
974      RETURN;
975 
976   EXCEPTION
977       when OKL_API.G_EXCEPTION_ERROR then
978          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
979                         p_api_name  => l_api_name,
980                         p_pkg_name  => G_PKG_NAME,
981                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
982                         x_msg_count => x_msg_count,
983                         x_msg_data  => x_msg_data,
984                         p_api_type  => G_API_TYPE);
985 
986       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
987          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
988                         p_api_name  => l_api_name,
989                         p_pkg_name  => G_PKG_NAME,
990                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
991                         x_msg_count => x_msg_count,
992                         x_msg_data  => x_msg_data,
993                         p_api_type  => G_API_TYPE);
994 
995       when OTHERS then
996          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
997                         p_api_name  => l_api_name,
998                         p_pkg_name  => G_PKG_NAME,
999                         p_exc_name  => 'OTHERS',
1000                         x_msg_count => x_msg_count,
1001                         x_msg_data  => x_msg_data,
1002                         p_api_type  => G_API_TYPE);
1003 
1004   END build_and_get_contracts;
1005 
1006 ------------------------------------------------------------------------------
1007 -- PROCEDURE build_and_get_contracts
1008 --   This proecdure inserts selection criteria to OKL_MASS_RBK_CRITERIA table
1009 --   and populates OKL_RBK_SELECTED_CONTRACT table with selected contracts.
1010 -- Calls:
1011 -- Called by:
1012 ------------------------------------------------------------------------------
1013 
1014   PROCEDURE build_and_get_contracts(
1015                                     p_api_version        IN  NUMBER,
1016                                     p_init_msg_list      IN  VARCHAR2,
1017                                     x_return_status      OUT NOCOPY VARCHAR2,
1018                                     x_msg_count          OUT NOCOPY NUMBER,
1019                                     x_msg_data           OUT NOCOPY VARCHAR2,
1020                                     p_request_name       IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE,
1021                                     p_mrbv_tbl           IN  mrbv_tbl_type,
1022                                     x_mstv_tbl           OUT NOCOPY mstv_tbl_type,
1023                                     x_rbk_count          OUT NOCOPY NUMBER
1024                                    ) IS
1025 
1026   l_api_name    VARCHAR2(35)    := 'build_and_get_contracts';
1027   l_proc_name   VARCHAR2(35)    := 'BUILD_AND_GET_CONTRACTS';
1028   l_api_version NUMBER          := 1.0;
1029 
1030   x_mrbv_tbl    mrbv_tbl_type;
1031 
1032   BEGIN
1033     IF (G_DEBUG_ENABLED = 'Y') THEN
1034       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1035     END IF;
1036      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1037             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1038      END IF;
1039      -- call START_ACTIVITY to create savepoint, check compatibility
1040      -- and initialize message list
1041      x_return_status := OKL_API.START_ACTIVITY(
1042                                                p_api_name      => l_api_name,
1043                                                p_pkg_name      => G_PKG_NAME,
1044                                                p_init_msg_list => p_init_msg_list,
1045                                                l_api_version   => l_api_version,
1046                                                p_api_version   => p_api_version,
1047                                                p_api_type      => G_API_TYPE,
1048                                                x_return_status => x_return_status);
1049 
1050      -- check if activity started successfully
1051      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1052        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1053      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
1054        raise OKL_API.G_EXCEPTION_ERROR;
1055      END IF;
1056 
1057      --
1058      -- Validate incoming data
1059      --
1060      validate_request(
1061                       x_return_status  => x_return_status,
1062                       x_msg_count      => x_msg_count,
1063                       x_msg_data       => x_msg_data,
1064                       p_request_name   => p_request_name,
1065                       p_mrbv_tbl       => p_mrbv_tbl
1066                      );
1067 
1068      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
1069         raise OKL_API.G_EXCEPTION_ERROR;
1070      END IF;
1071 
1072      --
1073      -- Insert Selection criteria
1074      --
1075      okl_mrb_pvt.insert_row(
1076                             p_api_version   => l_api_version,
1077                             p_init_msg_list => p_init_msg_list,
1078                             x_return_status => x_return_status,
1079                             x_msg_count     => x_msg_count,
1080                             x_msg_data      => x_msg_data,
1081                             p_mrbv_tbl      => p_mrbv_tbl,
1082                             x_mrbv_tbl      => x_mrbv_tbl
1083                            );
1084 
1085      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1086        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1087      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
1088        raise OKL_API.G_EXCEPTION_ERROR;
1089      END IF;
1090 
1091      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1092             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Insert');
1093      END IF;
1094      --
1095      -- Get Selected Contracts
1096      --
1097      get_contract(
1098                   p_api_version   => l_api_version,
1099                   p_init_msg_list => p_init_msg_list,
1100                   x_return_status => x_return_status,
1101                   x_msg_count     => x_msg_count,
1102                   x_msg_data      => x_msg_data,
1103                   p_request_name  => p_request_name,
1104                   x_mstv_tbl      => x_mstv_tbl,
1105                   x_rbk_count     => x_rbk_count
1106                  );
1107 
1108      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1109        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1110      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
1111        raise OKL_API.G_EXCEPTION_ERROR;
1112      END IF;
1113 
1114      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1115             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Get Contract');
1116      END IF;
1117 
1118      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
1119                           x_msg_data    => x_msg_data);
1120 
1121 
1122      RETURN;
1123 
1124   EXCEPTION
1125       when OKL_API.G_EXCEPTION_ERROR then
1126          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1127                         p_api_name  => l_api_name,
1128                         p_pkg_name  => G_PKG_NAME,
1129                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
1130                         x_msg_count => x_msg_count,
1131                         x_msg_data  => x_msg_data,
1132                         p_api_type  => G_API_TYPE);
1133 
1134       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
1135          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1136                         p_api_name  => l_api_name,
1137                         p_pkg_name  => G_PKG_NAME,
1138                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1139                         x_msg_count => x_msg_count,
1140                         x_msg_data  => x_msg_data,
1141                         p_api_type  => G_API_TYPE);
1142 
1143       when OTHERS then
1144          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1145                         p_api_name  => l_api_name,
1146                         p_pkg_name  => G_PKG_NAME,
1147                         p_exc_name  => 'OTHERS',
1148                         x_msg_count => x_msg_count,
1149                         x_msg_data  => x_msg_data,
1150                         p_api_type  => G_API_TYPE);
1151 
1152   END build_and_get_contracts;
1153 
1154  ---------------------------------------------------------------------------
1155  -- FUNCTION get_rec from OKL_RBK_SELECTED_CONTRACT
1156  ---------------------------------------------------------------------------
1157   FUNCTION get_rec (
1158                     p_request_name IN   VARCHAR2,
1159                     p_chr_id       IN   NUMBER,
1160                     x_return_status OUT NOCOPY VARCHAR2
1161                    )
1162   RETURN mstv_tbl_type IS
1163 
1164   CURSOR mstv_csr (p_request_name VARCHAR2,
1165                    p_chr_id       NUMBER) IS
1166   SELECT
1167      id
1168     ,request_name
1169     ,khr_id
1170     ,contract_number
1171     ,contract_description
1172     ,transaction_id
1173     ,selected_flag
1174     ,attribute_category
1175     ,attribute1
1176     ,attribute2
1177     ,attribute3
1178     ,attribute4
1179     ,attribute5
1180     ,attribute6
1181     ,attribute7
1182     ,attribute8
1183     ,attribute9
1184     ,attribute10
1185     ,attribute11
1186     ,attribute12
1187     ,attribute13
1188     ,attribute14
1189     ,attribute15
1190   FROM okl_rbk_selected_contract
1191   WHERE request_name = p_request_name
1192   AND   khr_id       = p_chr_id
1193   AND   NVL(status, 'NEW') IN ('NEW', 'ERROR');
1194 
1195   x_mstv_tbl mstv_tbl_type;
1196   i          NUMBER := 0;
1197   BEGIN
1198     IF (G_DEBUG_ENABLED = 'Y') THEN
1199       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1200     END IF;
1201 
1202     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1203 
1204     i := 1;
1205     FOR mstv_rec IN mstv_csr(p_request_name,
1206                               p_chr_id)
1207     LOOP
1208        x_mstv_tbl(i).id                   := mstv_rec.id;
1209        x_mstv_tbl(i).request_name         := mstv_rec.request_name;
1210        x_mstv_tbl(i).khr_id               := mstv_rec.khr_id;
1211        x_mstv_tbl(i).contract_number      := mstv_rec.contract_number;
1212        x_mstv_tbl(i).contract_description := mstv_rec.contract_description;
1213        x_mstv_tbl(i).transaction_id       := mstv_rec.transaction_id;
1214        x_mstv_tbl(i).selected_flag        := mstv_rec.selected_flag;
1215        x_mstv_tbl(i).attribute_category   := mstv_rec.attribute_category;
1216        x_mstv_tbl(i).attribute1           := mstv_rec.attribute1;
1217        x_mstv_tbl(i).attribute2           := mstv_rec.attribute2;
1218        x_mstv_tbl(i).attribute3           := mstv_rec.attribute3;
1219        x_mstv_tbl(i).attribute4           := mstv_rec.attribute4;
1220        x_mstv_tbl(i).attribute5           := mstv_rec.attribute5;
1221        x_mstv_tbl(i).attribute6           := mstv_rec.attribute6;
1222        x_mstv_tbl(i).attribute7           := mstv_rec.attribute7;
1223        x_mstv_tbl(i).attribute8           := mstv_rec.attribute8;
1224        x_mstv_tbl(i).attribute9           := mstv_rec.attribute9;
1225        x_mstv_tbl(i).attribute10          := mstv_rec.attribute10;
1226        x_mstv_tbl(i).attribute11          := mstv_rec.attribute11;
1227        x_mstv_tbl(i).attribute12          := mstv_rec.attribute12;
1228        x_mstv_tbl(i).attribute13          := mstv_rec.attribute13;
1229        x_mstv_tbl(i).attribute14          := mstv_rec.attribute14;
1230        x_mstv_tbl(i).attribute15          := mstv_rec.attribute15;
1231        i := i + 1;
1232 
1233        --debug_message('Indise ID'||i||' : '||mstv_rec.id);
1234        --debug_message('Indise ID'||i||' : '||x_mstv_tbl(i).id);
1235     END LOOP;
1236     IF (i = 0) THEN
1237        x_return_status := OKL_API.G_RET_STS_ERROR;
1238        okl_api.set_message(
1239                            G_APP_NAME,
1240                            G_NO_SEL_CONTRACT,
1241                            'REQ_NAME',
1242                            p_request_name
1243                           );
1244     END IF;
1245 
1246     RETURN x_mstv_tbl;
1247 
1248   EXCEPTION
1249     WHEN OTHERS THEN
1250       -- store SQL error message on message stack for caller
1251       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1252               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'WHEN OTHERS occurred');
1253       END IF;
1254       OKL_API.set_message(
1255               G_APP_NAME,
1256               G_UNEXPECTED_ERROR,
1257               'SQLcode',
1258               SQLCODE,
1259               'SQLerrm',
1260               SQLERRM);
1261       -- notify caller of an UNEXPECTED error
1262       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1263   END get_rec;
1264 
1265 ------------------------------------------------------------------------------
1266 -- PROCEDURE update_residual_value
1267 --   This proecdure updates Residual Value at Contract Financial Asset Line
1268 -- Calls:
1269 -- Called by:
1270 ------------------------------------------------------------------------------
1271   PROCEDURE update_residual_value(
1272                                   x_return_status      OUT NOCOPY VARCHAR2,
1273                                   x_msg_count          OUT NOCOPY NUMBER,
1274                                   x_msg_data           OUT NOCOPY VARCHAR2,
1275                                   p_kle_tbl            IN  kle_tbl_type,
1276                                   p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE
1277                                  ) IS
1278   l_api_name    VARCHAR2(35)    := 'update_residual_value';
1279   l_proc_name   VARCHAR2(35)    := 'UPDATE_RESIDUAL_VALUE';
1280   l_api_version NUMBER          := 1.0;
1281 
1282   CURSOR oec_csr (p_top_line_id OKC_K_LINES_V.ID%TYPE) IS
1283   SELECT oec
1284   FROM   okl_k_lines_full_v
1285   WHERE  id = p_top_line_id;
1286 
1287   l_oec          NUMBER;
1288   l_residual_ptg NUMBER;
1289   l_klev_tbl     klev_tbl_type;
1290   l_clev_tbl     clev_tbl_type;
1291 
1292   x_klev_tbl     klev_tbl_type;
1293   x_clev_tbl     clev_tbl_type;
1294 
1295   BEGIN
1296     IF (G_DEBUG_ENABLED = 'Y') THEN
1297       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1298     END IF;
1299 
1300     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1301 
1302     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1303           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1304     END IF;
1305 
1306     FOR i IN 1..p_kle_tbl.COUNT
1307     LOOP
1308        l_klev_tbl(i).id := p_kle_tbl(i).id;
1309        l_clev_tbl(i).id := p_kle_tbl(i).id;
1310 
1311        l_oec := 0;
1312        l_residual_ptg := NULL;
1313 
1314        OPEN oec_csr (p_kle_tbl(i).id);
1315        FETCH oec_csr INTO l_oec;
1316        CLOSE oec_csr;
1317 
1318        IF (l_oec <> 0) THEN
1319           l_residual_ptg := p_residual_value * 100 / l_oec;
1320        END IF;
1321 
1322        l_klev_tbl(i).residual_value      := p_residual_value;
1323        l_klev_tbl(i).residual_percentage := l_residual_ptg;
1324 
1325     END LOOP;
1326 
1327     okl_contract_pub.update_contract_line(
1328                                           p_api_version     => 1.0,
1329                                           p_init_msg_list   => OKC_API.G_FALSE,
1330                                           x_return_status   => x_return_status,
1331                                           x_msg_count       => x_msg_count,
1332                                           x_msg_data        => x_msg_data,
1333                                           p_clev_tbl        => l_clev_tbl,
1334                                           p_klev_tbl        => l_klev_tbl,
1335                                           x_clev_tbl        => x_clev_tbl,
1336                                           x_klev_tbl        => x_klev_tbl
1337                                          );
1338 
1339     RETURN; -- handle error, if any, at calling block
1340 
1341   END update_residual_value;
1342 
1343 ------------------------------------------------------------------------------
1344 -- PROCEDURE populate_asset_change
1345 --   This proecdure populates asset related changes to appropriate records
1346 --   and creates Transactions for those.
1347 -- Calls:
1348 -- Called by:
1349 ------------------------------------------------------------------------------
1350   PROCEDURE populate_asset_change(
1351                                   x_return_status      OUT NOCOPY VARCHAR2,
1352                                   x_msg_count          OUT NOCOPY NUMBER,
1353                                   x_msg_data           OUT NOCOPY VARCHAR2,
1354                                   p_request_name       IN  VARCHAR2,
1355                                   p_online_yn          IN  VARCHAR2,
1356                                   p_khr_id             IN  OKC_K_HEADERS_V.ID%TYPE,
1357                                   p_kle_tbl            IN  kle_tbl_type,
1358                                   p_line_count         IN  NUMBER,
1359                                   p_book_type_code     IN  FA_BOOKS.BOOK_TYPE_CODE%TYPE,
1360                                   p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
1361                                   p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
1362                                   p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
1363                                   p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
1364                                   p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE ,
1365                                   p_transaction_date   IN  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE DEFAULT SYSDATE
1366                                  ) IS
1367   l_api_name    VARCHAR2(35)    := 'populate_asset_change';
1368   l_proc_name   VARCHAR2(35)    := 'POPULATE_ASSET_CHANGE';
1369   l_api_version NUMBER          := 1.0;
1370 
1371   CURSOR try_csr(p_trx_type VARCHAR2) IS
1372   SELECT id
1373   FROM   okl_trx_types_tl
1374   WHERE  language = 'US'
1375   AND    name     = p_trx_type;
1376 
1377   CURSOR book_csr (p_asset_number   okx_ast_bks_v.asset_number%TYPE,
1378                    p_book_type_code okx_ast_bks_v.book_type_code%TYPE,
1379                    p_book_class     okx_ast_bks_v.book_class%TYPE) IS
1380   SELECT id2,
1381          deprn_method_code,
1382          life_in_months,
1383          acquisition_date,
1384          cost
1385   FROM   okx_ast_bks_v
1386   WHERE  book_class     = p_book_class
1387   AND    asset_number   = p_asset_number
1388   AND    book_type_code = NVL(p_book_type_code, book_type_code);
1389 
1390   CURSOR addl_line_csr (p_fa_line_id NUMBER) IS
1391   SELECT oec,
1392          name
1393   FROM   OKL_K_LINES_FULL_V
1394   WHERE  id = (SELECT cle_id
1395                FROM   okl_k_lines_full_v
1396                WHERE  id = p_fa_line_id);
1397 
1398   CURSOR unit_csr (p_fa_line_id NUMBER) IS
1399   SELECT number_of_items
1400   FROM   okc_k_items_v
1401   WHERE  cle_id = p_fa_line_id;
1402 
1403   CURSOR fa_line_csr (p_chr_id OKL_K_HEADERS_V.ID%TYPE,
1404                       p_kle_id OKC_K_LINES_V.ID%TYPE) IS
1405   SELECT line.id
1406   FROM   okc_k_lines_v line,
1407          okc_line_styles_v style
1408   WHERE  line.lse_id    = style.id
1409   AND    style.lty_code = 'FIXED_ASSET'
1410   AND    dnz_chr_id     = p_chr_id
1411   AND    cle_id         = p_kle_id;
1412 
1413   l_thpv_rec   thpv_rec_type;
1414   x_thpv_rec   thpv_rec_type;
1415 
1416   l_tlpv_rec   tlpv_rec_type;
1417   x_tlpv_rec   tlpv_rec_type;
1418 
1419   l_adpv_tbl   adpv_tbl_type;
1420   x_adpv_tbl   adpv_tbl_type;
1421 
1422   l_try_id     NUMBER;
1423   l_fa_line_id NUMBER;
1424 
1425   l_name        OKL_K_LINES_FULL_V.NAME%TYPE;
1426   l_oec         OKL_K_LINES_FULL_V.OEC%TYPE;
1427   l_no_of_items OKC_K_ITEMS.NUMBER_OF_ITEMS%TYPE;
1428   l_corp_book   OKX_AST_BKS_V.ID2%TYPE;
1429 
1430   l_tax_count   NUMBER;
1431   l_deprn_method_code OKX_AST_BKS_V.DEPRN_METHOD_CODE%TYPE;
1432   l_life_in_months    OKX_AST_BKS_V.LIFE_IN_MONTHS%TYPE;
1433   l_cost              OKX_AST_BKS_V.COST%TYPE;
1434   l_acquisition_date  DATE;
1435 
1436   asset_change_failed EXCEPTION;
1437   --Added by dpsingh for LE uptake
1438   CURSOR contract_num_csr (p_ctr_id1 NUMBER) IS
1439   SELECT  contract_number
1440   FROM OKC_K_HEADERS_B
1441   WHERE id = p_ctr_id1;
1442 
1443   l_cntrct_number          OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
1444   l_legal_entity_id          NUMBER;
1445 
1446   BEGIN
1447     IF (G_DEBUG_ENABLED = 'Y') THEN
1448       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1449     END IF;
1450 
1451     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1452     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1453           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1454     END IF;
1455 
1456     OPEN try_csr ('Rebook');
1457     FETCH try_csr INTO l_try_id;
1458     CLOSE try_csr;
1459 
1460     FOR i IN 1..p_line_count  -- For Each FIXED_ASSET Line
1461     LOOP
1462 
1463        -- Populate TRX
1464        l_thpv_rec.tas_type            := 'CRB';
1465        l_thpv_rec.tsu_code            := 'ENTERED';
1466        l_thpv_rec.date_trans_occurred := p_transaction_date; --SYSDATE;
1467        l_thpv_rec.try_id              := l_try_id;
1468 
1469 	--Added by dpsingh for LE Uptake
1470     l_legal_entity_id  := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_khr_id) ;
1471     IF  l_legal_entity_id IS NOT NULL THEN
1472        l_thpv_rec.legal_entity_id :=  l_legal_entity_id;
1473     ELSE
1474         -- get the contract number
1475        OPEN contract_num_csr(p_khr_id);
1476        FETCH contract_num_csr INTO l_cntrct_number;
1477        CLOSE contract_num_csr;
1478 	Okl_Api.set_message(p_app_name     => g_app_name,
1479                              p_msg_name     => 'OKL_LE_NOT_EXIST_CNTRCT',
1480 			     p_token1           =>  'CONTRACT_NUMBER',
1481 			     p_token1_value  =>  l_cntrct_number);
1482          RAISE OKL_API.G_EXCEPTION_ERROR;
1483     END IF;
1484 
1485        okl_trx_assets_pub.create_trx_ass_h_def(
1486                                                p_api_version   => 1.0,
1487                                                p_init_msg_list => OKL_API.G_FALSE,
1488                                                x_return_status => x_return_status,
1489                                                x_msg_count     => x_msg_count,
1490                                                x_msg_data      => x_msg_data,
1491                                                p_thpv_rec      => l_thpv_rec,
1492                                                x_thpv_rec      => x_thpv_rec
1493                                               );
1494 
1495        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1496            RAISE asset_change_failed;
1497        END IF;
1498 
1499        -- Populate TXLs
1500        IF (p_deprn_method_code IS NOT NULL
1501            OR
1502            p_life_in_months IS NOT NULL
1503            OR
1504            p_in_service_date IS NOT NULL
1505            OR
1506            p_basic_rate IS NOT NULL
1507            OR
1508            p_adjusted_rate IS NOT NULL) THEN
1509 
1510           l_tlpv_rec.tas_id             := x_thpv_rec.id;
1511           l_tlpv_rec.tal_type           := 'CRB';
1512           l_tlpv_rec.dnz_khr_id         := p_khr_id;
1513           --l_tlpv_rec.in_service_date    := p_in_service_date;
1514           l_tlpv_rec.line_number        := 1;
1515 
1516           IF (p_in_service_date IS NOT NULL) THEN
1517              l_tlpv_rec.in_service_date := p_in_service_date;
1518           END IF;
1519 
1520           IF (p_basic_rate IS NOT NULL) THEN
1521              l_tlpv_rec.deprn_rate      := p_basic_rate;
1522           END IF;
1523 
1524           IF (p_adjusted_rate IS NOT NULL) THEN
1525              l_tlpv_rec.deprn_rate      := p_adjusted_rate;
1526           END IF;
1527 
1528           IF (p_online_yn = 'Y') THEN
1529              l_fa_line_id      := p_kle_tbl(i).id;
1530              l_tlpv_rec.kle_id := l_fa_line_id;
1531           ELSE
1532 
1533              --
1534              -- Get FIXED_ASSET Line ID from Top Line ID
1535              --
1536              OPEN fa_line_csr(p_khr_id,
1537                               p_kle_tbl(i).id);
1538              FETCH fa_line_csr INTO l_fa_line_id;
1539              CLOSE fa_line_csr;
1540 
1541              l_tlpv_rec.kle_id := l_fa_line_id;
1542           END IF;
1543 
1544           OPEN addl_line_csr (l_fa_line_id);
1545           FETCH addl_line_csr INTO l_oec,
1546                                    l_name;
1547           CLOSE addl_line_csr;
1548 
1549           l_tlpv_rec.asset_number       := l_name;
1550           l_tlpv_rec.original_cost      := l_oec;
1551 
1552           OPEN unit_csr (l_fa_line_id);
1553           FETCH unit_csr INTO l_no_of_items;
1554           CLOSE unit_csr;
1555 
1556           l_tlpv_rec.current_units      := l_no_of_items;
1557 
1558           --
1559           -- Get CORPORATE BOOK
1560           --
1561 
1562           OPEN book_csr(l_name,
1563                         NULL,
1564                         'CORPORATE');
1565           FETCH book_csr INTO l_corp_book,
1566                               l_deprn_method_code,
1567                               l_life_in_months,
1568                               l_acquisition_date,
1569                               l_cost;
1570           CLOSE book_csr;
1571 
1572           l_tlpv_rec.corporate_book := l_corp_book;
1573           l_tlpv_rec.deprn_method   := l_deprn_method_code;
1574           l_tlpv_rec.life_in_months := l_life_in_months;
1575           l_tlpv_rec.depreciation_cost := l_cost;
1576           IF (p_in_service_date IS NULL) THEN
1577              l_tlpv_rec.in_service_date := l_acquisition_date;
1578           END IF;
1579 
1580           okl_txl_assets_pub.create_txl_asset_def(
1581                                                    p_api_version   => 1.0,
1582                                                    p_init_msg_list => OKL_API.G_FALSE,
1583                                                    x_return_status => x_return_status,
1584                                                    x_msg_count     => x_msg_count,
1585                                                    x_msg_data      => x_msg_data,
1586                                                    p_tlpv_rec      => l_tlpv_rec,
1587                                                    x_tlpv_rec      => x_tlpv_rec
1588                                                   );
1589 
1590           IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1591               RAISE asset_change_failed;
1592           END IF;
1593 
1594        END IF;
1595 
1596        IF (p_deprn_method_code IS NOT NULL
1597            OR
1598            p_life_in_months IS NOT NULL
1599            OR
1600            p_adjusted_rate IS NOT NULL) THEN
1601 
1602           IF (p_book_type_code IS NULL
1603               OR
1604               p_deprn_method_code IS NULL) THEN  -- Get all TAX Book for this asset
1605              l_tax_count := 0;
1606              FOR book_rec IN book_csr(l_name,
1607                                       p_book_type_code,
1608                                       'TAX')
1609              LOOP
1610                 l_tax_count := l_tax_count + 1;
1611                 l_adpv_tbl(l_tax_count).tal_id             := x_tlpv_rec.id;
1612                 l_adpv_tbl(l_tax_count).life_in_months_tax := p_life_in_months;
1613                 l_adpv_tbl(l_tax_count).asset_number       := l_name;
1614                 l_adpv_tbl(l_tax_count).cost               := book_rec.cost;
1615 
1616                 IF (p_book_type_code IS NULL) THEN
1617                    l_adpv_tbl(l_tax_count).tax_book        := book_rec.id2;
1618                 ELSE
1619                    l_adpv_tbl(l_tax_count).tax_book        := p_book_type_code;
1620                 END IF;
1621 
1622                 IF (p_deprn_method_code IS NULL) THEN
1623                    l_adpv_tbl(l_tax_count).deprn_method_tax := book_rec.deprn_method_code;
1624                 ELSE
1625                    l_adpv_tbl(l_tax_count).deprn_method_tax := p_deprn_method_code;
1626                 END IF;
1627 
1628                 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1629                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Life in months: '||l_adpv_tbl(l_tax_count).life_in_months_tax);
1630                 END IF;
1631 
1632                  IF (p_adjusted_rate IS NOT NULL) THEN
1633                     l_adpv_tbl(l_tax_count).deprn_rate_tax := p_adjusted_rate;
1634                  END IF;
1635              END LOOP;
1636           ELSE
1637              l_adpv_tbl(1).tal_id             := x_tlpv_rec.id;
1638              l_adpv_tbl(1).deprn_method_tax   := p_deprn_method_code;
1639              l_adpv_tbl(1).life_in_months_tax := p_life_in_months;
1640              l_adpv_tbl(1).asset_number       := l_name;
1641              l_adpv_tbl(1).tax_book           := p_book_type_code;
1642              l_adpv_tbl(1).deprn_rate_tax     := p_adjusted_rate;
1643           END IF;
1644 
1645           okl_txd_assets_pub.create_txd_asset_def(
1646                                                   p_api_version   => 1.0,
1647                                                   p_init_msg_list => OKL_API.G_FALSE,
1648                                                   x_return_status => x_return_status,
1649                                                   x_msg_count     => x_msg_count,
1650                                                   x_msg_data      => x_msg_data,
1651                                                   p_adpv_tbl      => l_adpv_tbl,
1652                                                   x_adpv_tbl      => x_adpv_tbl
1653                                                  );
1654 
1655           IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1656               RAISE asset_change_failed;
1657           END IF;
1658        END IF;
1659 
1660     END LOOP;
1661 
1662     RETURN;
1663 
1664   EXCEPTION
1665     WHEN asset_change_failed THEN
1666       NULL; --propagate error to caller
1667   END populate_asset_change;
1668 
1669 ------------------------------------------------------------------------------
1670 -- PROCEDURE update_slh_sll
1671 --   This proecdure updates any changes requested for Payments (SLH, SLL)
1672 -- Calls:
1673 -- Called by:
1674 ------------------------------------------------------------------------------
1675   PROCEDURE update_slh_sll(
1676                            x_return_status     OUT NOCOPY VARCHAR2,
1677                            x_msg_count         OUT NOCOPY NUMBER,
1678                            x_msg_data          OUT NOCOPY VARCHAR2,
1679                            p_khr_id            IN  OKC_K_HEADERS_V.ID%TYPE,
1680                            p_kle_tbl           IN  kle_tbl_type,
1681                            p_strm_lalevl_tbl   IN  strm_lalevl_tbl_type
1682                          ) IS
1683 
1684   l_api_name    VARCHAR2(35)    := 'update_slh_sll';
1685   l_proc_name   VARCHAR2(35)    := 'UPDATE_SLH_SLL';
1686   l_api_version NUMBER          := 1.0;
1687 
1688   CURSOR rgp_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE,
1689                   p_cle_id OKC_K_LINES_V.ID%TYPE) IS
1690   SELECT ID
1691   FROM   okc_rule_groups_v
1692   WHERE  dnz_chr_id = p_chr_id
1693   AND    cle_id     = p_cle_id
1694   AND    rgd_code   = 'LALEVL';
1695 
1696   CURSOR slh_csr (p_stream_id OKC_RULES_V.OBJECT1_ID1%TYPE,
1697                   p_rgp_id    OKC_RULES_V.RGP_ID%TYPE) IS
1698   SELECT id
1699   FROM   okc_rules_v
1700   WHERE  object1_id1 = p_stream_id
1701   AND    rgp_id      = p_rgp_id
1702   AND    rule_information_category = 'LASLH';
1703 
1704   CURSOR sll_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE,
1705                   p_slh_id OKC_RULES_V.ID%TYPE,
1706                   p_rgp_id OKC_RULE_GROUPS_V.ID%TYPE) IS
1707   SELECT id
1708   FROM   okc_rules_v
1709   WHERE  dnz_chr_id                = p_chr_id
1710   AND    rgp_id                    = p_rgp_id
1711   AND    object2_id1               = p_slh_id
1712   AND    rule_information_category = 'LASLL';
1713 
1714   l_match_found VARCHAR2(1);
1715   l_slh_id      NUMBER;
1716   l_rgpv_rec    rgpv_rec_type;
1717   x_rgpv_rec    rgpv_rec_type;
1718   l_rulv_rec    rulv_rec_type;
1719   l_rulv_tbl    rulv_tbl_type;
1720 
1721   l_slh_rulv_rec rulv_rec_type;
1722   x_slh_rulv_rec rulv_rec_type;
1723 
1724   l_sll_rulv_rec rulv_rec_type;
1725   x_sll_rulv_rec rulv_rec_type;
1726 
1727   l_sll_rulv_tbl rulv_tbl_type;
1728   x_sll_rulv_tbl rulv_tbl_type;
1729 
1730   l_sll_count    NUMBER;
1731   k              NUMBER;
1732   l_rgp_id       OKC_RULE_GROUPS_V.ID%TYPE;
1733   l_slh_rule_id  OKC_RULES_V.ID%TYPE;
1734 
1735   update_failed  EXCEPTION;
1736 
1737   BEGIN
1738     IF (G_DEBUG_ENABLED = 'Y') THEN
1739       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1740     END IF;
1741 
1742      x_return_status := OKL_API.G_RET_STS_SUCCESS;
1743      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1744             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
1745      END IF;
1746 
1747      FOR i IN 1..p_kle_tbl.COUNT
1748      LOOP
1749         l_match_found := 'N';
1750         l_sll_count   := 0;
1751         l_sll_rulv_tbl.DELETE; -- Bug# 2754344
1752         FOR j IN 1..p_strm_lalevl_tbl.COUNT
1753         LOOP
1754            IF (p_khr_id = p_strm_lalevl_tbl(j).chr_id
1755                AND
1756                p_kle_tbl(i).id = p_strm_lalevl_tbl(j).cle_id) THEN
1757 
1758                   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1759                                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'KLE ID: '||p_strm_lalevl_tbl(j).cle_id);
1760                   END IF;
1761 
1762                   l_match_found := 'Y';
1763                   IF (p_strm_lalevl_tbl(j).rule_information_category = 'LASLH') THEN
1764 
1765                      OPEN rgp_csr (p_khr_id,
1766                                    p_strm_lalevl_tbl(j).cle_id);
1767                      FETCH rgp_csr INTO l_rgp_id;
1768 
1769                      IF rgp_csr%NOTFOUND THEN
1770                         l_rgpv_rec.rgd_code   := 'LALEVL';
1771                         l_rgpv_rec.chr_id     := NULL;
1772                         l_rgpv_rec.dnz_chr_id := p_khr_id;
1773                         l_rgpv_rec.cle_id     := p_strm_lalevl_tbl(j).cle_id;
1774                         l_rgpv_rec.rgp_type   := 'KRG';
1775 
1776                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1777                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Rule group creation');
1778                         END IF;
1779                         OKL_RULE_PUB.create_rule_group(
1780 			                             p_api_version     => 1.0,
1781 			                             p_init_msg_list   => OKL_API.G_FALSE,
1782 			                             x_return_status   => x_return_status,
1783 			                             x_msg_count       => x_msg_count,
1784 			                             x_msg_data        => x_msg_data,
1785 			                             p_rgpv_rec        => l_rgpv_rec,
1786 			                             x_rgpv_rec        => x_rgpv_rec
1787 			                            );
1788 			IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1789                             raise update_failed;
1790                         END IF;
1791                         l_rgp_id := x_rgpv_rec.id;
1792 
1793                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1794                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Rule Group Created');
1795                         END IF;
1796                      END IF;
1797 
1798                      CLOSE rgp_csr;
1799 
1800                      l_slh_id := NULL;
1801                      OPEN slh_csr (p_strm_lalevl_tbl(j).object1_id1,
1802                                    l_rgp_id);
1803                      FETCH slh_csr INTO l_slh_id;
1804                      CLOSE slh_csr;
1805 
1806                      IF (l_slh_id IS NOT NULL) THEN -- delete rules (SLH, SLL)
1807 
1808                        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1809                                                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Inside delete rule');
1810                        END IF;
1811                        l_rulv_rec.id := l_slh_id;
1812                        okl_rule_pub.delete_rule(
1813 		                                p_api_version    => 1.0,
1814 		                                p_init_msg_list  => OKC_API.G_FALSE,
1815 		                                x_return_status  => x_return_status,
1816 		                                x_msg_count      => x_msg_count,
1817 		                                x_msg_data       => x_msg_data,
1818 		                                p_rulv_rec       => l_rulv_rec
1819                                                );
1820                         IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1821                             RAISE update_failed;
1822                         END IF;
1823 
1824                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1825                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLH deleted');
1826                         END IF;
1827                         k := 0;
1828                         FOR sll_rec IN sll_csr(p_khr_id,
1829                                                l_slh_id,
1830                                                l_rgp_id)
1831                         LOOP
1832                            k := k + 1;
1833                            l_rulv_tbl(k).id := sll_rec.id;
1834                         END LOOP;
1835                         okl_rule_pub.delete_rule(
1836   		                                 p_api_version    => 1.0,
1837 		                                 p_init_msg_list  => OKC_API.G_FALSE,
1838 		                                 x_return_status  => x_return_status,
1839 		                                 x_msg_count      => x_msg_count,
1840 		                                 x_msg_data       => x_msg_data,
1841 		                                 p_rulv_tbl       => l_rulv_tbl
1842                                                 );
1843                         IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1844                             RAISE update_failed;
1845                         END IF;
1846 
1847                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1848                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLL deleted');
1849                         END IF;
1850                      END IF;
1851 
1852                      l_slh_rulv_rec.object1_id1               := p_strm_lalevl_tbl(j).object1_id1;
1853                      l_slh_rulv_rec.jtot_object1_code         := p_strm_lalevl_tbl(j).jtot_object1_code;
1854                      l_slh_rulv_rec.dnz_chr_id                := p_khr_id;
1855                      l_slh_rulv_rec.rgp_id                    := l_rgp_id;
1856                      l_slh_rulv_rec.std_template_yn           := 'N';
1857                      l_slh_rulv_rec.warn_yn                   := 'N';
1858                      l_slh_rulv_rec.template_yn               := 'N';
1859                      l_slh_rulv_rec.sfwt_flag                 := 'N';
1860                      l_slh_rulv_rec.rule_information_category := 'LASLH';
1861                      l_slh_rulv_rec.rule_information1         := p_strm_lalevl_tbl(j).rule_information1;
1862                      l_slh_rulv_rec.rule_information2         := p_strm_lalevl_tbl(j).rule_information2;
1863                      l_slh_rulv_rec.rule_information3         := p_strm_lalevl_tbl(j).rule_information3;
1864                      l_slh_rulv_rec.rule_information4         := p_strm_lalevl_tbl(j).rule_information4;
1865                      l_slh_rulv_rec.rule_information5         := p_strm_lalevl_tbl(j).rule_information5;
1866                      l_slh_rulv_rec.rule_information6         := p_strm_lalevl_tbl(j).rule_information6;
1867                      l_slh_rulv_rec.rule_information7         := p_strm_lalevl_tbl(j).rule_information7;
1868                      l_slh_rulv_rec.rule_information8         := p_strm_lalevl_tbl(j).rule_information8;
1869                      l_slh_rulv_rec.rule_information9         := p_strm_lalevl_tbl(j).rule_information9;
1870                      l_slh_rulv_rec.rule_information10        := p_strm_lalevl_tbl(j).rule_information10;
1871                      l_slh_rulv_rec.rule_information11        := p_strm_lalevl_tbl(j).rule_information11;
1872                      l_slh_rulv_rec.rule_information12        := p_strm_lalevl_tbl(j).rule_information12;
1873                      l_slh_rulv_rec.rule_information13        := p_strm_lalevl_tbl(j).rule_information13;
1874                      l_slh_rulv_rec.rule_information14        := p_strm_lalevl_tbl(j).rule_information14;
1875                      l_slh_rulv_rec.rule_information15        := p_strm_lalevl_tbl(j).rule_information15;
1876                      l_slh_rulv_rec.jtot_object1_code         := p_strm_lalevl_tbl(j).jtot_object1_code;
1877                      l_slh_rulv_rec.jtot_object2_code         := p_strm_lalevl_tbl(j).jtot_object2_code;
1878                      l_slh_rulv_rec.jtot_object3_code         := p_strm_lalevl_tbl(j).jtot_object3_code;
1879                      l_slh_rulv_rec.object1_id1               := p_strm_lalevl_tbl(j).object1_id1;
1880                      l_slh_rulv_rec.object1_id2               := p_strm_lalevl_tbl(j).object1_id2;
1881                      l_slh_rulv_rec.object2_id1               := p_strm_lalevl_tbl(j).object2_id1;
1882                      l_slh_rulv_rec.object2_id2               := p_strm_lalevl_tbl(j).object2_id2;
1883                      l_slh_rulv_rec.object3_id1               := p_strm_lalevl_tbl(j).object3_id1;
1884                      l_slh_rulv_rec.object3_id2               := p_strm_lalevl_tbl(j).object3_id2;
1885 
1886                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1887                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before SLH creation');
1888                      END IF;
1889 
1890                      Okl_Rule_Pub.create_rule(
1891                          p_api_version     => 1.0,
1892                          p_init_msg_list   => Okc_Api.G_FALSE,
1893                          x_return_status   => x_return_status,
1894                          x_msg_count       => x_msg_count,
1895                          x_msg_data        => x_msg_data,
1896                          p_rulv_rec        => l_slh_rulv_rec,
1897                          x_rulv_rec        => x_slh_rulv_rec
1898                         );
1899 
1900                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1901                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLH status: '||x_return_status);
1902                      END IF;
1903 
1904                      IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
1905                         RAISE update_failed;
1906                      END IF;
1907 
1908                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1909                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLH rule created');
1910                      END IF;
1911 
1912                   ELSIF (p_strm_lalevl_tbl(j).rule_information_category = 'LASLL') THEN
1913 
1914                      l_sll_count := l_sll_count + 1;
1915                      l_sll_rulv_tbl(l_sll_count).object1_id1               := p_strm_lalevl_tbl(j).object1_id1;
1916                      l_sll_rulv_tbl(l_sll_count).jtot_object1_code         := p_strm_lalevl_tbl(j).jtot_object1_code;
1917                      l_sll_rulv_tbl(l_sll_count).dnz_chr_id                := p_khr_id;
1918                      l_sll_rulv_tbl(l_sll_count).rgp_id                    := l_rgp_id;
1919                      l_sll_rulv_tbl(l_sll_count).std_template_yn           := 'N';
1920                      l_sll_rulv_tbl(l_sll_count).warn_yn                   := 'N';
1921                      l_sll_rulv_tbl(l_sll_count).template_yn               := 'N';
1922                      l_sll_rulv_tbl(l_sll_count).sfwt_flag                 := 'N';
1923                      l_sll_rulv_tbl(l_sll_count).rule_information_category := 'LASLL';
1924                      l_sll_rulv_tbl(l_sll_count).rule_information1         := p_strm_lalevl_tbl(j).rule_information1;
1925                      l_sll_rulv_tbl(l_sll_count).rule_information2         := p_strm_lalevl_tbl(j).rule_information2;
1926                      l_sll_rulv_tbl(l_sll_count).rule_information3         := p_strm_lalevl_tbl(j).rule_information3;
1927                      l_sll_rulv_tbl(l_sll_count).rule_information4         := p_strm_lalevl_tbl(j).rule_information4;
1928                      l_sll_rulv_tbl(l_sll_count).rule_information5         := p_strm_lalevl_tbl(j).rule_information5;
1929                      l_sll_rulv_tbl(l_sll_count).rule_information6         := p_strm_lalevl_tbl(j).rule_information6;
1930                      l_sll_rulv_tbl(l_sll_count).rule_information7         := p_strm_lalevl_tbl(j).rule_information7;
1931                      l_sll_rulv_tbl(l_sll_count).rule_information8         := p_strm_lalevl_tbl(j).rule_information8;
1932                      l_sll_rulv_tbl(l_sll_count).rule_information9         := p_strm_lalevl_tbl(j).rule_information9;
1933                      l_sll_rulv_tbl(l_sll_count).rule_information10        := p_strm_lalevl_tbl(j).rule_information10;
1934                      l_sll_rulv_tbl(l_sll_count).rule_information11        := p_strm_lalevl_tbl(j).rule_information11;
1935                      l_sll_rulv_tbl(l_sll_count).rule_information12        := p_strm_lalevl_tbl(j).rule_information12;
1936                      l_sll_rulv_tbl(l_sll_count).rule_information13        := p_strm_lalevl_tbl(j).rule_information13;
1937                      l_sll_rulv_tbl(l_sll_count).rule_information14        := p_strm_lalevl_tbl(j).rule_information14;
1938                      l_sll_rulv_tbl(l_sll_count).rule_information15        := p_strm_lalevl_tbl(j).rule_information15;
1939                      l_sll_rulv_tbl(l_sll_count).jtot_object1_code         := p_strm_lalevl_tbl(j).jtot_object1_code;
1940                      l_sll_rulv_tbl(l_sll_count).jtot_object2_code         := p_strm_lalevl_tbl(j).jtot_object2_code;
1941                      l_sll_rulv_tbl(l_sll_count).jtot_object3_code         := p_strm_lalevl_tbl(j).jtot_object3_code;
1942                      l_sll_rulv_tbl(l_sll_count).object1_id1               := p_strm_lalevl_tbl(j).object1_id1;
1943                      l_sll_rulv_tbl(l_sll_count).object1_id2               := p_strm_lalevl_tbl(j).object1_id2;
1944                      l_sll_rulv_tbl(l_sll_count).object2_id1               := x_slh_rulv_rec.id;
1945                      -- nikshah 25-Nov-08 bug # 6697542
1946                      l_sll_rulv_tbl(l_sll_count).object2_id2               := '#' ;--p_strm_lalevl_tbl(j).object2_id2;
1947                      --l_sll_rulv_tbl(l_sll_count).object2_id2               := p_strm_lalevl_tbl(j).object2_id2;
1948                      -- nikshah 25-Nov-08 bug # 6697542
1949                      l_sll_rulv_tbl(l_sll_count).object3_id1               := p_strm_lalevl_tbl(j).object3_id1;
1950                      l_sll_rulv_tbl(l_sll_count).object3_id2               := p_strm_lalevl_tbl(j).object3_id2;
1951                      -- populate rule tbl data
1952                END IF;
1953            END IF;
1954         END LOOP;
1955 
1956         IF (l_match_found = 'Y') THEN
1957 
1958            l_match_found := 'N';
1959            Okl_Rule_Pub.create_rule(
1960 	                            p_api_version     => 1.0,
1961 	                            p_init_msg_list   => Okc_Api.G_FALSE,
1962 	                            x_return_status   => x_return_status,
1963 	                            x_msg_count       => x_msg_count,
1964 	                            x_msg_data        => x_msg_data,
1965 	                            p_rulv_tbl        => l_sll_rulv_tbl,
1966 	                            x_rulv_tbl        => x_sll_rulv_tbl
1967 	                           );
1968 
1969 	   IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
1970 	      RAISE update_failed;
1971 	   END IF;
1972 
1973            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1974                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLL rule created');
1975            END IF;
1976 
1977         END IF;
1978 
1979      END LOOP; -- Contract Header/Line
1980 
1981      RETURN;
1982 
1983   EXCEPTION
1984      WHEN update_failed THEN
1985         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1986                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update failed in update_slh_sll');
1987         END IF;
1988         x_return_status := OKL_API.G_RET_STS_ERROR;
1989         --raise; -- handle error in called routine
1990   END update_slh_sll;
1991 
1992 ------------------------------------------------------------------------------
1993 -- PROCEDURE update_ppd_amount
1994 --   This proecdure updates PPD Payments (SLH, SLL)
1995 -- Calls:
1996 -- Called by: rebook_contract (for PPD amount only)
1997 
1998 ------------------------------------------------------------------------------
1999   PROCEDURE update_ppd_amount(
2000                            x_return_status     OUT NOCOPY VARCHAR2,
2001                            x_msg_count         OUT NOCOPY NUMBER,
2002                            x_msg_data          OUT NOCOPY VARCHAR2,
2003                            p_khr_id            IN  OKC_K_HEADERS_V.ID%TYPE,
2004                            p_kle_tbl           IN  kle_tbl_type,
2005                            p_strm_lalevl_tbl   IN  strm_lalevl_tbl_type
2006                          ) IS
2007 
2008   l_api_name    VARCHAR2(35)    := 'update_ppd_amount';
2009   l_proc_name   VARCHAR2(35)    := 'UPDATE_PPD_AMOUNT';
2010   l_api_version NUMBER          := 1.0;
2011 
2012   CURSOR rgp_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE,
2013                   p_cle_id OKC_K_LINES_V.ID%TYPE) IS
2014   SELECT ID
2015   FROM   okc_rule_groups_v
2016   WHERE  dnz_chr_id = p_chr_id
2017   AND    cle_id     = p_cle_id
2018   AND    rgd_code   = 'LALEVL';
2019 
2020   CURSOR slh_csr (p_stream_id OKC_RULES_V.OBJECT1_ID1%TYPE,
2021                   p_rgp_id    OKC_RULES_V.RGP_ID%TYPE) IS
2022   SELECT id
2023   FROM   okc_rules_v
2024   WHERE  object1_id1 = p_stream_id
2025   AND    rgp_id      = p_rgp_id
2026   AND    rule_information_category = 'LASLH';
2027 
2028   CURSOR sll_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE,
2029                   p_slh_id OKC_RULES_V.ID%TYPE,
2030                   p_rgp_id OKC_RULE_GROUPS_V.ID%TYPE) IS
2031   SELECT id
2032   FROM   okc_rules_v
2033   WHERE  dnz_chr_id                = p_chr_id
2034   AND    rgp_id                    = p_rgp_id
2035   AND    object2_id1               = p_slh_id
2036   AND    rule_information_category = 'LASLL';
2037 
2038   l_match_found VARCHAR2(1);
2039   l_slh_id      NUMBER;
2040   l_rgpv_rec    rgpv_rec_type;
2041   x_rgpv_rec    rgpv_rec_type;
2042   l_rulv_rec    rulv_rec_type;
2043   l_rulv_tbl    rulv_tbl_type;
2044 
2045   l_slh_rulv_rec rulv_rec_type;
2046   x_slh_rulv_rec rulv_rec_type;
2047 
2048   l_sll_rulv_rec rulv_rec_type;
2049   x_sll_rulv_rec rulv_rec_type;
2050 
2051   l_sll_rulv_tbl rulv_tbl_type;
2052   x_sll_rulv_tbl rulv_tbl_type;
2053 
2054   l_sll_count    NUMBER;
2055   k              NUMBER;
2056   l_rgp_id       OKC_RULE_GROUPS_V.ID%TYPE;
2057   l_slh_rule_id  OKC_RULES_V.ID%TYPE;
2058 
2059   l_previous_lasll_exists BOOLEAN := FALSE;
2060   update_failed  EXCEPTION;
2061 
2062   BEGIN
2063     IF (G_DEBUG_ENABLED = 'Y') THEN
2064       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2065     END IF;
2066 
2067      x_return_status := OKL_API.G_RET_STS_SUCCESS;
2068      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2069             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
2070      END IF;
2071 
2072      FOR i IN 1..p_kle_tbl.COUNT
2073      LOOP
2074         l_match_found := 'N';
2075         l_sll_count   := 0;
2076         l_sll_rulv_tbl.DELETE; -- Bug# 2754344
2077         l_previous_lasll_exists := FALSE;
2078         FOR j IN 1..p_strm_lalevl_tbl.COUNT
2079         LOOP
2080            IF (p_khr_id = p_strm_lalevl_tbl(j).chr_id
2081                AND
2082                p_kle_tbl(i).id = p_strm_lalevl_tbl(j).cle_id) THEN
2083 
2084                   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2085                                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'KLE ID: '||p_strm_lalevl_tbl(j).cle_id);
2086                   END IF;
2087 
2088                   l_match_found := 'Y';
2089                   IF (p_strm_lalevl_tbl(j).rule_information_category = 'LASLH') THEN
2090 
2091                      IF (l_previous_lasll_exists) THEN
2092                         Okl_Rule_Pub.create_rule(
2093 	                            p_api_version     => 1.0,
2094 	                            p_init_msg_list   => Okc_Api.G_FALSE,
2095 	                            x_return_status   => x_return_status,
2096 	                            x_msg_count       => x_msg_count,
2097 	                            x_msg_data        => x_msg_data,
2098 	                            p_rulv_tbl        => l_sll_rulv_tbl,
2099 	                            x_rulv_tbl        => x_sll_rulv_tbl
2100 	                           );
2101 
2102 	                IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2103 	                  RAISE update_failed;
2104 	                END IF;
2105 
2106                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2107                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLL rule created');
2108                         END IF;
2109                         l_previous_lasll_exists := FALSE;
2110                         l_sll_rulv_tbl.DELETE; -- Bug# 2754344
2111 
2112                      END IF;
2113 
2114                      OPEN rgp_csr (p_khr_id,
2115                                    p_strm_lalevl_tbl(j).cle_id);
2116                      FETCH rgp_csr INTO l_rgp_id;
2117 
2118                      IF rgp_csr%NOTFOUND THEN
2119                         l_rgpv_rec.rgd_code   := 'LALEVL';
2120                         l_rgpv_rec.chr_id     := NULL;
2121                         l_rgpv_rec.dnz_chr_id := p_khr_id;
2122                         l_rgpv_rec.cle_id     := p_strm_lalevl_tbl(j).cle_id;
2123                         l_rgpv_rec.rgp_type   := 'KRG';
2124 
2125                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2126                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Rule group creation');
2127                         END IF;
2128                         OKL_RULE_PUB.create_rule_group(
2129 			                             p_api_version     => 1.0,
2130 			                             p_init_msg_list   => OKL_API.G_FALSE,
2131 			                             x_return_status   => x_return_status,
2132 			                             x_msg_count       => x_msg_count,
2133 			                             x_msg_data        => x_msg_data,
2134 			                             p_rgpv_rec        => l_rgpv_rec,
2135 			                             x_rgpv_rec        => x_rgpv_rec
2136 			                            );
2137 			IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2138                             raise update_failed;
2139                         END IF;
2140                         l_rgp_id := x_rgpv_rec.id;
2141 
2142                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2143                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Rule Group Created');
2144                         END IF;
2145                      END IF;
2146 
2147                      CLOSE rgp_csr;
2148 
2149                      l_slh_id := NULL;
2150                      OPEN slh_csr (p_strm_lalevl_tbl(j).object1_id1,
2151                                    l_rgp_id);
2152                      FETCH slh_csr INTO l_slh_id;
2153                      CLOSE slh_csr;
2154 
2155                      IF (l_slh_id IS NOT NULL) THEN -- delete rules (SLH, SLL)
2156 
2157                        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2158                                                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Inside delete rule');
2159                        END IF;
2160                        l_rulv_rec.id := l_slh_id;
2161                        okl_rule_pub.delete_rule(
2162 		                                p_api_version    => 1.0,
2163 		                                p_init_msg_list  => OKC_API.G_FALSE,
2164 		                                x_return_status  => x_return_status,
2165 		                                x_msg_count      => x_msg_count,
2166 		                                x_msg_data       => x_msg_data,
2167 		                                p_rulv_rec       => l_rulv_rec
2168                                                );
2169                         IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2170                             RAISE update_failed;
2171                         END IF;
2172 
2173                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2174                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLH deleted');
2175                         END IF;
2176                         k := 0;
2177                         FOR sll_rec IN sll_csr(p_khr_id,
2178                                                l_slh_id,
2179                                                l_rgp_id)
2180                         LOOP
2181                            k := k + 1;
2182                            l_rulv_tbl(k).id := sll_rec.id;
2183                         END LOOP;
2184                         okl_rule_pub.delete_rule(
2185   		                                 p_api_version    => 1.0,
2186 		                                 p_init_msg_list  => OKC_API.G_FALSE,
2187 		                                 x_return_status  => x_return_status,
2188 		                                 x_msg_count      => x_msg_count,
2189 		                                 x_msg_data       => x_msg_data,
2190 		                                 p_rulv_tbl       => l_rulv_tbl
2191                                                 );
2192                         IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2193                             RAISE update_failed;
2194                         END IF;
2195 
2196                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2197                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLL deleted');
2198                         END IF;
2199                      END IF;
2200 
2201                      l_slh_rulv_rec.object1_id1               := p_strm_lalevl_tbl(j).object1_id1;
2202                      l_slh_rulv_rec.jtot_object1_code         := p_strm_lalevl_tbl(j).jtot_object1_code;
2203                      l_slh_rulv_rec.dnz_chr_id                := p_khr_id;
2204                      l_slh_rulv_rec.rgp_id                    := l_rgp_id;
2205                      l_slh_rulv_rec.std_template_yn           := 'N';
2206                      l_slh_rulv_rec.warn_yn                   := 'N';
2207                      l_slh_rulv_rec.template_yn               := 'N';
2208                      l_slh_rulv_rec.sfwt_flag                 := 'N';
2209                      l_slh_rulv_rec.rule_information_category := 'LASLH';
2210                      l_slh_rulv_rec.rule_information1         := p_strm_lalevl_tbl(j).rule_information1;
2211                      l_slh_rulv_rec.rule_information2         := p_strm_lalevl_tbl(j).rule_information2;
2212                      l_slh_rulv_rec.rule_information3         := p_strm_lalevl_tbl(j).rule_information3;
2213                      l_slh_rulv_rec.rule_information4         := p_strm_lalevl_tbl(j).rule_information4;
2214                      l_slh_rulv_rec.rule_information5         := p_strm_lalevl_tbl(j).rule_information5;
2215                      l_slh_rulv_rec.rule_information6         := p_strm_lalevl_tbl(j).rule_information6;
2216                      l_slh_rulv_rec.rule_information7         := p_strm_lalevl_tbl(j).rule_information7;
2217                      l_slh_rulv_rec.rule_information8         := p_strm_lalevl_tbl(j).rule_information8;
2218                      l_slh_rulv_rec.rule_information9         := p_strm_lalevl_tbl(j).rule_information9;
2219                      l_slh_rulv_rec.rule_information10        := p_strm_lalevl_tbl(j).rule_information10;
2220                      l_slh_rulv_rec.rule_information11        := p_strm_lalevl_tbl(j).rule_information11;
2221                      l_slh_rulv_rec.rule_information12        := p_strm_lalevl_tbl(j).rule_information12;
2222                      l_slh_rulv_rec.rule_information13        := p_strm_lalevl_tbl(j).rule_information13;
2223                      l_slh_rulv_rec.rule_information14        := p_strm_lalevl_tbl(j).rule_information14;
2224                      l_slh_rulv_rec.rule_information15        := p_strm_lalevl_tbl(j).rule_information15;
2225                      l_slh_rulv_rec.jtot_object1_code         := p_strm_lalevl_tbl(j).jtot_object1_code;
2226                      l_slh_rulv_rec.jtot_object2_code         := p_strm_lalevl_tbl(j).jtot_object2_code;
2227                      l_slh_rulv_rec.jtot_object3_code         := p_strm_lalevl_tbl(j).jtot_object3_code;
2228                      l_slh_rulv_rec.object1_id1               := p_strm_lalevl_tbl(j).object1_id1;
2229                      l_slh_rulv_rec.object1_id2               := p_strm_lalevl_tbl(j).object1_id2;
2230                      l_slh_rulv_rec.object2_id1               := p_strm_lalevl_tbl(j).object2_id1;
2231                      l_slh_rulv_rec.object2_id2               := p_strm_lalevl_tbl(j).object2_id2;
2232                      l_slh_rulv_rec.object3_id1               := p_strm_lalevl_tbl(j).object3_id1;
2233                      l_slh_rulv_rec.object3_id2               := p_strm_lalevl_tbl(j).object3_id2;
2234 
2235                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2236                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before SLH creation');
2237                      END IF;
2238 
2239                      Okl_Rule_Pub.create_rule(
2240                          p_api_version     => 1.0,
2241                          p_init_msg_list   => Okc_Api.G_FALSE,
2242                          x_return_status   => x_return_status,
2243                          x_msg_count       => x_msg_count,
2244                          x_msg_data        => x_msg_data,
2245                          p_rulv_rec        => l_slh_rulv_rec,
2246                          x_rulv_rec        => x_slh_rulv_rec
2247                         );
2248 
2249                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2250                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLH status: '||x_return_status);
2251                      END IF;
2252 
2253                      IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2254                         RAISE update_failed;
2255                      END IF;
2256 
2257                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2258                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLH rule created');
2259                      END IF;
2260 
2261                   ELSIF (p_strm_lalevl_tbl(j).rule_information_category = 'LASLL') THEN
2262 
2263                      l_previous_lasll_exists:= TRUE;
2264                      l_sll_count := l_sll_count + 1;
2265                      l_sll_rulv_tbl(l_sll_count).object1_id1               := p_strm_lalevl_tbl(j).object1_id1;
2266                      l_sll_rulv_tbl(l_sll_count).jtot_object1_code         := p_strm_lalevl_tbl(j).jtot_object1_code;
2267                      l_sll_rulv_tbl(l_sll_count).dnz_chr_id                := p_khr_id;
2268                      l_sll_rulv_tbl(l_sll_count).rgp_id                    := l_rgp_id;
2269                      l_sll_rulv_tbl(l_sll_count).std_template_yn           := 'N';
2270                      l_sll_rulv_tbl(l_sll_count).warn_yn                   := 'N';
2271                      l_sll_rulv_tbl(l_sll_count).template_yn               := 'N';
2272                      l_sll_rulv_tbl(l_sll_count).sfwt_flag                 := 'N';
2273                      l_sll_rulv_tbl(l_sll_count).rule_information_category := 'LASLL';
2274                      l_sll_rulv_tbl(l_sll_count).rule_information1         := p_strm_lalevl_tbl(j).rule_information1;
2275                      l_sll_rulv_tbl(l_sll_count).rule_information2         := p_strm_lalevl_tbl(j).rule_information2;
2276                      l_sll_rulv_tbl(l_sll_count).rule_information3         := p_strm_lalevl_tbl(j).rule_information3;
2277                      l_sll_rulv_tbl(l_sll_count).rule_information4         := p_strm_lalevl_tbl(j).rule_information4;
2278                      l_sll_rulv_tbl(l_sll_count).rule_information5         := p_strm_lalevl_tbl(j).rule_information5;
2279                      l_sll_rulv_tbl(l_sll_count).rule_information6         := p_strm_lalevl_tbl(j).rule_information6;
2280                      l_sll_rulv_tbl(l_sll_count).rule_information7         := p_strm_lalevl_tbl(j).rule_information7;
2281                      l_sll_rulv_tbl(l_sll_count).rule_information8         := p_strm_lalevl_tbl(j).rule_information8;
2282                      l_sll_rulv_tbl(l_sll_count).rule_information9         := p_strm_lalevl_tbl(j).rule_information9;
2283                      l_sll_rulv_tbl(l_sll_count).rule_information10        := p_strm_lalevl_tbl(j).rule_information10;
2284                      l_sll_rulv_tbl(l_sll_count).rule_information11        := p_strm_lalevl_tbl(j).rule_information11;
2285                      l_sll_rulv_tbl(l_sll_count).rule_information12        := p_strm_lalevl_tbl(j).rule_information12;
2286                      l_sll_rulv_tbl(l_sll_count).rule_information13        := p_strm_lalevl_tbl(j).rule_information13;
2287                      l_sll_rulv_tbl(l_sll_count).rule_information14        := p_strm_lalevl_tbl(j).rule_information14;
2288                      l_sll_rulv_tbl(l_sll_count).rule_information15        := p_strm_lalevl_tbl(j).rule_information15;
2289                      l_sll_rulv_tbl(l_sll_count).jtot_object1_code         := p_strm_lalevl_tbl(j).jtot_object1_code;
2290                      l_sll_rulv_tbl(l_sll_count).jtot_object2_code         := p_strm_lalevl_tbl(j).jtot_object2_code;
2291                      l_sll_rulv_tbl(l_sll_count).jtot_object3_code         := p_strm_lalevl_tbl(j).jtot_object3_code;
2292                      l_sll_rulv_tbl(l_sll_count).object1_id1               := p_strm_lalevl_tbl(j).object1_id1;
2293                      l_sll_rulv_tbl(l_sll_count).object1_id2               := p_strm_lalevl_tbl(j).object1_id2;
2294                      l_sll_rulv_tbl(l_sll_count).object2_id1               := x_slh_rulv_rec.id;
2295                      -- nikshah 25-Nov-08 bug # 6697542
2296                      l_sll_rulv_tbl(l_sll_count).object2_id2               := '#' ;--p_strm_lalevl_tbl(j).object2_id2;
2297                      --l_sll_rulv_tbl(l_sll_count).object2_id2               := p_strm_lalevl_tbl(j).object2_id2;
2298                      -- nikshah 25-Nov-08 bug # 6697542
2299                      l_sll_rulv_tbl(l_sll_count).object3_id1               := p_strm_lalevl_tbl(j).object3_id1;
2300                      l_sll_rulv_tbl(l_sll_count).object3_id2               := p_strm_lalevl_tbl(j).object3_id2;
2301                      -- populate rule tbl data
2302                END IF;
2303            END IF;
2304         END LOOP;
2305 
2306         IF (l_match_found = 'Y') THEN
2307 
2308            l_match_found := 'N';
2309            Okl_Rule_Pub.create_rule(
2310 	                            p_api_version     => 1.0,
2311 	                            p_init_msg_list   => Okc_Api.G_FALSE,
2312 	                            x_return_status   => x_return_status,
2313 	                            x_msg_count       => x_msg_count,
2314 	                            x_msg_data        => x_msg_data,
2315 	                            p_rulv_tbl        => l_sll_rulv_tbl,
2316 	                            x_rulv_tbl        => x_sll_rulv_tbl
2317 	                           );
2318 
2319 	   IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
2320 	      RAISE update_failed;
2321 	   END IF;
2322 
2323            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2324                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'SLL rule created');
2325            END IF;
2326 
2327         END IF;
2328 
2329      END LOOP; -- Contract Header/Line
2330 
2331      RETURN;
2332 
2333   EXCEPTION
2334      WHEN update_failed THEN
2335         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2336                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update failed in update_ppd_amount');
2337         END IF;
2338         x_return_status := OKL_API.G_RET_STS_ERROR;
2339         NULL; -- handle error in called routine
2340        --raise;
2341   END update_ppd_amount;
2342 
2343 ------------------------------------------------------------------------------
2344 -- PROCEDURE rebook_contract
2345 --   This proecdure process rebook for each contract supplied as parameter.
2346 --   Set values are in form of parameter too. Either specify or send NULL
2347 -- Calls:
2348 -- Called by:
2349 ------------------------------------------------------------------------------
2350   PROCEDURE rebook_contract(
2351                             x_return_status      OUT NOCOPY VARCHAR2,
2352                             x_msg_count          OUT NOCOPY NUMBER,
2353                             x_msg_data           OUT NOCOPY VARCHAR2,
2354                             p_online_yn          IN  VARCHAR2,
2355                             p_khr_id             IN  OKC_K_HEADERS_V.ID%TYPE,
2356                             p_kle_tbl            IN  kle_tbl_type,
2357                             p_line_count         IN  NUMBER,
2358                             p_request_name       IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE,
2359                             p_book_type_code     IN  FA_BOOKS.BOOK_TYPE_CODE%TYPE,
2360                             p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
2361                             p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
2362                             p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
2363                             p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
2364                             p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
2365                             p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
2366                             p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
2367                             p_transaction_date   IN  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE DEFAULT SYSDATE
2368                           ) IS
2369   l_api_name    VARCHAR2(35)    := 'rebook_contract';
2370   l_proc_name   VARCHAR2(35)    := 'REBOOK_CONTRACT';
2371   l_api_version NUMBER          := 1.0;
2372 
2373   l_mstv_rec    mstv_rec_type;
2374   x_mstv_rec    mstv_rec_type;
2375 
2376   l_mstv_tbl    mstv_tbl_type;
2377   x_mstv_tbl    mstv_tbl_type;
2378 
2379   l_qcl_id      NUMBER;
2380   l_msg_tbl     Okl_Qa_Check_Pub.msg_tbl_type;
2381   l_qa_check_status VARCHAR2(1);
2382 
2383   x_trx_number           NUMBER;
2384   x_trx_status           VARCHAR2(100);
2385 
2386   l_khrv_rec             khrv_rec_type;
2387   x_khrv_rec             khrv_rec_type;
2388 
2389   l_chrv_rec             chrv_rec_type;
2390   x_chrv_rec             chrv_rec_type;
2391 
2392   l_cvmv_rec             cvmv_rec_type;
2393   x_cvmv_rec             cvmv_rec_type;
2394 
2395   l_tcnv_rec             tcnv_rec_type;
2396   x_tcnv_rec             tcnv_rec_type;
2397 
2398   l_c_no varchar2(100);
2399   l_sts  varchar2(100);
2400 
2401   CURSOR con_sts_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
2402   SELECT sts.ste_code
2403   FROM   okc_statuses_b sts,
2404          okc_k_headers_b hdr
2405   WHERE  hdr.sts_code = sts.code
2406   AND    hdr.id       = p_chr_id;
2407 
2408   l_request_name         okl_rbk_selected_contract.request_name%TYPE;
2409   rebook_contract_failed EXCEPTION;
2410 
2411   l_transaction_date  DATE;
2412   x_ignore_flag       VARCHAR2(1);
2413   l_upfront_tax_status VARCHAR2(1) := 'S';
2414 
2415   BEGIN
2416     IF (G_DEBUG_ENABLED = 'Y') THEN
2417       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2418     END IF;
2419 
2420     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2421           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
2422     END IF;
2423 
2424     IF (p_transaction_date IS NULL
2425         OR
2426         p_transaction_date = OKL_API.G_MISS_DATE) THEN
2427 
2428        l_transaction_date := TRUNC(SYSDATE);
2429     ELSE
2430        l_transaction_date := p_transaction_date;
2431     END IF;
2432 
2433     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2434           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract : '||p_khr_id);
2435       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Tot Line : '||p_line_count);
2436       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Online? :' ||p_online_yn);
2437       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Transaction Date :' ||l_transaction_date);
2438     END IF;
2439 
2440     g_stream_trx_number := NULL; -- initialize before start
2441 
2442     IF (p_online_yn = 'N') THEN -- populate selected_contract table for Non-Online process only
2443        l_request_name          := TO_CHAR(get_seq_id());
2444        l_mstv_rec.request_name := l_request_name;
2445        FOR i IN 1..p_line_count
2446        LOOP
2447          l_mstv_rec.khr_id           := p_khr_id;
2448          l_mstv_rec.kle_id           := p_kle_tbl(i).id;
2449          l_mstv_rec.status           := 'NEW';
2450          l_mstv_rec.transaction_date := l_transaction_date;
2451 
2452          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2453                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Req: '||l_mstv_rec.request_name);
2454          END IF;
2455          okl_mst_pvt.insert_row(
2456                           p_api_version   => 1.0,
2457                           p_init_msg_list => OKL_API.G_FALSE,
2458                           x_return_status => x_return_status,
2459                           x_msg_count     => x_msg_count,
2460                           x_msg_data      => x_msg_data,
2461                           p_mstv_rec      => l_mstv_rec,
2462                           x_mstv_rec      => x_mstv_rec
2463                          );
2464 
2465          IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2466              RAISE rebook_contract_failed;
2467          END IF;
2468          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2469                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Line ID: '||p_kle_tbl(i).id);
2470          END IF;
2471        END LOOP;
2472 
2473     ELSE
2474        l_request_name := p_request_name;
2475     END IF;
2476 
2477     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2478           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Versioning...');
2479     END IF;
2480     --
2481     -- Version the Original Contract, only if it is ACTIVE, OKC requirement
2482     --
2483 
2484     FOR con_sts_rec IN con_sts_csr (p_khr_id)
2485     LOOP
2486        IF (con_sts_rec.ste_code = 'ACTIVE') THEN
2487 
2488           l_cvmv_rec.chr_id := p_khr_id;
2489           okl_version_pub.version_contract(
2490                                            p_api_version   => 1.0,
2491                                            p_init_msg_list => OKC_API.G_FALSE,
2492                                            x_return_status => x_return_status,
2493                                            x_msg_count     => x_msg_count,
2494                                            x_msg_data      => x_msg_data,
2495                                            p_cvmv_rec      => l_cvmv_rec,
2496                                            p_commit        => OKL_API.G_FALSE,
2497                                            x_cvmv_rec      => x_cvmv_rec
2498                                           );
2499 
2500            IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
2501               RAISE rebook_contract_failed;
2502            END IF;
2503 
2504            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2505                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract is versioned: '||x_return_status);
2506            END IF;
2507        END IF;
2508     END LOOP;
2509 
2510      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2511             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Versioning of Contract');
2512      END IF;
2513      -- Create Transaction for the rebook-ed contract
2514 
2515      okl_transaction_pvt.create_transaction(
2516                         p_api_version        => l_api_version,
2517                         p_init_msg_list      => OKL_API.G_FALSE,
2518                         x_return_status      => x_return_status,
2519                         x_msg_count          => x_msg_count,
2520                         x_msg_data           => x_msg_data,
2521                         p_chr_id             => p_khr_id,
2522                         p_new_chr_id         => NULL,
2523                         p_reason_code        => 'OTHER',
2524                         p_description        => NULL,
2525                         p_trx_date           => l_transaction_date, --SYSDATE,
2526                         p_trx_type           => 'REBOOK',
2527                         x_tcnv_rec           => x_tcnv_rec
2528                        );
2529 
2530      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2531         RAISE rebook_contract_failed;
2532      END IF;
2533 
2534      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2535             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Status After create transaction: '||x_return_status);
2536      END IF;
2537 
2538      l_mstv_tbl := get_rec(l_request_name, p_khr_id, x_return_status);
2539 
2540      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2541             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after get_rec : '||x_return_status);
2542      END IF;
2543      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2544         RAISE rebook_contract_failed;
2545      END IF;
2546 
2547      FOR i IN 1..l_mstv_tbl.COUNT
2548      LOOP
2549         l_mstv_tbl(i).transaction_id := x_tcnv_rec.id;
2550         l_mstv_tbl(i).status         := 'UNDER REVISION';
2551         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2552                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ID : '|| l_mstv_tbl(i).id);
2553           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'TRX ID : '|| l_mstv_tbl(i).transaction_id);
2554         END IF;
2555      END LOOP;
2556 
2557      okl_mst_pvt.update_row(
2558                             p_api_version    => l_api_version,
2559                             p_init_msg_list  => OKL_API.G_FALSE,
2560                             x_return_status  => x_return_status,
2561                             x_msg_count      => x_msg_count,
2562                             x_msg_data       => x_msg_data,
2563                             p_mstv_tbl       => l_mstv_tbl,
2564                             x_mstv_tbl       => x_mstv_tbl
2565                            );
2566 
2567      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2568             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after update mst :'|| x_return_status);
2569      END IF;
2570      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2571         RAISE rebook_contract_failed;
2572      END IF;
2573 
2574      -- Termination specific logic here
2575      IF (G_TERMINATION_TRX_ID IS NOT NULL) THEN
2576        --
2577        -- Update Mass rebook Transaction with source trx.
2578        --
2579        okl_api.set_message('OKL', 'AM', 'Termination Trx ID: ', G_TERMINATION_TRX_ID);
2580        l_tcnv_rec.id              := x_tcnv_rec.id;
2581        l_tcnv_rec.source_trx_id   := G_TERMINATION_TRX_ID;
2582        l_tcnv_rec.source_trx_type := G_TERMINATION_TRX_TYPE;
2583        G_MASS_RBK_TRX_ID          := x_tcnv_rec.id;
2584 
2585        Okl_Trx_Contracts_Pub.update_trx_contracts(
2586                                          p_api_version   => l_api_version,
2587                                          p_init_msg_list => OKL_API.G_FALSE,
2588                                          x_return_status => x_return_status,
2589                                          x_msg_count     => x_msg_count,
2590                                          x_msg_data      => x_msg_data,
2591                                          p_tcnv_rec      => l_tcnv_rec,
2592                                          x_tcnv_rec      => x_tcnv_rec
2593                                         );
2594 
2595        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2596                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After update transaction: '||x_return_status);
2597        END IF;
2598        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2599            RAISE OKL_API.G_EXCEPTION_ERROR;
2600        END IF;
2601 
2602      END IF;
2603      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2604             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after first loop ');
2605      END IF;
2606 
2607      --DEBUG
2608      -- PPD specific logic here
2609      IF (G_PPD_TRX_ID IS NOT NULL) THEN
2610        --
2611        -- Update Mass rebook Transaction with source trx.
2612        --
2613        okl_api.set_message('OKL', 'AM', 'Termination Trx ID: ', G_TERMINATION_TRX_ID);
2614        l_tcnv_rec.id              := x_tcnv_rec.id;
2615        l_tcnv_rec.source_trx_id   := G_PPD_TRX_ID;
2616        --l_tcnv_rec.source_trx_type := G_PPD_TRX_TYPE;
2617        l_tcnv_rec.source_trx_type := 'TCN';
2618        G_MASS_RBK_TRX_ID          := x_tcnv_rec.id;
2619 
2620        Okl_Trx_Contracts_Pub.update_trx_contracts(
2621                                          p_api_version   => l_api_version,
2622                                          p_init_msg_list => OKL_API.G_FALSE,
2623                                          x_return_status => x_return_status,
2624                                          x_msg_count     => x_msg_count,
2625                                          x_msg_data      => x_msg_data,
2626                                          p_tcnv_rec      => l_tcnv_rec,
2627                                          x_tcnv_rec      => x_tcnv_rec
2628                                         );
2629 
2630        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2631                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After update transaction: '||x_return_status);
2632        END IF;
2633        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2634            RAISE OKL_API.G_EXCEPTION_ERROR;
2635        END IF;
2636 
2637      END IF;
2638 
2639      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2640             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after second loop ');
2641      END IF;
2642      --
2643      -- Fix Bug# 2894810
2644      -- Create reversal journal entries before
2645      -- modifying the contract. This will help
2646      -- successfully reverse the current JE
2647      --
2648 
2649      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2650             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Transaction date: '||l_transaction_date);
2651      END IF;
2652      -- Bug#4542290 - smadhava - 01-SEP-2005 - Added - Start
2653      -- Bypass accoutning call for source transaction = Loan/Principal Pay down or Partial termination
2654      IF ( G_PPD_TRX_ID IS NULL AND G_TERMINATION_TRX_ID IS NULL ) THEN
2655      -- Bug#4542290 - smadhava - 01-SEP-2005 - Added - End
2656 
2657        OKL_LA_JE_PVT.GENERATE_JOURNAL_ENTRIES(
2658                       p_api_version      => l_api_version,
2659                       p_init_msg_list    => OKL_API.G_FALSE,
2660                       p_commit           => OKL_API.G_FALSE,
2661                       p_contract_id      => p_khr_id,
2662                       p_transaction_type => 'Rebook',
2663                       p_transaction_date => l_transaction_date, --trunc(SYSDATE),
2664                       p_draft_yn         => OKL_API.G_FALSE,
2665                       x_return_status    => x_return_status,
2666                       x_msg_count        => x_msg_count,
2667                       x_msg_data         => x_msg_data
2668                      );
2669 
2670        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2671                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after generate journal entries ');
2672        END IF;
2673        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2674            RAISE rebook_contract_failed;
2675        END IF;
2676      -- Bug#4542290 - smadhava - 01-SEP-2005 - Added - Start
2677      END IF; -- end of check for the source transaction
2678      -- Bug#4542290 - smadhava - 01-SEP-2005 - Added - End
2679 
2680 
2681      -- Update contract according to parameter specified
2682      populate_asset_change(
2683                            x_return_status      => x_return_status,
2684                            x_msg_count          => x_msg_count,
2685                            x_msg_data           => x_msg_data,
2686                            p_request_name       => l_request_name,
2687                            p_online_yn          => p_online_yn,
2688                            p_khr_id             => p_khr_id,
2689                            p_kle_tbl            => p_kle_tbl,
2690                            p_line_count         => p_line_count,
2691                            p_book_type_code     => p_book_type_code,
2692                            p_deprn_method_code  => p_deprn_method_code,
2693                            p_in_service_date    => p_in_service_date,
2694                            p_life_in_months     => p_life_in_months,
2695                            p_basic_rate         => p_basic_rate,
2696                            p_adjusted_rate      => p_adjusted_rate,
2697                            p_transaction_date   => l_transaction_date
2698                           );
2699 
2700      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2701             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after populate asset change ');
2702      END IF;
2703      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2704          RAISE rebook_contract_failed;
2705      END IF;
2706 
2707      --
2708      -- Update RESIDUAL_VALUE if asked for ...
2709      --
2710      IF (p_residual_value IS NOT NULL) THEN
2711         update_residual_value(
2712                               x_return_status      => x_return_status,
2713                               x_msg_count          => x_msg_count,
2714                               x_msg_data           => x_msg_data,
2715                               p_kle_tbl            => p_kle_tbl,
2716                               p_residual_value     => p_residual_value
2717                              );
2718 
2719         IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2720            RAISE rebook_contract_failed;
2721         END IF;
2722      END IF;
2723 
2724      --
2725      -- Update SLH, SLL if provided, only for Non-OnLine process
2726      --
2727      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2728             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'before calling update_ppd_amount');
2729      END IF;
2730      IF (p_online_yn = 'N'
2731          AND
2732          p_strm_lalevl_tbl.COUNT > 0) THEN
2733        IF (G_PPD_TRX_ID IS NOT NULL) THEN
2734         update_ppd_amount(
2735                        x_return_status    => x_return_status,
2736                        x_msg_count        => x_msg_count,
2737                        x_msg_data         => x_msg_data,
2738                        p_khr_id           => p_khr_id,
2739                        p_kle_tbl          => p_kle_tbl,
2740                        p_strm_lalevl_tbl  => p_strm_lalevl_tbl
2741                       );
2742        ELSE
2743         update_slh_sll(
2744                        x_return_status    => x_return_status,
2745                        x_msg_count        => x_msg_count,
2746                        x_msg_data         => x_msg_data,
2747                        p_khr_id           => p_khr_id,
2748                        p_kle_tbl          => p_kle_tbl,
2749                        p_strm_lalevl_tbl  => p_strm_lalevl_tbl
2750                       );
2751        END IF;
2752 
2753        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2754                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after calling update_ppd_amount');
2755        END IF;
2756        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2757            RAISE rebook_contract_failed;
2758        END IF;
2759      END IF;
2760 
2761      --
2762      -- Bug# 2843007, 14-MAR-2003
2763      -- Call Insurance API for asset termination
2764      --
2765 --Bug#5955320
2766      OKL_INSURANCE_POLICIES_PUB.cancel_create_policies(
2767                                                        p_api_version        => 1.0,
2768                                                        p_init_msg_list      => OKL_API.G_FALSE,
2769                                                        x_return_status      => x_return_status,
2770                                                        x_msg_count          => x_msg_count,
2771                                                        x_msg_data           => x_msg_data,
2772                                                        p_khr_id             => p_khr_id,
2773                                                        p_cancellation_date  => l_transaction_date, --SYSDATE
2774                                                        --Bug# 4055812
2775                                                        --Bug# 3945995
2776 					               p_transaction_id     => G_MASS_RBK_TRX_ID,
2777                                                        x_ignore_flag        => x_ignore_flag
2778                                                       );
2779 
2780      IF (x_return_status = OKL_API.G_RET_STS_ERROR) then
2781         IF (x_ignore_flag = OKL_API.G_FALSE) THEN
2782            raise rebook_contract_failed;
2783         ELSE
2784            x_return_status := OKL_API.G_RET_STS_SUCCESS;
2785         END IF;
2786      ELSIF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2787         raise rebook_contract_failed;
2788      END IF;
2789 
2790      -- Run QA Checker
2791 
2792      get_qcl_id(
2793                 x_return_status => x_return_status,
2794                 p_qcl_name      => 'OKL LA QA CHECK LIST',
2795                 x_qcl_id        => l_qcl_id
2796                );
2797 
2798      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2799             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Running QA Checker...');
2800      END IF;
2801      l_qa_check_status := 'S';
2802      okl_contract_book_pub.execute_qa_check_list(
2803                                                  p_api_version    => 1.0,
2804                                                  p_init_msg_list  => OKL_API.G_FALSE,
2805                                                  x_return_status  => x_return_status,
2806                                                  x_msg_count      => x_msg_count,
2807                                                  x_msg_data       => x_msg_data,
2808                                                  p_qcl_id         => l_qcl_id,
2809                                                  p_chr_id         => p_khr_id,
2810                                                  x_msg_tbl        => l_msg_tbl
2811                                                 );
2812 
2813      FOR i IN 1..l_msg_tbl.LAST
2814      LOOP
2815         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2816                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Name        : '||l_msg_tbl(i).name);
2817           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Description : '||l_msg_tbl(i).description);
2818           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error Status: '||l_msg_tbl(i).error_status);
2819           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Data        : '||l_msg_tbl(i).data);
2820         END IF;
2821 
2822         IF (l_msg_tbl(i).error_status = 'E') THEN
2823            l_qa_check_status := 'E';
2824         END IF;
2825      END LOOP;
2826 
2827      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2828             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After 1st Qa Checker '|| l_qa_check_status);
2829      END IF;
2830 
2831      IF (l_qa_check_status <> 'S') THEN
2832         RAISE rebook_contract_failed;
2833      END IF;
2834 
2835      -- R12B Authoring OA Migration
2836      -- Upfront Tax Calculation has been moved out of QA Checker.
2837      -- For Mass Rebook, Upfront Tax calculation will not be performed.
2838      -- The below call will only update the status of the Calculate Upfront Tax
2839      -- task to Complete.
2840      OKL_CONTRACT_BOOK_PVT.calculate_upfront_tax(
2841        p_api_version      =>  1.0,
2842        p_init_msg_list    =>  OKL_API.G_FALSE,
2843        x_return_status    =>  x_return_status,
2844        x_msg_count        =>  x_msg_count,
2845        x_msg_data         =>  x_msg_data,
2846        p_chr_id           =>  p_khr_id,
2847        x_process_status   =>  l_upfront_tax_status);
2848 
2849      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2850        RAISE rebook_contract_failed;
2851      END IF;
2852 
2853      -- Generate Stream
2854      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2855             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Submitting Request to generate Streams....');
2856      END IF;
2857      -- Changed to handle internal and external streams as well
2858      -- Fix Bug#
2859      --OKL_GENERATE_STREAMS_PUB.GENERATE_STREAMS(
2860      --
2861      OKL_LA_STREAM_PUB.GEN_INTR_EXTR_STREAM (
2862                                                p_api_version         => 1.0,
2863                                                p_init_msg_list       => OKL_API.G_FALSE,
2864                                                p_khr_id              => p_khr_id,
2865                                                p_generation_ctx_code => 'AUTH',
2866                                                x_trx_number          => x_trx_number,
2867                                                x_trx_status          => x_trx_status,
2868                                                x_return_status       => x_return_status,
2869                                                x_msg_count           => x_msg_count,
2870                                                x_msg_data            => x_msg_data
2871                                               );
2872 
2873      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2874          RAISE rebook_contract_failed;
2875      END IF;
2876 
2877      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2878             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Stream Status :'||x_return_status);
2879        OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Trx# : '||x_trx_number);
2880      END IF;
2881 
2882      g_stream_trx_number := x_trx_number;
2883 
2884      RETURN;
2885 
2886   EXCEPTION
2887 
2888       WHEN rebook_contract_failed THEN
2889         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2890                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook_contract_failed');
2891         END IF;
2892         g_stream_trx_number := NULL;
2893         x_return_status := OKL_API.G_RET_STS_ERROR;
2894         --raise; -- propagate error to caller
2895      WHEN others THEN
2896         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2897                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook_contract_failed');
2898         END IF;
2899         g_stream_trx_number := NULL;
2900         x_return_status := OKL_API.G_RET_STS_ERROR;
2901         --raise; -- propagate error to caller
2902 
2903   END rebook_contract;
2904 
2905 ------------------------------------------------------------------------------
2906 -- PROCEDURE update_mass_rbk_contract
2907 --   Call this process to update selected contracts. This process updates
2908 --   selected_flag and status of contract provided as parameter
2909 -- Calls:
2910 -- Called by:
2911 ------------------------------------------------------------------------------
2912   PROCEDURE update_mass_rbk_contract(
2913                                      p_api_version                  IN  NUMBER,
2914                                      p_init_msg_list                IN  VARCHAR2,
2915                                      x_return_status                OUT NOCOPY VARCHAR2,
2916                                      x_msg_count                    OUT NOCOPY NUMBER,
2917                                      x_msg_data                     OUT NOCOPY VARCHAR2,
2918                                      p_mstv_tbl                     IN  MSTV_TBL_TYPE,
2919                                      x_mstv_tbl                     OUT NOCOPY MSTV_TBL_TYPE
2920                                     ) IS
2921 
2922   l_api_name    VARCHAR2(35)    := 'update_mass_rbk_contract';
2923   l_proc_name   VARCHAR2(35)    := 'UPDATE_MASS_RBK_CONTRACT';
2924   l_api_version NUMBER          := 1.0;
2925 
2926   CURSOR rbk_csr (p_request_name OKL_RBK_SELECTED_CONTRACT.REQUEST_NAME%TYPE,
2927                   p_chr_id       OKC_K_HEADERS_V.ID%TYPE) IS
2928   SELECT id
2929   FROM   okl_rbk_selected_contract
2930   WHERE  khr_id       = p_chr_id
2931   AND    request_name = p_request_name;
2932 
2933   l_mstv_upd_tbl mstv_tbl_type;
2934   x_mstv_upd_tbl mstv_tbl_type;
2935   l_upd_count    NUMBER := 0;
2936 
2937   update_failed EXCEPTION;
2938 
2939   BEGIN
2940     IF (G_DEBUG_ENABLED = 'Y') THEN
2941       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2942     END IF;
2943      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2944             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
2945      END IF;
2946      x_return_status := OKL_API.G_RET_STS_SUCCESS;
2947 
2948      -- call START_ACTIVITY to create savepoint, check compatibility
2949      -- and initialize message list
2950      x_return_status := OKL_API.START_ACTIVITY(
2951                                                p_api_name      => l_api_name,
2952                                                p_pkg_name      => G_PKG_NAME,
2953                                                p_init_msg_list => p_init_msg_list,
2954                                                l_api_version   => l_api_version,
2955                                                p_api_version   => p_api_version,
2956                                                p_api_type      => G_API_TYPE,
2957                                                x_return_status => x_return_status);
2958 
2959      -- check if activity started successfully
2960      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2961        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2962      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
2963        raise OKL_API.G_EXCEPTION_ERROR;
2964      END IF;
2965 
2966      l_upd_count := 1;
2967      FOR i IN 1..p_mstv_tbl.COUNT
2968      LOOP
2969         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2970                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ID     :'||p_mstv_tbl(i).id);
2971           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'KHR_ID :'||p_mstv_tbl(i).khr_id);
2972           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'REQ    :'||p_mstv_tbl(i).request_name);
2973         END IF;
2974 
2975         FOR rbk_rec IN rbk_csr(p_mstv_tbl(i).request_name,
2976                                p_mstv_tbl(i).khr_id)
2977         LOOP
2978            l_mstv_upd_tbl(l_upd_count).id            := rbk_rec.id;
2979            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2980                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ID     :'||l_mstv_upd_tbl(l_upd_count).id);
2981            END IF;
2982            --insert into dd_dummy values (3.1, 'ID: '||l_mstv_upd_tbl(l_upd_count).id);
2983            l_mstv_upd_tbl(l_upd_count).selected_flag := p_mstv_tbl(i).selected_flag;
2984            l_mstv_upd_tbl(l_upd_count).status        := p_mstv_tbl(i).status;
2985            l_upd_count := l_upd_count+ 1;
2986         END LOOP;
2987      END LOOP;
2988 
2989      okl_mst_pvt.update_row(
2990                             p_api_version   => p_api_version,
2991                             p_init_msg_list => p_init_msg_list,
2992                             x_return_status => x_return_status,
2993                             x_msg_count     => x_msg_count,
2994                             x_msg_data      => x_msg_data,
2995                             p_mstv_tbl      => l_mstv_upd_tbl,
2996                             x_mstv_tbl      => x_mstv_upd_tbl
2997                            );
2998 
2999      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3000        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3001      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3002        raise OKL_API.G_EXCEPTION_ERROR;
3003      END IF;
3004 
3005      --insert into dd_dummy values (3.2, 'After update');
3006      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
3007                           x_msg_data    => x_msg_data);
3008 
3009      RETURN;
3010 
3011   EXCEPTION
3012       WHEN update_failed THEN
3013           x_return_status := OKL_API.G_RET_STS_SUCCESS;
3014 
3015       when OKL_API.G_EXCEPTION_ERROR then
3016          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3017                         p_api_name  => l_api_name,
3018                         p_pkg_name  => G_PKG_NAME,
3019                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3020                         x_msg_count => x_msg_count,
3021                         x_msg_data  => x_msg_data,
3022                         p_api_type  => G_API_TYPE);
3023 
3024       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3025          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3026                         p_api_name  => l_api_name,
3027                         p_pkg_name  => G_PKG_NAME,
3028                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3029                         x_msg_count => x_msg_count,
3030                         x_msg_data  => x_msg_data,
3031                         p_api_type  => G_API_TYPE);
3032 
3033       when OTHERS then
3034          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3035                         p_api_name  => l_api_name,
3036                         p_pkg_name  => G_PKG_NAME,
3037                         p_exc_name  => 'OTHERS',
3038                         x_msg_count => x_msg_count,
3039                         x_msg_data  => x_msg_data,
3040                         p_api_type  => G_API_TYPE);
3041   END update_mass_rbk_contract;
3042 
3043 ------------------------------------------------------------------------------
3044 -- PROCEDURE update_trx_asset
3045 --   Call this process to update status (TSU_CODE) of okl_trx_assets_v with
3046 --   p_status.
3047 -- Calls:
3048 -- Called by:
3049 ------------------------------------------------------------------------------
3050   PROCEDURE update_trx_asset(
3051                              x_return_status OUT NOCOPY VARCHAR2,
3052                              x_msg_count     OUT NOCOPY NUMBER,
3053                              x_msg_data      OUT NOCOPY VARCHAR2,
3054                              p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
3055                              p_status        IN  VARCHAR2
3056                             ) IS
3057   --Bug# 3521126 :
3058   /*--modified cursor to change only status of current transaction--
3059   --CURSOR trx_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3060   --SELECT txl.tas_id
3061   --FROM   okl_txl_assets_v txl
3062   --WHERE  txl.dnz_khr_id = p_chr_id
3063   --AND    EXISTS (SELECT 'Y'
3064                  --FROM   okl_trx_assets_v trx
3065                  --WHERE  trx.id       = txl.tas_id
3066                  --AND    trx.tsu_code = 'ENTERED');
3067   ---------------------------------------------------------------*/
3068   CURSOR trx_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3069   SELECT trx.id
3070   FROM   okl_trx_assets   trx,
3071          okl_trx_types_tl ttyp,
3072          okl_txl_assets_b txl
3073   WHERE  trx.id         = txl.tas_id
3074   AND    trx.try_id     = ttyp.id
3075   AND    trx.tas_type   = 'CRB'
3076   AND    trx.tsu_code   = 'ENTERED'
3077   AND    ttyp.name      = 'Rebook'
3078   AND    ttyp.language  = 'US'
3079   AND    txl.tal_type   = 'CRB'
3080   AND    txl.dnz_khr_id = p_chr_id;
3081 
3082   l_thpv_rec   thpv_rec_type;
3083   x_thpv_rec   thpv_rec_type;
3084 
3085   BEGIN
3086 
3087     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3088 
3089     FOR trx_rec IN trx_csr(p_chr_id)
3090     LOOP
3091        l_thpv_rec.id       := trx_rec.id;
3092        l_thpv_rec.tsu_code := p_status;
3093 
3094        okl_trx_assets_pub.update_trx_ass_h_def(
3095                                         p_api_version   => 1.0,
3096                                         p_init_msg_list => OKL_API.G_FALSE,
3097                                         x_return_status => x_return_status,
3098                                         x_msg_count     => x_msg_count,
3099                                         x_msg_data      => x_msg_data,
3100                                         p_thpv_rec      => l_thpv_rec,
3101                                         x_thpv_rec      => x_thpv_rec
3102                                        );
3103 
3104     END LOOP;
3105 
3106   END update_trx_asset;
3107 
3108   -- Bug# 4398936
3109   PROCEDURE  process_securitization_stream(p_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE,
3110                                            p_rbk_trx_id   IN NUMBER,
3111                                            x_return_status OUT NOCOPY VARCHAR2,
3112                                            x_msg_count     OUT NOCOPY NUMBER,
3113                                            x_msg_data      OUT NOCOPY VARCHAR2)
3114   IS
3115 
3116     l_api_name    VARCHAR2(35)    := 'process_securitization_stream';
3117     l_proc_name   VARCHAR2(35)    := 'process_securitization_stream';
3118     l_api_version CONSTANT NUMBER := 1;
3119 
3120   CURSOR l_okl_trbk_txn_csr
3121   IS
3122     SELECT date_transaction_occurred
3123     FROM   okl_trx_contracts
3124     WHERE  id   = p_rbk_trx_id;
3125 
3126   CURSOR l_okl_tcn_type_csr
3127   IS
3128   SELECT trxp.tcn_type,
3129          trxp.qte_id,
3130          trxp.date_transaction_occurred,
3131          qtev.qtp_code
3132   FROM   okl_trx_contracts trxp,
3133          okl_trx_contracts trxc,
3134          okl_trx_quotes_v qtev
3135   WHERE  trxp.id = trxc.source_trx_id
3136   AND    trxc.id = p_rbk_trx_id
3137   AND    trxc.tsu_code <> 'PROCESSED'
3138   AND    qtev.id = trxp.qte_id;
3139 
3140 
3141 
3142     --Bug 6740000 ssdeshpa start
3143     --Changed Stream Type Subclass to 'INVESTOR_DISBURSEMENT'
3144     CURSOR disb_strm_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3145     SELECT strm.id
3146     FROM   okl_streams strm,
3147            okl_strm_type_v TYPE
3148     WHERE  TYPE.id                   = strm.sty_id
3149     AND    TYPE.stream_type_subclass = 'INVESTOR_DISBURSEMENT'
3150     AND    strm.khr_id               = p_chr_id
3151     AND    strm.say_code             = 'CURR';
3152     --Bug 6740000 ssdeshpa End
3153 
3154     CURSOR accu_strm_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3155     SELECT strm.id
3156     FROM   okl_streams strm,
3157            okl_strm_type_v TYPE
3158     WHERE  TYPE.id       = strm.sty_id
3159     AND    TYPE.stream_type_purpose IN (
3160                          'INVESTOR_RENTAL_ACCRUAL',
3161                          'INVESTOR_PRE_TAX_INCOME',
3162                          'INVESTOR_INTEREST_INCOME',
3163                          'INVESTOR_VARIABLE_INTEREST'
3164                         )
3165     AND    strm.khr_id   = p_chr_id
3166     AND    strm.say_code = 'CURR';
3167 
3168     CURSOR l_okl_alt_kle_csr(p_qte_id IN NUMBER)
3169     IS
3170     SELECT kle_id
3171     FROM   okl_txl_quote_lines_v
3172     WHERE  qte_id = p_qte_id
3173     AND    qlt_code = 'AMCFIA';
3174 
3175     --Bug 6740000 ssdeshpa start
3176     --Cursor to get the deal Type for Contract
3177     CURSOR get_deal_type_csr(p_chr_id OKL_K_HEADERS.ID%TYPE)
3178     IS
3179      SELECT DEAL_TYPE
3180      FROM OKL_K_HEADERS
3181      WHERE ID = p_chr_id;
3182 
3183      l_deal_type OKL_K_HEADERS.DEAL_TYPE%TYPE;
3184      --Bug 6740000 ssdeshpa End
3185 
3186     i NUMBER := 0;
3187     l_disb_strm_tbl OKL_STREAMS_PUB.stmv_tbl_type;
3188     x_disb_strm_tbl OKL_STREAMS_PUB.stmv_tbl_type;
3189 
3190     l_accu_strm_tbl OKL_STREAMS_PUB.stmv_tbl_type;
3191     x_accu_strm_tbl OKL_STREAMS_PUB.stmv_tbl_type;
3192 
3193 
3194     lx_value VARCHAR2(1);
3195     lx_inv_agmt_chr_id_tbl Okl_Securitization_Pvt.inv_agmt_chr_id_tbl_type;
3196 
3197     secu_failed EXCEPTION;
3198 
3199     --l_stream_type_subclass         okl_strm_type_b.stream_type_subclass%TYPE DEFAULT NULL;
3200     l_alt_purchase BOOLEAN := FALSE;
3201 
3202     BEGIN
3203       IF (G_DEBUG_ENABLED = 'Y') THEN
3204         G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3205       END IF;
3206 
3207       x_return_status := OKC_API.G_RET_STS_SUCCESS;
3208 
3209       --
3210       -- Check for Securitized Contract
3211       --
3212       FOR l_okl_trbk_txn_rec IN l_okl_trbk_txn_csr
3213       LOOP
3214 
3215       Okl_Securitization_Pvt.check_khr_securitized(
3216                                                    p_api_version         => 1.0,
3217                                                    p_init_msg_list       => OKC_API.G_FALSE,
3218                                                    x_return_status       => x_return_status,
3219                                                    x_msg_count           => x_msg_count,
3220                                                    x_msg_data            => x_msg_data,
3221                                                    p_khr_id              => p_chr_id,
3222                                                    p_effective_date      => l_okl_trbk_txn_rec.date_transaction_occurred,
3223                                                    x_value               => lx_value,
3224                                                    x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl
3225                                                   );
3226 
3227       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3228          RAISE secu_failed;
3229       END IF;
3230 
3231       IF (lx_value = OKL_API.G_TRUE) THEN
3232 	      --
3233 	      -- HISTorize disbursement streams, with subclass = 'INVESTOR_DISBURSEMENT'
3234 	      --
3235 	      FOR disb_strm_rec IN disb_strm_csr (p_chr_id)
3236 	      LOOP
3237 		 i := disb_strm_csr%ROWCOUNT;
3238 		 l_disb_strm_tbl(i).id        := disb_strm_rec.id;
3239 		 l_disb_strm_tbl(i).say_code  := 'HIST';
3240 		 l_disb_strm_tbl(i).active_yn := 'N';
3241      l_disb_strm_tbl(i).date_history  := SYSDATE;
3242 	      END LOOP;
3243 
3244 	      IF (l_disb_strm_tbl.COUNT > 0) THEN
3245 		  okl_streams_pub.update_streams(
3246 						 p_api_version    => 1.0,
3247 						 p_init_msg_list  => OKC_API.G_FALSE,
3248 						 x_return_status  => x_return_status,
3249 						 x_msg_count      => x_msg_count,
3250 						 x_msg_data       => x_msg_data,
3251 						 p_stmv_tbl       => l_disb_strm_tbl,
3252 						 x_stmv_tbl       => x_disb_strm_tbl
3253 					       );
3254 
3255 		   IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3256 		     RAISE secu_failed;
3257 	    	END IF;
3258 	      END IF;
3259 
3260              FOR l_okl_tcn_type_rec IN l_okl_tcn_type_csr
3261    	     LOOP
3262 
3263 		  IF l_okl_tcn_type_rec.tcn_type = 'ALT' THEN
3264 		    IF l_okl_tcn_type_rec.qtp_code IN (
3265 		             'TER_PURCHASE',       -- Termination - With Purchase
3266 		             'TER_ROLL_PURCHASE',  -- Termination - Rollover To New Contract With Purchase
3267 		             'TER_RECOURSE',       -- Termination - Recourse With Purchase
3268 		             'TER_MAN_PURCHASE'    -- Termination - Manual With Purchase
3269 		            )
3270 		    THEN
3271 		       l_alt_purchase := TRUE;
3272 		    ELSE -- Termination without purchase
3273 		      l_alt_purchase := FALSE;
3274 		    END IF;
3275 
3276 	            --Bug 6740000 ssdeshpa Start
3277                     --get the Deal type for Contract
3278                     OPEN get_deal_type_csr(p_chr_id);
3279                     FETCH get_deal_type_csr INTO l_deal_type;
3280                     CLOSE get_deal_type_csr;
3281                     --Bug 6740000 ssdeshpa end
3282 
3283 	            FOR l_okl_alt_kle_rec IN l_okl_alt_kle_csr(l_okl_tcn_type_rec.qte_id)
3284 		    LOOP
3285 
3286                       --Bug 6740000 ssdeshpa Start
3287                           IF(l_deal_type IN('LEASEOP','LEASEDF','LEASEST')) THEN
3288 		              Okl_Securitization_Pvt.modify_pool_contents(
3289 								  p_api_version         => 1.0,
3290 								  p_init_msg_list       => OKC_API.G_FALSE,
3291 								  x_return_status       => x_return_status,
3292 								  x_msg_count           => x_msg_count,
3293 								  x_msg_data            => x_msg_data,
3294 								  p_transaction_reason  => Okl_Securitization_Pvt.G_TRX_REASON_ASSET_TERMINATION,
3295 								  p_khr_id              => p_chr_id,
3296 								  p_kle_id              => l_okl_alt_kle_rec.kle_id,
3297 								  p_transaction_date    => l_okl_tcn_type_rec.date_transaction_occurred,
3298 								  p_effective_date      => l_okl_tcn_type_rec.date_transaction_occurred,
3299                                                                   p_stream_type_subclass => 'RENT'
3300 								 );
3301 			  ELSIF(l_deal_type IN('LOAN', 'LOAN-REVOLVING')) THEN
3302 		              Okl_Securitization_Pvt.modify_pool_contents(
3303 								  p_api_version         => 1.0,
3304 								  p_init_msg_list       => OKC_API.G_FALSE,
3305 								  x_return_status       => x_return_status,
3306 								  x_msg_count           => x_msg_count,
3307 								  x_msg_data            => x_msg_data,
3308 								  p_transaction_reason  => Okl_Securitization_Pvt.G_TRX_REASON_ASSET_TERMINATION,
3309 								  p_khr_id              => p_chr_id,
3310 								  p_kle_id              => l_okl_alt_kle_rec.kle_id,
3311 								  p_transaction_date    => l_okl_tcn_type_rec.date_transaction_occurred,
3312 								  p_effective_date      => l_okl_tcn_type_rec.date_transaction_occurred,
3313                                                                   p_stream_type_subclass => 'LOAN_PAYMENT'
3314 								 );
3315                       END IF;
3316                       --Bug 6740000 ssdeshpa End
3317 		      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3318 			   RAISE secu_failed;
3319 		      END IF;
3320 
3321 		      IF l_alt_purchase THEN
3322 			      Okl_Securitization_Pvt.modify_pool_contents(
3323 									  p_api_version         => 1.0,
3324 									  p_init_msg_list       => OKC_API.G_FALSE,
3325 									  x_return_status       => x_return_status,
3326 									  x_msg_count           => x_msg_count,
3327 									  x_msg_data            => x_msg_data,
3328 									  p_transaction_reason  => Okl_Securitization_Pvt.G_TRX_REASON_ASSET_DISPOSAL,
3329 									  p_khr_id              => p_chr_id,
3330 									  p_kle_id              => l_okl_alt_kle_rec.kle_id,
3331 									  p_transaction_date    => l_okl_tcn_type_rec.date_transaction_occurred,
3332 									  p_effective_date      => l_okl_tcn_type_rec.date_transaction_occurred,
3333 									  p_stream_type_subclass => 'RESIDUAL'
3334 									 );
3335 			      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3336 				 RAISE secu_failed;
3337 			      END IF;
3338                END IF;
3339 
3340 		      END LOOP; -- l_okl_alt_kle_rec
3341 
3342 		  END IF; -- 		  l_okl_tcn_type_rec.tcn_type = 'ALT'
3343 
3344 
3345 
3346 	      END LOOP; -- l_okl_tcn_type_csr
3347 
3348 
3349 
3350    	              --
3351 		      -- Create Pool transaction for Mass Rebook
3352 		      --
3353 		      Okl_Securitization_Pvt.modify_pool_contents(
3354 								  p_api_version         => 1.0,
3355 								  p_init_msg_list       => OKC_API.G_FALSE,
3356 								  x_return_status       => x_return_status,
3357 								  x_msg_count           => x_msg_count,
3358 								  x_msg_data            => x_msg_data,
3359 								  p_transaction_reason  => Okl_Securitization_Pvt.G_TRX_REASON_CONTRACT_REBOOK,
3360 								  p_khr_id              => p_chr_id,
3361 								  p_transaction_date    => l_okl_trbk_txn_rec.date_transaction_occurred,
3362 								  p_effective_date      => l_okl_trbk_txn_rec.date_transaction_occurred
3363 								 );
3364 
3365 		      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3366     			 RAISE secu_failed;
3367 		      END IF;
3368 
3369 -- Bug# 4775555: Start
3370 -- Accrual Streams will now be Historized in OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS
3371 -- This API will create the new accrual streams, link the old and new streams
3372 -- and then Historize the old streams
3373 /*
3374 	      --
3375 	      -- HISTorize accrual streams
3376 	      --
3377 	      FOR accu_strm_rec IN accu_strm_csr (p_chr_id)
3378 	      LOOP
3379 		 i := accu_strm_csr%ROWCOUNT;
3380 		 l_accu_strm_tbl(i).id        := accu_strm_rec.id;
3381 		 l_accu_strm_tbl(i).say_code  := 'HIST';
3382 		 l_accu_strm_tbl(i).active_yn := 'N';
3383 	      END LOOP;
3384 
3385 	      IF (l_accu_strm_tbl.COUNT > 0) THEN
3386 		  okl_streams_pub.update_streams(
3387 						 p_api_version    => 1.0,
3388 						 p_init_msg_list  => OKC_API.G_FALSE,
3389 						 x_return_status  => x_return_status,
3390 						 x_msg_count      => x_msg_count,
3391 						 x_msg_data       => x_msg_data,
3392 						 p_stmv_tbl       => l_accu_strm_tbl,
3393 						 x_stmv_tbl       => x_accu_strm_tbl
3394 					       );
3395 
3396 		IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3397 		   RAISE secu_failed;
3398 		END IF;
3399 	      END IF;
3400 */
3401 -- Bug# 4775555: End
3402 
3403 	      --
3404 	      -- Regenerate disbursement streams
3405 	      --
3406 	      okl_stream_generator_pvt.create_disb_streams(
3407 							   p_api_version         => 1.0,
3408 							   p_init_msg_list       => OKC_API.G_FALSE,
3409 							   x_return_status       => x_return_status,
3410 							   x_msg_count           => x_msg_count,
3411 							   x_msg_data            => x_msg_data,
3412 							   p_contract_id         => p_chr_id
3413 							  );
3414 
3415 	      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3416 		 RAISE secu_failed;
3417 	      END IF;
3418 
3419             -- Bug# 4775555
3420             --
3421             -- Regenerate Present Value Disbursement streams
3422             --
3423             okl_stream_generator_pvt.create_pv_streams(
3424                                        p_api_version         => 1.0,
3425                                        p_init_msg_list       => OKC_API.G_FALSE,
3426                                        x_return_status       => x_return_status,
3427                                        x_msg_count           => x_msg_count,
3428                                        x_msg_data            => x_msg_data,
3429                                        p_contract_id         => p_chr_id
3430                                        );
3431 
3432             IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3433               RAISE secu_failed;
3434             END IF;
3435             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3436                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After regerating Present Value Disbursement streams');
3437             END IF;
3438 
3439 	      --
3440 	      -- Generate Investor accrual streams
3441 	      --
3442 	      OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS(
3443 						 p_api_version    => 1.0,
3444 						 p_init_msg_list  => OKL_API.G_FALSE,
3445 						 x_return_status  => x_return_status,
3446 						 x_msg_count      => x_msg_count,
3447 						 x_msg_data       => x_msg_data,
3448 						 p_khr_id         => p_chr_id
3449 						);
3450 
3451 	      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3452 		 RAISE secu_failed;
3453 	      END IF;
3454 
3455 
3456       END IF;
3457       END LOOP; -- l_okl_trbk_txn_csr
3458       RETURN;
3459 
3460     EXCEPTION
3461         WHEN secu_failed THEN
3462            NULL; -- excception is handled by caller
3463 
3464         WHEN OTHERS THEN
3465            x_return_status := OKC_API.HANDLE_EXCEPTIONS(
3466   			p_api_name  => l_api_name,
3467   			p_pkg_name  => G_PKG_NAME,
3468   			p_exc_name  => 'OTHERS',
3469   			x_msg_count => x_msg_count,
3470   			x_msg_data  => x_msg_data,
3471   			p_api_type  => G_API_TYPE);
3472 
3473     END process_securitization_stream;
3474 -- Bug# 4398936
3475 
3476 -- Bug# 5038395
3477 ------------------------------------------------------------------------------
3478 -- PROCEDURE mass_rebook_activate
3479 -- This procedure performs Approval and Activation for Mass rebook. This will
3480 -- be called from mass_rebook_after_yield that is called by Stream generation
3481 -- process after completing stream generation during mass rebook. This procedure
3482 -- will also be called from Submit button on Contract Booking UI if the user
3483 -- is trying to activate a contract for which Mass rebook is in progress.
3484 -- Calls:
3485 -- Called by:
3486 ------------------------------------------------------------------------------
3487   PROCEDURE mass_rebook_activate(
3488                                     p_api_version        IN  NUMBER,
3489                                     p_init_msg_list      IN  VARCHAR2,
3490                                     x_return_status      OUT NOCOPY VARCHAR2,
3491                                     x_msg_count          OUT NOCOPY NUMBER,
3492                                     x_msg_data           OUT NOCOPY VARCHAR2,
3493                                     p_chr_id             IN  NUMBER
3494                                    ) IS
3495 
3496   l_api_name    VARCHAR2(35)    := 'mass_rebook_activate';
3497   l_proc_name   VARCHAR2(35)    := 'MASS_REBOOK_ACTIVATE';
3498   l_api_version NUMBER          := 1.0;
3499 
3500   CURSOR check_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3501   SELECT DISTINCT
3502          A.REQUEST_NAME,
3503          A.KHR_ID,
3504          A.TRANSACTION_ID,
3505          --Bug# 4107330
3506          A.TRANSACTION_DATE,
3507          B.MULTI_GAAP_YN,  -- MGAAP 7263041
3508          C.REPORTING_PDT_ID  -- MGAAP 7263041
3509   FROM   okl_rbk_selected_contract A,
3510          okl_k_headers B,
3511          okl_products C
3512   WHERE  A.khr_id = p_chr_id
3513   AND    NVL(A.status,'NEW') = 'UNDER REVISION'
3514   AND    A.KHR_ID = B.ID -- MGAAP 7263041
3515   AND    B.PDT_ID = C.ID; -- MGAAP 7263041
3516   --AND    NVL(status,'NEW') <> 'PROCESSED';
3517 
3518 
3519   CURSOR parent_trx_csr (p_trx_id NUMBER) IS
3520   SELECT source_trx_id, source_trx_type
3521   FROM   okl_trx_contracts
3522   WHERE  id        =  p_trx_id
3523   AND    tsu_code <> 'PROCESSED';
3524 
3525   CURSOR parent_tcn_type_csr (p_trx_id NUMBER) IS
3526   select tcn_type
3527   from   okl_trx_contracts
3528   where id = p_trx_id;
3529 
3530   l_rbk_id             okl_rbk_selected_contract.id%TYPE;
3531   l_rbk_khr_id         okl_rbk_selected_contract.khr_id%TYPE;
3532   l_rbk_transaction_id okl_rbk_selected_contract.transaction_id%TYPE;
3533 
3534   -- MGAAP start 7263041
3535   l_multi_gaap_yn      okl_k_headers.multi_gaap_yn%TYPE;
3536   l_reporting_pdt_id   okl_products.reporting_pdt_id%TYPE;
3537   -- MGAAP end 7263041
3538 
3539   --Bug# 4107330
3540   l_rbk_trx_date       okl_rbk_selected_contract.transaction_date%TYPE;
3541   l_request_name       okl_rbk_selected_contract.request_name%TYPE;
3542 
3543   l_parent_tcn_type    okl_trx_contracts.tcn_type%TYPE;
3544   l_mstv_tbl           mstv_tbl_type;
3545   x_mstv_tbl           mstv_tbl_type;
3546 
3547   l_tcnv_rec           tcnv_rec_type;
3548   x_tcnv_rec           tcnv_rec_type;
3549 
3550   l_am_tcnv_rec        tcnv_rec_type;
3551   x_am_tcnv_rec        tcnv_rec_type;
3552 
3553   not_to_process       EXCEPTION;
3554 
3555   -- dedey,Bug#4264314
3556   lx_trx_number OKL_TRX_CONTRACTS.trx_number%TYPE := null; -- MGAAP 7263041
3557   l_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
3558   l_stream_tbl  OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
3559   -- dedey,Bug#4264314
3560 
3561   --Bug# 4775555
3562   l_inv_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
3563   l_inv_stream_tbl  OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
3564   BEGIN
3565     IF (G_DEBUG_ENABLED = 'Y') THEN
3566       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3567     END IF;
3568 
3569      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3570             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
3571      END IF;
3572      x_return_status := OKL_API.G_RET_STS_SUCCESS;
3573 
3574      -- call START_ACTIVITY to create savepoint, check compatibility
3575      -- and initialize message list
3576      x_return_status := OKL_API.START_ACTIVITY(
3577                                                p_api_name      => l_api_name,
3578                                                p_pkg_name      => G_PKG_NAME,
3579                                                p_init_msg_list => p_init_msg_list,
3580                                                l_api_version   => l_api_version,
3581                                                p_api_version   => p_api_version,
3582                                                p_api_type      => G_API_TYPE,
3583                                                x_return_status => x_return_status);
3584 
3585      -- check if activity started successfully
3586      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3587        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3588      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3589        raise OKL_API.G_EXCEPTION_ERROR;
3590      END IF;
3591 
3592      --
3593      -- Check contract for Mass Rebook
3594      --
3595      OPEN check_csr(p_chr_id);
3596      --Bug# 4107330
3597      FETCH check_csr INTO l_request_name,
3598                           l_rbk_khr_id,
3599                           l_rbk_transaction_id,
3600                           l_rbk_trx_date,
3601                           l_multi_gaap_yn, -- MGAAP 7263041
3602                           l_reporting_pdt_id; -- MGAAP 7263041
3603      IF check_csr%NOTFOUND THEN
3604         RAISE not_to_process; -- Not a candidate for mass re-book
3605      END IF;
3606      CLOSE check_csr;
3607 
3608      --insert into dd_dummy values (1, 'Selected for Mass rebook');
3609 
3610      --
3611      -- Process after Yield for this contract
3612      --
3613      --debug_message('Submit for Approval...');
3614      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3615             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Approve Contract...');
3616      END IF;
3617      --Bug# 2566822 : Integration with AME/WF for approval
3618      --okl_contract_book_pub.submit_for_approval(
3619      okl_contract_book_pvt.approve_contract(
3620              p_api_version     => p_api_version,
3621              p_init_msg_list   => p_init_msg_list,
3622              x_return_status   => x_return_status,
3623              x_msg_count       => x_msg_count,
3624              x_msg_data        => x_msg_data,
3625              p_chr_id          => p_chr_id
3626             );
3627 
3628      IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3629        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3630      ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3631        RAISE Okl_Api.G_EXCEPTION_ERROR;
3632      END IF;
3633 
3634     -- dedey,Bug#4264314
3635 
3636      OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
3637      OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
3638        p_api_version     => p_api_version,
3639        p_init_msg_list   => p_init_msg_list,
3640        x_return_status   => x_return_status,
3641        x_msg_count       => x_msg_count,
3642        x_msg_data        => x_msg_data,
3643        p_rbk_khr_id      => p_chr_id,
3644        p_orig_khr_id     => p_chr_id,
3645        p_trx_id          => l_rbk_transaction_id,
3646        p_trx_date        => sysdate, -- 4583578 passing sysdate instead of rebook date
3647        x_accrual_rec     => l_accrual_rec,
3648        x_stream_tbl      => l_stream_tbl);
3649 
3650      IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3651        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3652      ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3653        RAISE Okl_Api.G_EXCEPTION_ERROR;
3654      END IF;
3655 
3656     -- dedey,Bug#4264314
3657 
3658       -- Bug# 4398936
3659       --
3660       -- Securitization stream processing
3661       --
3662       process_securitization_stream(p_chr_id   => p_chr_id,
3663                                     p_rbk_trx_id   => l_rbk_transaction_id,
3664                                     x_return_status => x_return_status,
3665                                     x_msg_count     => x_msg_count,
3666                                     x_msg_data      => x_msg_data);
3667 
3668       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3669         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3670       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3671         raise OKL_API.G_EXCEPTION_ERROR;
3672       END IF;
3673       -- Bug# 4398936
3674 
3675      --insert into dd_dummy values (2, 'Approval Done');
3676      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3677             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Submit for Activation ...');
3678      END IF;
3679 
3680      okl_contract_book_pub.activate_contract(
3681              p_api_version     => p_api_version,
3682              p_init_msg_list   => p_init_msg_list,
3683              x_return_status   => x_return_status,
3684              x_msg_count       => x_msg_count,
3685              x_msg_data        => x_msg_data,
3686              p_chr_id          => p_chr_id
3687             );
3688 
3689      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3690        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3691      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3692        raise OKL_API.G_EXCEPTION_ERROR;
3693      END IF;
3694 
3695      -- R12B Authoring OA Migration
3696      -- Update the status of the Submit Contract task to Complete
3697      OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
3698        p_api_version        => p_api_version,
3699        p_init_msg_list      => p_init_msg_list,
3700        x_return_status      => x_return_status,
3701        x_msg_count          => x_msg_count,
3702        x_msg_data           => x_msg_data,
3703        p_khr_id             => p_chr_id ,
3704        p_prog_short_name    => OKL_BOOK_CONTROLLER_PVT.G_SUBMIT_CONTRACT,
3705        p_progress_status    => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
3706 
3707      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3708        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3709      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3710        raise OKL_API.G_EXCEPTION_ERROR;
3711      END IF;
3712 
3713      --insert into dd_dummy values (3, 'Activation Done');
3714      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3715             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Activation Done');
3716      END IF;
3717 
3718      -- Bug# 4775555: Start
3719      --
3720      -- Create Investor Disbursement Adjustment
3721      --
3722      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3723             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call create_inv_disb_adjustment');
3724      END IF;
3725      OKL_CONTRACT_REBOOK_PVT.create_inv_disb_adjustment(
3726                          p_api_version     => p_api_version,
3727                          p_init_msg_list   => p_init_msg_list,
3728                          x_return_status   => x_return_status,
3729                          x_msg_count       => x_msg_count,
3730                          x_msg_data        => x_msg_data,
3731                          p_orig_khr_id     => p_chr_id
3732                          );
3733      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3734             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call create_inv_disb_adjustment'||x_return_status);
3735      END IF;
3736 
3737      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3738        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3739      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3740        raise OKL_API.G_EXCEPTION_ERROR;
3741      END IF;
3742      -- Bug# 4775555: End
3743 
3744      --Bug# 4107330
3745      -- This call is moved from Okl_Activate_Contract_Pub(OKLPACOB.pls)
3746      -- as the accrual adjustment api requires the Contract
3747      -- status to be 'BOOKED' before accrual adjustments can be
3748      -- generated.
3749 
3750      -- dedey,Bug#4264314
3751 
3752        IF(l_stream_tbl.COUNT>0) THEN
3753         OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
3754           p_api_version    => p_api_version,
3755           p_init_msg_list  => p_init_msg_list,
3756           x_return_status  => x_return_status,
3757           x_msg_count      => x_msg_count,
3758           x_msg_data       => x_msg_data ,
3759           x_trx_number     => lx_trx_number,
3760           p_accrual_rec    => l_accrual_rec,
3761           p_stream_tbl     => l_stream_tbl);
3762 
3763       -- dedey,Bug#4264314
3764 
3765         IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3766           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3767         ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3768           RAISE Okl_Api.G_EXCEPTION_ERROR;
3769         END IF;
3770 
3771       -- dedey,Bug#4264314
3772       END IF;
3773       -- dedey,Bug#4264314
3774 
3775      -- MGAAP start 7263041
3776      IF (l_multi_gaap_yn = 'Y') THEN
3777 
3778        OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; -- MGAAP 7263041
3779 
3780        OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
3781          p_api_version     => p_api_version,
3782          p_init_msg_list   => p_init_msg_list,
3783          x_return_status   => x_return_status,
3784          x_msg_count       => x_msg_count,
3785          x_msg_data        => x_msg_data,
3786          p_rbk_khr_id      => p_chr_id,
3787          p_orig_khr_id     => p_chr_id,
3788          p_trx_id          => l_rbk_transaction_id,
3789          p_trx_date        => sysdate, -- 4583578 passing sysdate instead of rebook date
3790          x_accrual_rec     => l_accrual_rec,
3791          x_stream_tbl      => l_stream_tbl);
3792 
3793        OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
3794 
3795        IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3796          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3797        ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3798          RAISE Okl_Api.G_EXCEPTION_ERROR;
3799        END IF;
3800 
3801        IF(l_stream_tbl.COUNT>0) THEN
3802 
3803         l_accrual_rec.trx_number := lx_trx_number;
3804 
3805         OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
3806           p_api_version    => p_api_version,
3807           p_init_msg_list  => p_init_msg_list,
3808           x_return_status  => x_return_status,
3809           x_msg_count      => x_msg_count,
3810           x_msg_data       => x_msg_data ,
3811           x_trx_number     => lx_trx_number,
3812           p_accrual_rec    => l_accrual_rec,
3813           p_stream_tbl     => l_stream_tbl,
3814           p_representation_type     => 'SECONDARY');
3815 
3816 
3817         IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3818           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3819         ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3820           RAISE Okl_Api.G_EXCEPTION_ERROR;
3821         END IF;
3822 
3823       END IF;
3824 
3825      END IF;
3826      -- MGAAP end 7263041
3827 
3828 
3829      -- Bug# 4775555: Start
3830      --
3831      -- Create Investor Accrual Adjustment
3832      --
3833      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3834             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call calc_inv_acc_adjustment');
3835      END IF;
3836      OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
3837                          p_api_version     => p_api_version,
3838                          p_init_msg_list   => p_init_msg_list,
3839                          x_return_status   => x_return_status,
3840                          x_msg_count       => x_msg_count,
3841                          x_msg_data        => x_msg_data,
3842                          p_orig_khr_id     => p_chr_id,
3843                          p_trx_id          => l_rbk_transaction_id,
3844                          p_trx_date        => sysdate,
3845                          x_inv_accrual_rec => l_inv_accrual_rec,
3846                          x_inv_stream_tbl  => l_inv_stream_tbl
3847                          );
3848 
3849      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3850             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call calc_inv_acc_adjustment'||x_return_status);
3851      END IF;
3852 
3853      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3854        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3855      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3856        raise OKL_API.G_EXCEPTION_ERROR;
3857      END IF;
3858 
3859      lx_trx_number := null; -- MGAAP 7263041
3860      IF (l_inv_stream_tbl.COUNT > 0) THEN
3861        OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
3862           p_api_version    => p_api_version,
3863           p_init_msg_list  => p_init_msg_list,
3864           x_return_status  => x_return_status,
3865           x_msg_count      => x_msg_count,
3866           x_msg_data       => x_msg_data ,
3867           x_trx_number     => lx_trx_number,
3868           p_accrual_rec    => l_inv_accrual_rec,
3869           p_stream_tbl     => l_inv_stream_tbl);
3870 
3871        IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3872          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3873        ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3874          RAISE Okl_Api.G_EXCEPTION_ERROR;
3875        END IF;
3876      END IF;
3877      -- Bug# 4775555: End
3878 
3879      -- MGAAP start 7263041
3880      IF (l_multi_gaap_yn = 'Y') THEN
3881        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3882               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call calc_inv_acc_adjustment for SECONDARY');
3883        END IF;
3884 
3885        OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
3886        OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
3887                            p_api_version     => p_api_version,
3888                            p_init_msg_list   => p_init_msg_list,
3889                            x_return_status   => x_return_status,
3890                            x_msg_count       => x_msg_count,
3891                            x_msg_data        => x_msg_data,
3892                            p_orig_khr_id     => p_chr_id,
3893                            p_trx_id          => l_rbk_transaction_id,
3894                            p_trx_date        => sysdate,
3895                            x_inv_accrual_rec => l_inv_accrual_rec,
3896                            x_inv_stream_tbl  => l_inv_stream_tbl,
3897                            p_product_id      => l_reporting_pdt_id
3898                            );
3899 
3900        OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
3901 
3902        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3903               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call calc_inv_acc_adjustment'||x_return_status);
3904        END IF;
3905 
3906        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3907          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3908        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3909          raise OKL_API.G_EXCEPTION_ERROR;
3910        END IF;
3911 
3912        IF (l_inv_stream_tbl.COUNT > 0) THEN
3913          l_inv_accrual_rec.trx_number := lx_trx_number;
3914          OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
3915             p_api_version    => p_api_version,
3916             p_init_msg_list  => p_init_msg_list,
3917             x_return_status  => x_return_status,
3918             x_msg_count      => x_msg_count,
3919             x_msg_data       => x_msg_data ,
3920             x_trx_number     => lx_trx_number,
3921             p_accrual_rec    => l_inv_accrual_rec,
3922             p_stream_tbl     => l_inv_stream_tbl,
3923             p_representation_type     => 'SECONDARY');
3924 
3925          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3926            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3927          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3928            RAISE Okl_Api.G_EXCEPTION_ERROR;
3929          END IF;
3930        END IF;
3931 
3932      END IF;
3933      -- MGAAP end 7263041
3934 
3935      --
3936      -- Update source transaction to PROCESSED, if any
3937      --
3938      FOR parent_trx_rec IN parent_trx_csr (l_rbk_transaction_id)
3939      LOOP
3940 
3941         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3942                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Source Trx ID: '|| parent_trx_rec.source_trx_id);
3943         END IF;
3944 
3945         IF (parent_trx_rec.source_trx_id IS NOT NULL) THEN
3946 
3947           begin
3948             open parent_tcn_type_csr(parent_trx_rec.source_trx_id);
3949             FETCH parent_tcn_type_csr INTO l_parent_tcn_type;
3950 
3951             IF parent_tcn_type_csr%NOTFOUND THEN
3952               x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3953               CLOSE parent_tcn_type_csr;
3954               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3955             END IF;
3956             CLOSE parent_tcn_type_csr;
3957           end;
3958 
3959          IF (l_parent_tcn_type = 'PPD') THEN
3960           --DEBUG
3961           --
3962           -- Cancel PPD Amount, if any
3963           --
3964            l_am_tcnv_rec.id                      := parent_trx_rec.source_trx_id;
3965            l_am_tcnv_rec.tsu_code                := 'PROCESSED';
3966 
3967            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3968                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'before update_trx_contracts');
3969            END IF;
3970 
3971            Okl_Trx_Contracts_Pub.update_trx_contracts(
3972                                                p_api_version   => l_api_version,
3973                                                p_init_msg_list => OKL_API.G_FALSE,
3974                                                x_return_status => x_return_status,
3975                                                x_msg_count     => x_msg_count,
3976                                                x_msg_data      => x_msg_data,
3977                                                p_tcnv_rec      => l_am_tcnv_rec,
3978                                                x_tcnv_rec      => x_am_tcnv_rec
3979                                               );
3980 
3981            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3982                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_trx_contracts: '||x_return_status);
3983            END IF;
3984 
3985            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3986              raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3987            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3988              raise OKL_API.G_EXCEPTION_ERROR;
3989            END IF;
3990 
3991            okl_api.set_message('OKL','AM','Term trx updated', parent_trx_rec.source_trx_id);
3992 
3993           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3994                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Cancel PPD : '||x_return_status);
3995           END IF;
3996           OKL_CS_PRINCIPAL_PAYDOWN_PUB.cancel_ppd(
3997                                  p_api_version    => 1.0,
3998                                  p_init_msg_list  => OKL_API.G_FALSE,
3999                                  x_return_status  => x_return_status,
4000                                  x_msg_count      => x_msg_count,
4001                                  x_msg_data       => x_msg_data,
4002                                  p_khr_id         => p_chr_id
4003                                );
4004           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4005                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Cancel PPD : '||x_return_status);
4006           END IF;
4007 
4008           okl_api.set_message('OKL','AM','After cancel PPD Amount', x_return_status);
4009 
4010           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4011             raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4012           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4013             raise OKL_API.G_EXCEPTION_ERROR;
4014           END IF;
4015 
4016 
4017           ELSIF (l_parent_tcn_type = 'ALT') THEN
4018           --ELSE
4019            l_am_tcnv_rec.id                      := parent_trx_rec.source_trx_id;
4020            --Bug# 6043327 : R12B SLA impact
4021            --l_am_tcnv_rec.tsu_code                := 'PROCESSED';
4022            l_am_tcnv_rec.tmt_status_code                := 'PROCESSED';
4023            l_am_tcnv_rec.tmt_contract_updated_yn := 'Y';
4024 
4025            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4026                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'before update_trx_contracts');
4027            END IF;
4028 
4029            Okl_Trx_Contracts_Pub.update_trx_contracts(
4030                                                p_api_version   => l_api_version,
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_tcnv_rec      => l_am_tcnv_rec,
4036                                                x_tcnv_rec      => x_am_tcnv_rec
4037                                               );
4038 
4039            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4040                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_trx_contracts: '||x_return_status);
4041            END IF;
4042 
4043            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4044              raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4045            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4046              raise OKL_API.G_EXCEPTION_ERROR;
4047            END IF;
4048 
4049            okl_api.set_message('OKL','AM','Term trx updated', parent_trx_rec.source_trx_id);
4050 
4051            -- Bug 4556370
4052            -- Cancel Termination Quote, if any
4053            --
4054            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4055                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Cancel Termination : '||x_return_status);
4056            END IF;
4057            OKL_AM_INTEGRATION_PVT.cancel_termination_quotes  (
4058                                                     p_api_version    => 1.0,
4059                                                     p_init_msg_list  => OKL_API.G_FALSE,
4060                                                     p_khr_id         => p_chr_id,
4061                                                     p_source_trx_id  => parent_trx_rec.source_trx_id,
4062                                                     p_source         => l_parent_tcn_type, -- 'ALT'
4063                                                     x_return_status  => x_return_status,
4064                                                     x_msg_count      => x_msg_count,
4065                                                     x_msg_data       => x_msg_data
4066                                                    );
4067            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4068                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Cancel Termination : '||x_return_status);
4069            END IF;
4070 
4071            okl_api.set_message('OKL','AM','After cancel term quote', x_return_status);
4072 
4073            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4074              raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4075            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4076              raise OKL_API.G_EXCEPTION_ERROR;
4077            END IF;
4078 
4079          END IF;
4080         END IF;
4081 
4082      END LOOP;
4083 
4084      --
4085      -- Update Transaction and Rebook status to PROCESSED
4086      --
4087 
4088      l_mstv_tbl(1).request_name := l_request_name;
4089      l_mstv_tbl(1).khr_id       := p_chr_id;
4090      l_mstv_tbl(1).status       := 'PROCESSED';
4091 
4092      okl_mass_rebook_pvt.update_mass_rbk_contract(
4093                                                   p_api_version    => l_api_version,
4094                                                   p_init_msg_list  => OKL_API.G_FALSE,
4095                                                   x_return_status  => x_return_status,
4096                                                   x_msg_count      => x_msg_count,
4097                                                   x_msg_data       => x_msg_data,
4098                                                   p_mstv_tbl       => l_mstv_tbl,
4099                                                   x_mstv_tbl       => x_mstv_tbl
4100                                                  );
4101 
4102 
4103      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4104             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_mas_rbk_contract: '||x_return_status);
4105      END IF;
4106 
4107      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4108        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4109      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4110        raise OKL_API.G_EXCEPTION_ERROR;
4111      END IF;
4112      --insert into dd_dummy values (4, 'update mass rebook status');
4113 
4114      l_tcnv_rec.id       := l_rbk_transaction_id;
4115      l_tcnv_rec.tsu_code := 'PROCESSED';
4116 
4117 
4118      Okl_Trx_Contracts_Pub.update_trx_contracts(
4119                                                p_api_version   => l_api_version,
4120                                                p_init_msg_list => OKL_API.G_FALSE,
4121                                                x_return_status => x_return_status,
4122                                                x_msg_count     => x_msg_count,
4123                                                x_msg_data      => x_msg_data,
4124                                                p_tcnv_rec      => l_tcnv_rec,
4125                                                x_tcnv_rec      => x_tcnv_rec
4126                                               );
4127 
4128      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4129             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_trx_contracts : '||x_return_status);
4130      END IF;
4131 
4132      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4133        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4134      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4135        raise OKL_API.G_EXCEPTION_ERROR;
4136      END IF;
4137 
4138      --insert into dd_dummy values (5, 'update trx status');
4139      --
4140      -- Update trx_asset status = 'PROCESSED'
4141      --
4142      update_trx_asset(
4143                       x_return_status => x_return_status,
4144                       x_msg_count     => x_msg_count,
4145                       x_msg_data      => x_msg_data,
4146                       p_chr_id        => p_chr_id,
4147                       p_status        => 'PROCESSED'
4148                      );
4149 
4150      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4151        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4152      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4153        raise OKL_API.G_EXCEPTION_ERROR;
4154      END IF;
4155 
4156      --insert into dd_dummy values (6, 'update trx asset status');
4157 
4158      --DEBUG
4159      --IF G_PPD_TRX_ID IS NOT NULL THEN  (To be checked by the API if for PPD)
4160      BEGIN
4161        --Create AR invoice for principal amount
4162        --Call BPD API to create AR journal entries
4163        OKL_CS_PRINCIPAL_PAYDOWN_PUB.invoice_apply_ppd(
4164                 p_api_version   => l_api_version,
4165                 p_init_msg_list => OKL_API.G_FALSE,
4166                 x_return_status => x_return_status,
4167                 x_msg_count     => x_msg_count,
4168                 x_msg_data      => x_msg_data,
4169                 p_khr_id        => p_chr_id,
4170                 p_trx_id        => l_rbk_transaction_id );
4171 
4172        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4173          x_return_status := OKL_API.G_RET_STS_SUCCESS;
4174        END IF;
4175 
4176        EXCEPTION WHEN OTHERS THEN
4177          null; -- For any errors during journal creation, we just ignore
4178          x_return_status := OKL_API.G_RET_STS_SUCCESS;
4179        END;
4180      --END IF;
4181 
4182      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4183                           x_msg_data    => x_msg_data);
4184 
4185 
4186      --insert into dd_dummy values (7, 'returning after yield');
4187      RETURN;
4188 
4189   EXCEPTION
4190       WHEN not_to_process THEN
4191           x_return_status := OKL_API.G_RET_STS_SUCCESS;
4192 
4193       when OKL_API.G_EXCEPTION_ERROR then
4194          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4195                         p_api_name  => l_api_name,
4196                         p_pkg_name  => G_PKG_NAME,
4197                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4198                         x_msg_count => x_msg_count,
4199                         x_msg_data  => x_msg_data,
4200                         p_api_type  => G_API_TYPE);
4201 
4202       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4203          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4204                         p_api_name  => l_api_name,
4205                         p_pkg_name  => G_PKG_NAME,
4206                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4207                         x_msg_count => x_msg_count,
4208                         x_msg_data  => x_msg_data,
4209                         p_api_type  => G_API_TYPE);
4210 
4211       when OTHERS then
4212          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4213                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error...');
4214          END IF;
4215          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4216                         p_api_name  => l_api_name,
4217                         p_pkg_name  => G_PKG_NAME,
4218                         p_exc_name  => 'OTHERS',
4219                         x_msg_count => x_msg_count,
4220                         x_msg_data  => x_msg_data,
4221                         p_api_type  => G_API_TYPE);
4222 END mass_rebook_activate;
4223 -- Bug# 5038395
4224 
4225 ------------------------------------------------------------------------------
4226 -- PROCEDURE mass_rebook_after_yield
4227 --   Call this process after yeild comes back. It will do rest of the mass
4228 --   rebook process. It first checks eligibility of a contract for Mass Rebook
4229 --   and then process the same.
4230 -- Calls:
4231 -- Called by:
4232 ------------------------------------------------------------------------------
4233   PROCEDURE mass_rebook_after_yield(
4234                                     p_api_version        IN  NUMBER,
4235                                     p_init_msg_list      IN  VARCHAR2,
4236                                     x_return_status      OUT NOCOPY VARCHAR2,
4237                                     x_msg_count          OUT NOCOPY NUMBER,
4238                                     x_msg_data           OUT NOCOPY VARCHAR2,
4239                                     p_chr_id             IN  OKC_K_HEADERS_V.ID%TYPE
4240                                    ) IS
4241 
4242   l_api_name    VARCHAR2(35)    := 'mass_rebook_after_yield';
4243   l_proc_name   VARCHAR2(35)    := 'MASS_REBOOK_AFTER_YIELD';
4244   l_api_version NUMBER          := 1.0;
4245 
4246   CURSOR check_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4247   SELECT DISTINCT
4248          REQUEST_NAME,
4249          KHR_ID,
4250          TRANSACTION_ID,
4251          --Bug# 4107330
4252          TRANSACTION_DATE
4253   FROM   okl_rbk_selected_contract
4254   WHERE  khr_id = p_chr_id
4255   AND    NVL(status,'NEW') = 'UNDER REVISION';
4256   --AND    NVL(status,'NEW') <> 'PROCESSED';
4257 
4258   l_rbk_khr_id         okl_rbk_selected_contract.khr_id%TYPE;
4259   l_rbk_transaction_id okl_rbk_selected_contract.transaction_id%TYPE;
4260   --Bug# 4107330
4261   l_rbk_trx_date       okl_rbk_selected_contract.transaction_date%TYPE;
4262   l_request_name       okl_rbk_selected_contract.request_name%TYPE;
4263 
4264   after_yield_failed   EXCEPTION;
4265   not_to_process       EXCEPTION;
4266 
4267   BEGIN
4268     IF (G_DEBUG_ENABLED = 'Y') THEN
4269       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4270     END IF;
4271 
4272      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4273             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
4274      END IF;
4275      x_return_status := OKL_API.G_RET_STS_SUCCESS;
4276 
4277      -- call START_ACTIVITY to create savepoint, check compatibility
4278      -- and initialize message list
4279      x_return_status := OKL_API.START_ACTIVITY(
4280                                                p_api_name      => l_api_name,
4281                                                p_pkg_name      => G_PKG_NAME,
4282                                                p_init_msg_list => p_init_msg_list,
4283                                                l_api_version   => l_api_version,
4284                                                p_api_version   => p_api_version,
4285                                                p_api_type      => G_API_TYPE,
4286                                                x_return_status => x_return_status);
4287 
4288      -- check if activity started successfully
4289      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4290        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4291      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4292        raise OKL_API.G_EXCEPTION_ERROR;
4293      END IF;
4294 
4295      --
4296      -- Check contract for Mass Rebook
4297      --
4298      OPEN check_csr(p_chr_id);
4299      --Bug# 4107330
4300      FETCH check_csr INTO l_request_name,
4301                           l_rbk_khr_id,
4302                           l_rbk_transaction_id,
4303                           l_rbk_trx_date;
4304      IF check_csr%NOTFOUND THEN
4305         RAISE not_to_process; -- Not a candidate for mass re-book
4306      END IF;
4307      CLOSE check_csr;
4308 
4309      --insert into dd_dummy values (1, 'Selected for Mass rebook');
4310 
4311      -- Bug# 5038395
4312      -- This procedure will handle approval and activation for
4313      -- mass rebook
4314      okl_mass_rebook_pvt.mass_rebook_activate(
4315              p_api_version     => p_api_version,
4316              p_init_msg_list   => p_init_msg_list,
4317              x_return_status   => x_return_status,
4318              x_msg_count       => x_msg_count,
4319              x_msg_data        => x_msg_data,
4320              p_chr_id          => p_chr_id
4321             );
4322 
4323      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4324        raise after_yield_failed;
4325      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4326        raise after_yield_failed;
4327      END IF;
4328 
4329      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4330                           x_msg_data    => x_msg_data);
4331 
4332 
4333      --insert into dd_dummy values (7, 'returning after yield');
4334      RETURN;
4335 
4336   EXCEPTION
4337       WHEN not_to_process THEN
4338           x_return_status := OKL_API.G_RET_STS_SUCCESS;
4339 
4340       WHEN after_yield_failed THEN
4341 
4342           -- Bug# 5038395
4343           -- Update status of Submit Contract task to Error
4344           OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
4345             p_api_version        => p_api_version,
4346             p_init_msg_list      => OKL_API.G_FALSE, --To retain message stack
4347             x_return_status      => x_return_status,
4348             x_msg_count          => x_msg_count,
4349             x_msg_data           => x_msg_data,
4350             p_khr_id             => p_chr_id ,
4351             p_prog_short_name    => OKL_BOOK_CONTROLLER_PVT.G_SUBMIT_CONTRACT ,
4352             p_progress_status    => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
4353 
4354           x_return_status := OKL_API.G_RET_STS_SUCCESS;
4355 
4356       when OKL_API.G_EXCEPTION_ERROR then
4357          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4358                         p_api_name  => l_api_name,
4359                         p_pkg_name  => G_PKG_NAME,
4360                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4361                         x_msg_count => x_msg_count,
4362                         x_msg_data  => x_msg_data,
4363                         p_api_type  => G_API_TYPE);
4364 
4365       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4366          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4367                         p_api_name  => l_api_name,
4368                         p_pkg_name  => G_PKG_NAME,
4369                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4370                         x_msg_count => x_msg_count,
4371                         x_msg_data  => x_msg_data,
4372                         p_api_type  => G_API_TYPE);
4373 
4374       when OTHERS then
4375          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4376                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error...');
4377          END IF;
4378          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4379                         p_api_name  => l_api_name,
4380                         p_pkg_name  => G_PKG_NAME,
4381                         p_exc_name  => 'OTHERS',
4382                         x_msg_count => x_msg_count,
4383                         x_msg_data  => x_msg_data,
4384                         p_api_type  => G_API_TYPE);
4385   END mass_rebook_after_yield;
4386 
4387 ------------------------------------------------------------------------------
4388 -- PROCEDURE cancel_transaction
4389 --   Call this process to CANCEL any pending mass rebook transaction
4390 -- Calls:
4391 -- Called by:
4392 ------------------------------------------------------------------------------
4393   PROCEDURE cancel_transaction(
4394                           x_return_status  OUT NOCOPY VARCHAR2,
4395                           x_msg_count      OUT NOCOPY NUMBER,
4396                           x_msg_data       OUT NOCOPY VARCHAR2,
4397                           p_chr_id         IN  OKC_K_HEADERS_V.ID%TYPE
4398                          ) IS
4399 
4400   l_proc_name VARCHAR2(35) := 'CANCEL_TRANSACTION';
4401   l_api_name  VARCHAR2(35) := 'CANCEL_TRANSACTION';
4402 
4403   CURSOR trx_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4404   SELECT DISTINCT
4405          REQUEST_NAME,
4406          KHR_ID,
4407          TRANSACTION_ID
4408   FROM   okl_rbk_selected_contract
4409   WHERE  khr_id            = p_chr_id
4410   AND    NVL(status,'NEW') <> 'PROCESSED';
4411 
4412   l_mstv_tbl mstv_tbl_type;
4413   l_tcnv_rec tcnv_rec_type;
4414   x_mstv_tbl mstv_tbl_type;
4415   x_tcnv_rec tcnv_rec_type;
4416 
4417   cancel_failed EXCEPTION;
4418 
4419   BEGIN
4420     IF (G_DEBUG_ENABLED = 'Y') THEN
4421       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4422     END IF;
4423 
4424     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4425     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4426           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
4427     END IF;
4428 
4429     FOR trx_rec IN trx_csr (p_chr_id)
4430     LOOP
4431 
4432        --
4433        -- Update Transaction and Rebook status to CANCELLED
4434        --
4435 
4436        l_mstv_tbl(1).request_name := trx_rec.request_name;
4437        l_mstv_tbl(1).khr_id       := p_chr_id;
4438        l_mstv_tbl(1).status       := 'CANCELED';
4439 
4440        okl_mass_rebook_pvt.update_mass_rbk_contract(
4441                                                     p_api_version    => 1.0,
4442                                                     p_init_msg_list  => OKL_API.G_FALSE,
4443                                                     x_return_status  => x_return_status,
4444                                                     x_msg_count      => x_msg_count,
4445                                                     x_msg_data       => x_msg_data,
4446                                                     p_mstv_tbl       => l_mstv_tbl,
4447                                                     x_mstv_tbl       => x_mstv_tbl
4448                                                    );
4449 
4450        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4451           RAISE cancel_failed;
4452        END IF;
4453        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4454                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After mass rebook trx update: '||x_return_status);
4455        END IF;
4456 
4457        l_tcnv_rec.id       := trx_rec.transaction_id;
4458        l_tcnv_rec.tsu_code := 'CANCELED';
4459 
4460        Okl_Trx_Contracts_Pub.update_trx_contracts(
4461                                                   p_api_version   => 1.0,
4462                                                   p_init_msg_list => OKL_API.G_FALSE,
4463                                                   x_return_status => x_return_status,
4464                                                   x_msg_count     => x_msg_count,
4465                                                   x_msg_data      => x_msg_data,
4466                                                   p_tcnv_rec      => l_tcnv_rec,
4467                                                   x_tcnv_rec      => x_tcnv_rec
4468                                                  );
4469 
4470        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4471           RAISE cancel_failed;
4472        END IF;
4473 
4474        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4475                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After trx update: '||x_return_status);
4476        END IF;
4477 
4478     END LOOP;
4479 
4480   EXCEPTION
4481 
4482       when cancel_failed then
4483          x_return_status := OKL_API.G_RET_STS_ERROR;
4484 
4485       when OTHERS then
4486          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4487                         p_api_name  => l_api_name,
4488                         p_pkg_name  => G_PKG_NAME,
4489                         p_exc_name  => 'OTHERS',
4490                         x_msg_count => x_msg_count,
4491                         x_msg_data  => x_msg_data,
4492                         p_api_type  => G_API_TYPE);
4493 
4494   END cancel_transaction;
4495 
4496 ------------------------------------------------------------------------------
4497 -- PROCEDURE process_mass_rebook
4498 --   This proecdure applies Rebook when called from On-line user
4499 -- Calls:
4500 -- Called by:
4501 ------------------------------------------------------------------------------
4502 
4503   PROCEDURE process_mass_rebook(
4504                                 p_api_version        IN  NUMBER,
4505                                 p_init_msg_list      IN  VARCHAR2,
4506                                 x_return_status      OUT NOCOPY VARCHAR2,
4507                                 x_msg_count          OUT NOCOPY NUMBER,
4508                                 x_msg_data           OUT NOCOPY VARCHAR2,
4509                                 p_request_name       IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE
4510                                ) IS
4511   l_api_name    VARCHAR2(35)    := 'process_mass_rebook';
4512   l_proc_name   VARCHAR2(35)    := 'PROCESS_MASS_REBOOK';
4513   l_api_version NUMBER          := 1.0;
4514 
4515   l_set_count      NUMBER       := 0;
4516   l_contract_count NUMBER       := 0;
4517 
4518   l_deprn_method_code VARCHAR2(35) := NULL;
4519   l_in_service_date   DATE         := NULL;
4520   l_life_in_months    NUMBER       := NULL;
4521   l_basic_rate        NUMBER       := NULL;
4522   l_adjusted_rate     NUMBER       := NULL;
4523   l_book_type_code    FA_BOOKS.BOOK_TYPE_CODE%TYPE := NULL;
4524 
4525   l_contract_id       NUMBER;
4526   l_line_count        NUMBER := 0;
4527   l_prev_contract_id  NUMBER;
4528   l_kle_id            NUMBER;
4529 
4530    -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4531   l_object_version_no OKL_K_HEADERS.OBJECT_VERSION_NUMBER%TYPE;
4532    -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4533 
4534   l_kle_tbl           kle_tbl_type;
4535   l_strm_lalevl_tbl   strm_lalevl_tbl_type;
4536 
4537   l_transaction_date  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE;
4538 
4539   CURSOR rbk_set_csr (p_req_name VARCHAR2) IS
4540   SELECT criteria_code,
4541          criteria_value1,
4542          set_value
4543   FROM   okl_mass_rbk_criteria
4544   WHERE  request_name = p_req_name
4545   AND    (set_value IS NOT NULL
4546           OR
4547           criteria_code = 'BOOK_TYPE_CODE'); -- in order to keep Tax Book as selection crietria
4548 
4549  -- Bug#4542290 - smadhava - 26-AUG-2005 - Modified - Start
4550   -- Modified cusor to get the object version number of the OKL_K_HEADERS table
4551   CURSOR rbk_csr (p_req_name VARCHAR2) IS
4552   SELECT
4553          rbk.khr_id,
4554          rbk.contract_number,
4555          rbk.contract_description,
4556          rbk.kle_id,
4557          rbk.transaction_date,
4558          khr.object_version_number
4559   FROM   okl_rbk_selected_contract rbk
4560        , okl_k_headers khr
4561   WHERE
4562          rbk.request_name = p_req_name
4563   AND    rbk.selected_flag = 'Y'
4564   AND    rbk.transaction_id IS NULL
4565   AND    khr.id = rbk.khr_id;
4566  -- Bug#4542290 - smadhava - 26-AUG-2005 - Modified - End
4567 
4568  -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4569  l_pdt_params_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
4570  lp_khrv_rec       OKL_KHR_PVT.khrv_rec_type;
4571  lx_khrv_rec       OKL_KHR_PVT.khrv_rec_type;
4572 
4573  -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4574   BEGIN
4575     IF (G_DEBUG_ENABLED = 'Y') THEN
4576       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4577     END IF;
4578 
4579      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4580             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
4581      END IF;
4582 
4583      -- call START_ACTIVITY to create savepoint, check compatibility
4584      -- and initialize message list
4585      x_return_status := OKL_API.START_ACTIVITY(
4586                                                p_api_name      => l_api_name,
4587                                                p_pkg_name      => G_PKG_NAME,
4588                                                p_init_msg_list => p_init_msg_list,
4589                                                l_api_version   => l_api_version,
4590                                                p_api_version   => p_api_version,
4591                                                p_api_type      => G_API_TYPE,
4592                                                x_return_status => x_return_status);
4593 
4594      -- check if activity started successfully
4595      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4596        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4597      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4598        raise OKL_API.G_EXCEPTION_ERROR;
4599      END IF;
4600 
4601      --
4602      -- Get SET_VALUE for ALl contracts to be processed
4603      --
4604 
4605      l_set_count := 0;
4606      l_deprn_method_code := NULL;
4607      l_in_service_date   := NULL;
4608      l_life_in_months    := NULL;
4609      l_basic_rate        := NULL;
4610      l_adjusted_rate     := NULL;
4611      l_book_type_code    := NULL;
4612 
4613      FOR rbk_set_rec IN rbk_set_csr(p_request_name)
4614      LOOP
4615         l_set_count := l_set_count + 1;
4616         IF (rbk_set_rec.criteria_code = 'DEPRN_METHOD_CODE') THEN
4617             l_deprn_method_code := rbk_set_rec.set_value;
4618         ELSIF (rbk_set_rec.criteria_code = 'DATE_PLACED_IN_SERVICE') THEN
4619             l_in_service_date := rbk_set_rec.set_value;
4620         ELSIF (rbk_set_rec.criteria_code = 'LIFE_IN_MONTHS') THEN
4621             l_life_in_months := rbk_set_rec.set_value;
4622         ELSIF (rbk_set_rec.criteria_code = 'BASIC_RATE') THEN
4623             l_basic_rate := TO_NUMBER(rbk_set_rec.set_value);
4624         ELSIF (rbk_set_rec.criteria_code = 'ADJUSTED_RATE') THEN
4625             l_adjusted_rate := TO_NUMBER(rbk_set_rec.set_value);
4626         ELSIF (rbk_set_rec.criteria_code = 'BOOK_TYPE_CODE') THEN
4627             l_book_type_code := rbk_set_rec.criteria_value1;        -- For selection only, do not Set value
4628         ELSE
4629            okl_api.set_message(
4630                                G_APP_NAME,
4631                                G_INVALID_SET_VALUE,
4632                                'CRIT_CODE',
4633                                rbk_set_rec.criteria_code
4634                               );
4635            x_return_status := OKL_API.G_RET_STS_ERROR;
4636            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4637         END IF;
4638 
4639      END LOOP;
4640 
4641      IF (l_set_count = 0) THEN
4642        okl_api.set_message(
4643                            G_APP_NAME,
4644                            G_NO_SET_VALUE,
4645                            'REQ_NAME',
4646                            P_request_name
4647                           );
4648        x_return_status := OKL_API.G_RET_STS_ERROR;
4649        RAISE OKL_API.G_EXCEPTION_ERROR;
4650      END IF;
4651 
4652      l_contract_count := 0;
4653      l_line_count     := 0;
4654      l_prev_contract_id := G_INIT_NUMBER;
4655      FOR rbk_rec IN rbk_csr(p_request_name)
4656      LOOP
4657 
4658        -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4659        OKL_K_RATE_PARAMS_PVT.get_product(
4660                 p_api_version       => p_api_version,
4661                 p_init_msg_list     => p_init_msg_list,
4662                 x_return_status     => x_return_status,
4663                 x_msg_count         => x_msg_count,
4664                 x_msg_data          => x_msg_data,
4665                 p_khr_id            => rbk_rec.khr_id,
4666                 x_pdt_parameter_rec => l_pdt_params_rec);
4667 
4668        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4669          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4670        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4671          RAISE OKL_API.G_EXCEPTION_ERROR;
4672        END IF;
4673        -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4674 
4675         l_transaction_date := rbk_rec.transaction_date;
4676 
4677         l_contract_count := l_contract_count + 1;
4678         IF (l_prev_contract_id = rbk_rec.khr_id
4679             OR
4680             l_contract_count = 1) THEN               -- Either same contract or first record
4681            l_line_count := l_line_count + 1;
4682            l_kle_tbl(l_line_count).id := rbk_rec.kle_id;
4683            l_contract_id         := rbk_rec.khr_id;
4684            l_prev_contract_id    := rbk_rec.khr_id;
4685 
4686            -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4687            l_object_version_no := rbk_rec.object_version_number;
4688            -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4689         ELSE
4690            -- Call Rebook_Contract
4691            rebook_contract(
4692                         x_return_status      => x_return_status,
4693                         x_msg_count          => x_msg_count,
4694                         x_msg_data           => x_msg_data,
4695                         p_online_yn          => 'Y',
4696                         p_khr_id             => l_contract_id,
4697                         p_kle_tbl            => l_kle_tbl,         -- FA Line ID
4698                         p_line_count         => l_line_count,
4699                         p_request_name       => p_request_name,
4700                         p_book_type_code     => l_book_type_code,
4701                         p_deprn_method_code  => l_deprn_method_code,
4702                         p_in_service_date    => l_in_service_date,
4703                         p_life_in_months     => l_life_in_months,
4704                         p_basic_rate         => l_basic_rate,
4705                         p_adjusted_rate      => l_adjusted_rate,
4706                         p_residual_value     => NULL,              -- Not for On-Line Rebook
4707                         p_strm_lalevl_tbl    => l_strm_lalevl_tbl,  -- Not for On-Line Rebook
4708                         p_transaction_date   => l_transaction_date
4709                        );
4710            IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
4711              raise OKL_API.G_EXCEPTION_ERROR;
4712            END IF;
4713            -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4714            -- Updating the Last interest calculation date to the rebook
4715            -- transaction date if the Interest Calc. Basis=REAMORT and
4716            -- Rev. recognition method=STREAMS
4717            IF ( l_pdt_params_rec.interest_calculation_basis = G_ICB_REAMORT
4718               AND l_pdt_params_rec.revenue_recognition_method = G_RRM_STREAMS )
4719            THEN
4720             lp_khrv_rec.id := rbk_rec.khr_id;
4721              -- get the object version number of the record
4722             lp_khrv_rec.object_version_number := rbk_rec.object_version_number;
4723 
4724              -- Update the last interest calc date field
4725              lp_khrv_rec.date_last_interim_interest_cal := l_transaction_date;
4726              OKL_KHR_PVT.update_row(
4727                        p_api_version     => p_api_version
4728                      , p_init_msg_list   => p_init_msg_list
4729                      , x_return_status   => x_return_status
4730                      , x_msg_count       => x_msg_count
4731                      , x_msg_data        => x_msg_data
4732                      , p_khrv_rec        => lp_khrv_rec
4733                      , x_khrv_rec        => lx_khrv_rec);
4734 
4735              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4736                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4737              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4738                RAISE OKL_API.G_EXCEPTION_ERROR;
4739              END IF;
4740            END IF; -- end of check for ICB and RRM
4741            -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4742 
4743            l_line_count := 1; -- Reset for next contract
4744            l_kle_tbl(l_line_count).id := rbk_rec.kle_id;
4745            l_contract_id      := rbk_rec.khr_id;
4746            l_prev_contract_id := rbk_rec.khr_id;
4747 
4748         END IF;
4749      END LOOP;
4750 
4751      IF (l_contract_count = 0 ) THEN
4752         okl_api.set_message(
4753                             G_APP_NAME,
4754                             G_NO_SEL_CONTRACT,
4755                             'REQ_NAME',
4756                             p_request_name
4757                            );
4758         RAISE OKL_API.G_EXCEPTION_ERROR;
4759      END IF;
4760 
4761      -- Final Call for last contract
4762      rebook_contract(
4763                         x_return_status      => x_return_status,
4764                         x_msg_count          => x_msg_count,
4765                         x_msg_data           => x_msg_data,
4766                         p_online_yn          => 'Y',
4767                         p_khr_id             => l_contract_id,
4768                         p_kle_tbl            => l_kle_tbl,         -- FA Line ID
4769                         p_line_count         => l_line_count,
4770                         p_request_name       => p_request_name,
4771                         P_book_type_code     => l_book_type_code,
4772                         p_deprn_method_code  => l_deprn_method_code,
4773                         p_in_service_date    => l_in_service_date,
4774                         p_life_in_months     => l_life_in_months,
4775                         p_basic_rate         => l_basic_rate,
4776                         p_adjusted_rate      => l_adjusted_rate,
4777                         p_residual_value     => NULL,             -- Not for On-Line Rebook
4778                         p_strm_lalevl_tbl    => l_strm_lalevl_tbl, -- Not for On-Line Rebook
4779                         p_transaction_date   => l_transaction_date
4780                        );
4781      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
4782        raise OKL_API.G_EXCEPTION_ERROR;
4783      END IF;
4784      -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4785      -- Updating the Last interest calculation date to the rebook
4786      -- transaction date if the Interest Calc. Basis=REAMORT and
4787      -- Rev. recognition method=STREAMS
4788      IF ( l_pdt_params_rec.interest_calculation_basis = G_ICB_REAMORT
4789         AND l_pdt_params_rec.revenue_recognition_method = G_RRM_STREAMS )
4790      THEN
4791       lp_khrv_rec.id := l_contract_id;
4792        -- get the object version number of the record
4793        lp_khrv_rec.object_version_number := l_object_version_no;
4794 
4795        -- Update the last interest calc date field
4796        lp_khrv_rec.date_last_interim_interest_cal := l_transaction_date;
4797        OKL_KHR_PVT.update_row(
4798                   p_api_version     => p_api_version
4799                 , p_init_msg_list   => p_init_msg_list
4800                 , x_return_status   => x_return_status
4801                 , x_msg_count       => x_msg_count
4802                 , x_msg_data        => x_msg_data
4803                 , p_khrv_rec        => lp_khrv_rec
4804                 , x_khrv_rec        => lx_khrv_rec);
4805 
4806        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4807          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4808        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4809          RAISE OKL_API.G_EXCEPTION_ERROR;
4810        END IF;
4811      END IF; -- end of check for ICB and RRM
4812      -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4813 
4814     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4815                          x_msg_data    => x_msg_data);
4816 
4817     RETURN;
4818 
4819   EXCEPTION
4820       when OKL_API.G_EXCEPTION_ERROR then
4821          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4822                         p_api_name  => l_api_name,
4823                         p_pkg_name  => G_PKG_NAME,
4824                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4825                         x_msg_count => x_msg_count,
4826                         x_msg_data  => x_msg_data,
4827                         p_api_type  => G_API_TYPE);
4828 
4829       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4830          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4831                         p_api_name  => l_api_name,
4832                         p_pkg_name  => G_PKG_NAME,
4833                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4834                         x_msg_count => x_msg_count,
4835                         x_msg_data  => x_msg_data,
4836                         p_api_type  => G_API_TYPE);
4837 
4838       when OTHERS then
4839          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4840                         p_api_name  => l_api_name,
4841                         p_pkg_name  => G_PKG_NAME,
4842                         p_exc_name  => 'OTHERS',
4843                         x_msg_count => x_msg_count,
4844                         x_msg_data  => x_msg_data,
4845                         p_api_type  => G_API_TYPE);
4846   END process_mass_rebook;
4847 
4848 ------------------------------------------------------------------------------
4849 -- PROCEDURE apply_mass_rebook
4850 --   This proecdure uses to apply mass rebook for contracts. It should be called
4851 --   by those who does not have access to MASS REBOOK UI under OKL
4852 -- Calls:
4853 -- Called by:
4854 ------------------------------------------------------------------------------
4855 
4856   PROCEDURE apply_mass_rebook(
4857                               p_api_version        IN  NUMBER,
4858                               p_init_msg_list      IN  VARCHAR2,
4859                               x_return_status      OUT NOCOPY VARCHAR2,
4860                               x_msg_count          OUT NOCOPY NUMBER,
4861                               x_msg_data           OUT NOCOPY VARCHAR2,
4862                               p_rbk_tbl            IN  rbk_tbl_type,
4863                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
4864                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
4865                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
4866                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
4867                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
4868                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
4869                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type
4870                              ) IS
4871   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
4872   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
4873   l_api_version NUMBER          := 1.0;
4874 
4875   l_line_count       NUMBER;
4876   l_contract_count   NUMBER;
4877   l_contract_id      NUMBER;
4878   l_prev_contract_id NUMBER;
4879 
4880   l_kle_tbl          kle_tbl_type;
4881 
4882   BEGIN
4883     IF (G_DEBUG_ENABLED = 'Y') THEN
4884       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4885     END IF;
4886 
4887      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4888             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
4889      END IF;
4890      -- call START_ACTIVITY to create savepoint, check compatibility
4891      -- and initialize message list
4892      x_return_status := OKL_API.START_ACTIVITY(
4893                                                p_api_name      => l_api_name,
4894                                                p_pkg_name      => G_PKG_NAME,
4895      	                                       p_init_msg_list => p_init_msg_list,
4896                                                l_api_version   => l_api_version,
4897                                                p_api_version   => p_api_version,
4898                                                p_api_type      => G_API_TYPE,
4899                                                x_return_status => x_return_status);
4900 
4901      -- check if activity started successfully
4902      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4903        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4904      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4905        raise OKL_API.G_EXCEPTION_ERROR;
4906      END IF;
4907 
4908      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4909             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Count: '||p_rbk_tbl.COUNT);
4910      END IF;
4911 
4912      IF (p_rbk_tbl.COUNT > 0 ) THEN
4913        l_line_count := 0;
4914        l_contract_count := 0;
4915        l_prev_contract_id := G_INIT_NUMBER;
4916        FOR i IN 1..p_rbk_tbl.COUNT
4917        LOOP
4918           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4919                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract# :'||p_rbk_tbl(i).contract_number);
4920           END IF;
4921           l_contract_count := l_contract_count + 1;
4922           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
4923               OR
4924               l_contract_count = 1) THEN
4925              l_line_count := l_line_count + 1;
4926              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
4927              l_contract_id := p_rbk_tbl(i).khr_id;
4928              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
4929           ELSE
4930              -- Call Rebook_Contract
4931              rebook_contract(
4932                           x_return_status      => x_return_status,
4933                           x_msg_count          => x_msg_count,
4934                           x_msg_data           => x_msg_data,
4935                           p_online_yn          => 'N',
4936                           p_khr_id             => l_contract_id,
4937                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
4938                           p_line_count         => l_line_count,
4939                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
4940                           p_book_type_code     => NULL,
4941                           p_deprn_method_code  => p_deprn_method_code,
4942                           p_in_service_date    => p_in_service_date,
4943                           p_life_in_months     => p_life_in_months,
4944                           p_basic_rate         => p_basic_rate,
4945                           p_adjusted_rate      => p_adjusted_rate,
4946                           p_residual_value     => p_residual_value,
4947                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl
4948                          );
4949              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
4950                raise OKL_API.G_EXCEPTION_ERROR;
4951              END IF;
4952              l_line_count := 1;
4953              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
4954              l_contract_id         := p_rbk_tbl(i).khr_id;
4955           END IF;
4956        END LOOP;
4957 
4958        rebook_contract(
4959                        x_return_status      => x_return_status,
4960                        x_msg_count          => x_msg_count,
4961                        x_msg_data           => x_msg_data,
4962                        p_online_yn          => 'N',
4963                        p_khr_id             => l_contract_id,
4964                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
4965                        p_line_count         => l_line_count,
4966                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
4967                        p_book_type_code     => NULL,
4968                        p_deprn_method_code  => p_deprn_method_code,
4969                        p_in_service_date    => p_in_service_date,
4970                        p_life_in_months     => p_life_in_months,
4971                        p_basic_rate         => p_basic_rate,
4972                        p_adjusted_rate      => p_adjusted_rate,
4973                        p_residual_value     => p_residual_value,
4974                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl
4975                       );
4976 
4977        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4978                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook Contract status: '||x_return_status);
4979        END IF;
4980        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4981           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4982        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4983           raise OKL_API.G_EXCEPTION_ERROR;
4984        END IF;
4985 
4986      ELSE
4987         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4988                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
4989         END IF;
4990         x_return_status := OKL_API.G_RET_STS_ERROR;
4991         RAISE OKL_API.G_EXCEPTION_ERROR;
4992      END IF;
4993 
4994      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4995                           x_msg_data    => x_msg_data);
4996 
4997 
4998      RETURN;
4999 
5000   EXCEPTION
5001       when OKL_API.G_EXCEPTION_ERROR then
5002          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5003                         p_api_name  => l_api_name,
5004                         p_pkg_name  => G_PKG_NAME,
5005                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5006                         x_msg_count => x_msg_count,
5007                         x_msg_data  => x_msg_data,
5008                         p_api_type  => G_API_TYPE);
5009 
5010       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5011          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5012                         p_api_name  => l_api_name,
5013                         p_pkg_name  => G_PKG_NAME,
5014                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5015                         x_msg_count => x_msg_count,
5016                         x_msg_data  => x_msg_data,
5017                         p_api_type  => G_API_TYPE);
5018 
5019       when OTHERS then
5020          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5021                         p_api_name  => l_api_name,
5022                         p_pkg_name  => G_PKG_NAME,
5023                         p_exc_name  => 'OTHERS',
5024                         x_msg_count => x_msg_count,
5025                         x_msg_data  => x_msg_data,
5026                         p_api_type  => G_API_TYPE);
5027   END apply_mass_rebook;
5028 
5029 ------------------------------------------------------------------------------
5030 -- PROCEDURE apply_mass_rebook
5031 --   This proecdure uses to apply mass rebook for contracts. It should be called
5032 --   by those who does not have access to MASS REBOOK UI under OKL.
5033 --   This process is overloaded from previous one to return stream transactio ID
5034 --   to caller program
5035 -- Calls:
5036 -- Called by:
5037 ------------------------------------------------------------------------------
5038 
5039   PROCEDURE apply_mass_rebook(
5040                               p_api_version        IN  NUMBER,
5041                               p_init_msg_list      IN  VARCHAR2,
5042                               x_return_status      OUT NOCOPY VARCHAR2,
5043                               x_msg_count          OUT NOCOPY NUMBER,
5044                               x_msg_data           OUT NOCOPY VARCHAR2,
5045                               p_rbk_tbl            IN  rbk_tbl_type,
5046                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5047                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5048                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5049                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5050                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5051                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5052                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
5053                               x_stream_trx_tbl     OUT NOCOPY strm_trx_tbl_type
5054                              ) IS
5055   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5056   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5057   l_api_version NUMBER          := 1.0;
5058 
5059   l_line_count       NUMBER;
5060   l_contract_count   NUMBER;
5061   l_contract_id      NUMBER;
5062   l_prev_contract_id NUMBER;
5063 
5064   l_kle_tbl          kle_tbl_type;
5065 
5066   BEGIN
5067     IF (G_DEBUG_ENABLED = 'Y') THEN
5068       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5069     END IF;
5070 
5071      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5072             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5073      END IF;
5074      -- call START_ACTIVITY to create savepoint, check compatibility
5075      -- and initialize message list
5076      x_return_status := OKL_API.START_ACTIVITY(
5077                                                p_api_name      => l_api_name,
5078                                                p_pkg_name      => G_PKG_NAME,
5079      	                                       p_init_msg_list => p_init_msg_list,
5080                                                l_api_version   => l_api_version,
5081                                                p_api_version   => p_api_version,
5082                                                p_api_type      => G_API_TYPE,
5083                                                x_return_status => x_return_status);
5084 
5085      -- check if activity started successfully
5086      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5087        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5088      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5089        raise OKL_API.G_EXCEPTION_ERROR;
5090      END IF;
5091 
5092 
5093      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5094             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Count: '||p_rbk_tbl.COUNT);
5095      END IF;
5096 
5097      IF (p_rbk_tbl.COUNT > 0 ) THEN
5098        l_line_count := 0;
5099        l_contract_count := 0;
5100        l_prev_contract_id := G_INIT_NUMBER;
5101        FOR i IN 1..p_rbk_tbl.COUNT
5102        LOOP
5103           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5104                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract# :'||p_rbk_tbl(i).contract_number);
5105           END IF;
5106           l_contract_count := l_contract_count + 1;
5107           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5108               OR
5109               l_contract_count = 1) THEN
5110              l_line_count := l_line_count + 1;
5111              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5112              l_contract_id := p_rbk_tbl(i).khr_id;
5113              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5114           ELSE
5115              -- Call Rebook_Contract
5116              rebook_contract(
5117                           x_return_status      => x_return_status,
5118                           x_msg_count          => x_msg_count,
5119                           x_msg_data           => x_msg_data,
5120                           p_online_yn          => 'N',
5121                           p_khr_id             => l_contract_id,
5122                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5123                           p_line_count         => l_line_count,
5124                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5125                           p_book_type_code     => NULL,
5126                           p_deprn_method_code  => p_deprn_method_code,
5127                           p_in_service_date    => p_in_service_date,
5128                           p_life_in_months     => p_life_in_months,
5129                           p_basic_rate         => p_basic_rate,
5130                           p_adjusted_rate      => p_adjusted_rate,
5131                           p_residual_value     => p_residual_value,
5132                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5133                          );
5134 
5135              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5136                raise OKL_API.G_EXCEPTION_ERROR;
5137              END IF;
5138 
5139              x_stream_trx_tbl(l_contract_count).chr_id     := l_contract_id;
5140              x_stream_trx_tbl(l_contract_count).trx_number := g_stream_trx_number;
5141 
5142              l_line_count := 1;
5143              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5144              l_contract_id         := p_rbk_tbl(i).khr_id;
5145 
5146           END IF;
5147        END LOOP;
5148 
5149        rebook_contract(
5150                        x_return_status      => x_return_status,
5151                        x_msg_count          => x_msg_count,
5152                        x_msg_data           => x_msg_data,
5153                        p_online_yn          => 'N',
5154                        p_khr_id             => l_contract_id,
5155                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5156                        p_line_count         => l_line_count,
5157                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5158                        p_book_type_code     => NULL,
5159                        p_deprn_method_code  => p_deprn_method_code,
5160                        p_in_service_date    => p_in_service_date,
5161                        p_life_in_months     => p_life_in_months,
5162                        p_basic_rate         => p_basic_rate,
5163                        p_adjusted_rate      => p_adjusted_rate,
5164                        p_residual_value     => p_residual_value,
5165                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5166                       );
5167 
5168        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5169                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook Contract status: '||x_return_status);
5170        END IF;
5171        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5172           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5173        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5174           raise OKL_API.G_EXCEPTION_ERROR;
5175        END IF;
5176 
5177        --l_contract_count := l_contract_count + 1;
5178        x_stream_trx_tbl(l_contract_count).chr_id     := l_contract_id;
5179        x_stream_trx_tbl(l_contract_count).trx_number := g_stream_trx_number;
5180 
5181      ELSE
5182         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5183                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
5184         END IF;
5185         x_return_status := OKL_API.G_RET_STS_ERROR;
5186         RAISE OKL_API.G_EXCEPTION_ERROR;
5187      END IF;
5188 
5189      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5190                           x_msg_data    => x_msg_data);
5191 
5192 
5193      RETURN;
5194 
5195   EXCEPTION
5196       when OKL_API.G_EXCEPTION_ERROR then
5197          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5198                         p_api_name  => l_api_name,
5199                         p_pkg_name  => G_PKG_NAME,
5200                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5201                         x_msg_count => x_msg_count,
5202                         x_msg_data  => x_msg_data,
5203                         p_api_type  => G_API_TYPE);
5204 
5205       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5206          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5207                         p_api_name  => l_api_name,
5208                         p_pkg_name  => G_PKG_NAME,
5209                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5210                         x_msg_count => x_msg_count,
5211                         x_msg_data  => x_msg_data,
5212                         p_api_type  => G_API_TYPE);
5213 
5214       when OTHERS then
5215          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5216                         p_api_name  => l_api_name,
5217                         p_pkg_name  => G_PKG_NAME,
5218                         p_exc_name  => 'OTHERS',
5219                         x_msg_count => x_msg_count,
5220                         x_msg_data  => x_msg_data,
5221                         p_api_type  => G_API_TYPE);
5222   END apply_mass_rebook;
5223 
5224 ------------------------------------------------------------------------------
5225 -- PROCEDURE apply_mass_rebook
5226 --   This proecdure uses to apply mass rebook for contracts. It should be called
5227 --   by those who does not have access to MASS REBOOK UI under OKL.
5228 --   This process is overloaded from previous one to return stream transactio ID
5229 --   to caller program
5230 --
5231 --   Adding p_transaction_date parameter, if not provided, system
5232 --   will pass SYSDATE to downstream processes
5233 -- Calls:
5234 -- Called by:
5235 ------------------------------------------------------------------------------
5236 
5237   PROCEDURE apply_mass_rebook(
5238                               p_api_version        IN  NUMBER,
5239                               p_init_msg_list      IN  VARCHAR2,
5240                               x_return_status      OUT NOCOPY VARCHAR2,
5241                               x_msg_count          OUT NOCOPY NUMBER,
5242                               x_msg_data           OUT NOCOPY VARCHAR2,
5243                               p_rbk_tbl            IN  rbk_tbl_type,
5244                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5245                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5246                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5247                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5248                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5249                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5250                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
5251                               p_transaction_date   IN  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE,
5252                               x_stream_trx_tbl     OUT NOCOPY strm_trx_tbl_type
5253                              ) IS
5254   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5255   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5256   l_api_version NUMBER          := 1.0;
5257 
5258   l_line_count       NUMBER;
5259   l_contract_count   NUMBER;
5260   l_contract_id      NUMBER;
5261   l_prev_contract_id NUMBER;
5262 
5263   l_kle_tbl          kle_tbl_type;
5264 
5265   BEGIN
5266     IF (G_DEBUG_ENABLED = 'Y') THEN
5267       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5268     END IF;
5269 
5270      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5271             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5272      END IF;
5273      -- call START_ACTIVITY to create savepoint, check compatibility
5274      -- and initialize message list
5275      x_return_status := OKL_API.START_ACTIVITY(
5276                                                p_api_name      => l_api_name,
5277                                                p_pkg_name      => G_PKG_NAME,
5278      	                                       p_init_msg_list => p_init_msg_list,
5279                                                l_api_version   => l_api_version,
5280                                                p_api_version   => p_api_version,
5281                                                p_api_type      => G_API_TYPE,
5282                                                x_return_status => x_return_status);
5283 
5284      -- check if activity started successfully
5285      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5286        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5287      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5288        raise OKL_API.G_EXCEPTION_ERROR;
5289      END IF;
5290 
5291 
5292      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5293             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Count: '||p_rbk_tbl.COUNT);
5294      END IF;
5295 
5296      IF (p_rbk_tbl.COUNT > 0 ) THEN
5297        l_line_count := 0;
5298        l_contract_count := 0;
5299        l_prev_contract_id := G_INIT_NUMBER;
5300        FOR i IN 1..p_rbk_tbl.COUNT
5301        LOOP
5302           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5303                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract# :'||p_rbk_tbl(i).contract_number);
5304           END IF;
5305           l_contract_count := l_contract_count + 1;
5306           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5307               OR
5308               l_contract_count = 1) THEN
5309              l_line_count := l_line_count + 1;
5310              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5311              l_contract_id := p_rbk_tbl(i).khr_id;
5312              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5313           ELSE
5314              -- Call Rebook_Contract
5315              rebook_contract(
5316                           x_return_status      => x_return_status,
5317                           x_msg_count          => x_msg_count,
5318                           x_msg_data           => x_msg_data,
5319                           p_online_yn          => 'N',
5320                           p_khr_id             => l_contract_id,
5321                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5322                           p_line_count         => l_line_count,
5323                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5324                           p_book_type_code     => NULL,
5325                           p_deprn_method_code  => p_deprn_method_code,
5326                           p_in_service_date    => p_in_service_date,
5327                           p_life_in_months     => p_life_in_months,
5328                           p_basic_rate         => p_basic_rate,
5329                           p_adjusted_rate      => p_adjusted_rate,
5330                           p_residual_value     => p_residual_value,
5331                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl,
5332                           p_transaction_date   => p_transaction_date
5333                          );
5334 
5335              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5336                raise OKL_API.G_EXCEPTION_ERROR;
5337              END IF;
5338 
5339              x_stream_trx_tbl(l_contract_count).chr_id     := l_contract_id;
5340              x_stream_trx_tbl(l_contract_count).trx_number := g_stream_trx_number;
5341 
5342              l_line_count := 1;
5343              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5344              l_contract_id         := p_rbk_tbl(i).khr_id;
5345 
5346           END IF;
5347        END LOOP;
5348 
5349        rebook_contract(
5350                        x_return_status      => x_return_status,
5351                        x_msg_count          => x_msg_count,
5352                        x_msg_data           => x_msg_data,
5353                        p_online_yn          => 'N',
5354                        p_khr_id             => l_contract_id,
5355                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5356                        p_line_count         => l_line_count,
5357                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5358                        p_book_type_code     => NULL,
5359                        p_deprn_method_code  => p_deprn_method_code,
5360                        p_in_service_date    => p_in_service_date,
5361                        p_life_in_months     => p_life_in_months,
5362                        p_basic_rate         => p_basic_rate,
5363                        p_adjusted_rate      => p_adjusted_rate,
5364                        p_residual_value     => p_residual_value,
5365                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl,
5366                        p_transaction_date   => p_transaction_date
5367                       );
5368 
5369        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5370                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook Contract status: '||x_return_status);
5371        END IF;
5372        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5373           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5374        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5375           raise OKL_API.G_EXCEPTION_ERROR;
5376        END IF;
5377 
5378        --l_contract_count := l_contract_count + 1;
5379        x_stream_trx_tbl(l_contract_count).chr_id     := l_contract_id;
5380        x_stream_trx_tbl(l_contract_count).trx_number := g_stream_trx_number;
5381 
5382      ELSE
5383         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5384                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
5385         END IF;
5386         x_return_status := OKL_API.G_RET_STS_ERROR;
5387         RAISE OKL_API.G_EXCEPTION_ERROR;
5388      END IF;
5389 
5390      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5391                           x_msg_data    => x_msg_data);
5392 
5393 
5394      RETURN;
5395 
5396   EXCEPTION
5397       when OKL_API.G_EXCEPTION_ERROR then
5398          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5399                         p_api_name  => l_api_name,
5400                         p_pkg_name  => G_PKG_NAME,
5401                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5402                         x_msg_count => x_msg_count,
5403                         x_msg_data  => x_msg_data,
5404                         p_api_type  => G_API_TYPE);
5405 
5406       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5407          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5408                         p_api_name  => l_api_name,
5409                         p_pkg_name  => G_PKG_NAME,
5410                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5411                         x_msg_count => x_msg_count,
5412                         x_msg_data  => x_msg_data,
5413                         p_api_type  => G_API_TYPE);
5414 
5415       when OTHERS then
5416          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5417                         p_api_name  => l_api_name,
5418                         p_pkg_name  => G_PKG_NAME,
5419                         p_exc_name  => 'OTHERS',
5420                         x_msg_count => x_msg_count,
5421                         x_msg_data  => x_msg_data,
5422                         p_api_type  => G_API_TYPE);
5423   END apply_mass_rebook;
5424 
5425 ------------------------------------------------------------------------------
5426 -- PROCEDURE apply_mass_rebook
5427 --   This proecdure uses to apply mass rebook for contracts.
5428 --   This has been overloaded for following specific purpose:
5429 --   1. To get termination transaction ID (p_source_trx_id)
5430 --   2. Use this ID to update transaction after successful completion of Mass rebook
5431 --   3. To accept source transaction type (p_source_trx_type)
5432 --   4. Return Mass rebook transaction id to caller (x_mass_rebook_trx_id)
5433 -- Calls:
5434 -- Called by:
5435 ------------------------------------------------------------------------------
5436   PROCEDURE apply_mass_rebook(
5437                               p_api_version        IN  NUMBER,
5438                               p_init_msg_list      IN  VARCHAR2,
5439                               x_return_status      OUT NOCOPY VARCHAR2,
5440                               x_msg_count          OUT NOCOPY NUMBER,
5441                               x_msg_data           OUT NOCOPY VARCHAR2,
5442                               p_rbk_tbl            IN  rbk_tbl_type,
5443                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5444                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5445                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5446                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5447                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5448                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5449                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
5450                               p_source_trx_id      IN  OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE,
5451                               p_source_trx_type    IN  OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE,
5452                               x_mass_rebook_trx_id OUT NOCOPY OKL_TRX_CONTRACTS.ID%TYPE
5453                              ) IS
5454 
5455   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5456   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5457   l_api_version NUMBER          := 1.0;
5458 
5459   l_line_count       NUMBER;
5460   l_contract_count   NUMBER;
5461   l_contract_id      NUMBER;
5462   l_prev_contract_id NUMBER;
5463 
5464   l_kle_tbl          kle_tbl_type;
5465 
5466   l_tcnv_rec tcnv_rec_type;
5467   x_tcnv_rec tcnv_rec_type;
5468 
5469   BEGIN
5470     IF (G_DEBUG_ENABLED = 'Y') THEN
5471       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5472     END IF;
5473 
5474      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5475             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5476      END IF;
5477      -- call START_ACTIVITY to create savepoint, check compatibility
5478      -- and initialize message list
5479      x_return_status := OKL_API.START_ACTIVITY(
5480                                                p_api_name      => l_api_name,
5481                                                p_pkg_name      => G_PKG_NAME,
5482      	                                       p_init_msg_list => p_init_msg_list,
5483                                                l_api_version   => l_api_version,
5484                                                p_api_version   => p_api_version,
5485                                                p_api_type      => G_API_TYPE,
5486                                                x_return_status => x_return_status);
5487 
5488      -- check if activity started successfully
5489      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5490        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5491      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5492        raise OKL_API.G_EXCEPTION_ERROR;
5493      END IF;
5494 
5495      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5496             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->Count: '||p_rbk_tbl.COUNT);
5497      END IF;
5498 
5499      IF (p_rbk_tbl.COUNT > 0 ) THEN
5500        l_line_count := 0;
5501        l_contract_count := 0;
5502        l_prev_contract_id := G_INIT_NUMBER;
5503        FOR i IN 1..p_rbk_tbl.COUNT
5504        LOOP
5505           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5506                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->Contract# :'||p_rbk_tbl(i).contract_number);
5507           END IF;
5508           l_contract_count := l_contract_count + 1;
5509           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5510               OR
5511               l_contract_count = 1) THEN
5512              l_line_count := l_line_count + 1;
5513              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5514              l_contract_id := p_rbk_tbl(i).khr_id;
5515              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5516           ELSE
5517              --
5518              -- Restart termination process
5519              -- cancel any ongoing transaction, if any
5520              --
5521              cancel_transaction(
5522                                 x_return_status  => x_return_status,
5523                                 x_msg_count      => x_msg_count,
5524                                 x_msg_data       => x_msg_data,
5525                                 p_chr_id         => l_contract_id
5526                                );
5527 
5528              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5529                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
5530              END IF;
5531              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5532                raise OKL_API.G_EXCEPTION_ERROR;
5533              END IF;
5534 
5535              G_TERMINATION_TRX_ID   := p_source_trx_id;
5536              G_TERMINATION_TRX_TYPE := p_source_trx_type;
5537              G_MASS_RBK_TRX_ID      := NULL;
5538 
5539              okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
5540 
5541              -- Call Rebook_Contract
5542              rebook_contract(
5543                           x_return_status      => x_return_status,
5544                           x_msg_count          => x_msg_count,
5545                           x_msg_data           => x_msg_data,
5546                           p_online_yn          => 'N',
5547                           p_khr_id             => l_contract_id,
5548                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5549                           p_line_count         => l_line_count,
5550                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5551                           p_book_type_code     => NULL,
5552                           p_deprn_method_code  => p_deprn_method_code,
5553                           p_in_service_date    => p_in_service_date,
5554                           p_life_in_months     => p_life_in_months,
5555                           p_basic_rate         => p_basic_rate,
5556                           p_adjusted_rate      => p_adjusted_rate,
5557                           p_residual_value     => p_residual_value,
5558                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5559                          );
5560              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5561                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After rebook_contract: '||x_return_status);
5562              END IF;
5563              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5564                raise OKL_API.G_EXCEPTION_ERROR;
5565              END IF;
5566 
5567              x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
5568 
5569              l_line_count := 1;
5570              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5571              l_contract_id         := p_rbk_tbl(i).khr_id;
5572           END IF;
5573        END LOOP;
5574 
5575        --
5576        -- Restart termination process
5577        -- cancel any ongoing transaction, if any
5578        --
5579        cancel_transaction(
5580                           x_return_status  => x_return_status,
5581                           x_msg_count      => x_msg_count,
5582                           x_msg_data       => x_msg_data,
5583                           p_chr_id         => l_contract_id
5584                          );
5585 
5586        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5587                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
5588        END IF;
5589        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5590          raise OKL_API.G_EXCEPTION_ERROR;
5591        END IF;
5592 
5593 
5594        G_TERMINATION_TRX_ID   := p_source_trx_id;
5595        G_TERMINATION_TRX_TYPE := p_source_trx_type;
5596        G_MASS_RBK_TRX_ID      := NULL;
5597 
5598        okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
5599 
5600        rebook_contract(
5601                        x_return_status      => x_return_status,
5602                        x_msg_count          => x_msg_count,
5603                        x_msg_data           => x_msg_data,
5604                        p_online_yn          => 'N',
5605                        p_khr_id             => l_contract_id,
5606                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5607                        p_line_count         => l_line_count,
5608                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5609                        p_book_type_code     => NULL,
5610                        p_deprn_method_code  => p_deprn_method_code,
5611                        p_in_service_date    => p_in_service_date,
5612                        p_life_in_months     => p_life_in_months,
5613                        p_basic_rate         => p_basic_rate,
5614                        p_adjusted_rate      => p_adjusted_rate,
5615                        p_residual_value     => p_residual_value,
5616                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5617                       );
5618 
5619        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5620                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->rebook Contract status: '||x_return_status);
5621        END IF;
5622        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5623           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5624        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5625           raise OKL_API.G_EXCEPTION_ERROR;
5626        END IF;
5627 
5628        x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
5629 
5630      ELSE
5631         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5632                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
5633         END IF;
5634         x_return_status := OKL_API.G_RET_STS_ERROR;
5635         RAISE OKL_API.G_EXCEPTION_ERROR;
5636      END IF;
5637 
5638      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5639                           x_msg_data    => x_msg_data);
5640 
5641 
5642      RETURN;
5643 
5644   EXCEPTION
5645       when OKL_API.G_EXCEPTION_ERROR then
5646          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5647                         p_api_name  => l_api_name,
5648                         p_pkg_name  => G_PKG_NAME,
5649                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5650                         x_msg_count => x_msg_count,
5651                         x_msg_data  => x_msg_data,
5652                         p_api_type  => G_API_TYPE);
5653 
5654       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5655          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5656                         p_api_name  => l_api_name,
5657                         p_pkg_name  => G_PKG_NAME,
5658                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5659                         x_msg_count => x_msg_count,
5660                         x_msg_data  => x_msg_data,
5661                         p_api_type  => G_API_TYPE);
5662 
5663       when OTHERS then
5664          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5665                         p_api_name  => l_api_name,
5666                         p_pkg_name  => G_PKG_NAME,
5667                         p_exc_name  => 'OTHERS',
5668                         x_msg_count => x_msg_count,
5669                         x_msg_data  => x_msg_data,
5670                         p_api_type  => G_API_TYPE);
5671   END apply_mass_rebook;
5672 
5673 ------------------------------------------------------------------------------
5674 -- PROCEDURE apply_mass_rebook
5675 --   This proecdure uses to apply mass rebook for contracts.
5676 --   This has been overloaded for following specific purpose:
5677 --   1. To accept transaction date from calling process, This date is going to
5678 --      be used for accounting too.
5679 -- Calls:
5680 -- Called by:
5681 ------------------------------------------------------------------------------
5682   PROCEDURE apply_mass_rebook(
5683                               p_api_version        IN  NUMBER,
5684                               p_init_msg_list      IN  VARCHAR2,
5685                               x_return_status      OUT NOCOPY VARCHAR2,
5686                               x_msg_count          OUT NOCOPY NUMBER,
5687                               x_msg_data           OUT NOCOPY VARCHAR2,
5688                               p_rbk_tbl            IN  rbk_tbl_type,
5689                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5690                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5691                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5692                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5693                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5694                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5695                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
5696                               p_source_trx_id      IN  OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE,
5697                               p_source_trx_type    IN  OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE,
5698                               p_transaction_date   IN  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE,
5699                               x_mass_rebook_trx_id OUT NOCOPY OKL_TRX_CONTRACTS.ID%TYPE
5700                              ) IS
5701 
5702   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5703   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5704   l_api_version NUMBER          := 1.0;
5705 
5706   l_line_count       NUMBER;
5707   l_contract_count   NUMBER;
5708   l_contract_id      NUMBER;
5709   l_prev_contract_id NUMBER;
5710 
5711   l_kle_tbl          kle_tbl_type;
5712 
5713   l_tcnv_rec tcnv_rec_type;
5714   x_tcnv_rec tcnv_rec_type;
5715 
5716   BEGIN
5717     IF (G_DEBUG_ENABLED = 'Y') THEN
5718       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5719     END IF;
5720 
5721      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5722             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5723      END IF;
5724      -- call START_ACTIVITY to create savepoint, check compatibility
5725      -- and initialize message list
5726      x_return_status := OKL_API.START_ACTIVITY(
5727                                                p_api_name      => l_api_name,
5728                                                p_pkg_name      => G_PKG_NAME,
5729      	                                       p_init_msg_list => p_init_msg_list,
5730                                                l_api_version   => l_api_version,
5731                                                p_api_version   => p_api_version,
5732                                                p_api_type      => G_API_TYPE,
5733                                                x_return_status => x_return_status);
5734 
5735      -- check if activity started successfully
5736      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5737        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5738      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5739        raise OKL_API.G_EXCEPTION_ERROR;
5740      END IF;
5741 
5742      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5743             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->Count: '||p_rbk_tbl.COUNT);
5744      END IF;
5745 
5746      IF (p_rbk_tbl.COUNT > 0 ) THEN
5747        l_line_count := 0;
5748        l_contract_count := 0;
5749        l_prev_contract_id := G_INIT_NUMBER;
5750        FOR i IN 1..p_rbk_tbl.COUNT
5751        LOOP
5752           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5753                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->Contract# :'||p_rbk_tbl(i).contract_number);
5754           END IF;
5755           l_contract_count := l_contract_count + 1;
5756           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5757               OR
5758               l_contract_count = 1) THEN
5759              l_line_count := l_line_count + 1;
5760              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5761              l_contract_id := p_rbk_tbl(i).khr_id;
5762              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5763           ELSE
5764              --
5765              -- Restart termination process
5766              -- cancel any ongoing transaction, if any
5767              --
5768              cancel_transaction(
5769                                 x_return_status  => x_return_status,
5770                                 x_msg_count      => x_msg_count,
5771                                 x_msg_data       => x_msg_data,
5772                                 p_chr_id         => l_contract_id
5773                                );
5774 
5775              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5776                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
5777              END IF;
5778              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5779                raise OKL_API.G_EXCEPTION_ERROR;
5780              END IF;
5781 
5782              G_TERMINATION_TRX_ID   := p_source_trx_id;
5783              G_TERMINATION_TRX_TYPE := p_source_trx_type;
5784              G_MASS_RBK_TRX_ID      := NULL;
5785 
5786              okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
5787 
5788              -- Call Rebook_Contract
5789              rebook_contract(
5790                           x_return_status      => x_return_status,
5791                           x_msg_count          => x_msg_count,
5792                           x_msg_data           => x_msg_data,
5793                           p_online_yn          => 'N',
5794                           p_khr_id             => l_contract_id,
5795                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5796                           p_line_count         => l_line_count,
5797                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5798                           p_book_type_code     => NULL,
5799                           p_deprn_method_code  => p_deprn_method_code,
5800                           p_in_service_date    => p_in_service_date,
5801                           p_life_in_months     => p_life_in_months,
5802                           p_basic_rate         => p_basic_rate,
5803                           p_adjusted_rate      => p_adjusted_rate,
5804                           p_residual_value     => p_residual_value,
5805                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl,
5806                           p_transaction_date   => p_transaction_date
5807                          );
5808              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5809                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After rebook_contract: '||x_return_status);
5810              END IF;
5811              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5812                raise OKL_API.G_EXCEPTION_ERROR;
5813              END IF;
5814 
5815              x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
5816 
5817              l_line_count := 1;
5818              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5819              l_contract_id         := p_rbk_tbl(i).khr_id;
5820           END IF;
5821        END LOOP;
5822 
5823        --
5824        -- Restart termination process
5825        -- cancel any ongoing transaction, if any
5826        --
5827        cancel_transaction(
5828                           x_return_status  => x_return_status,
5829                           x_msg_count      => x_msg_count,
5830                           x_msg_data       => x_msg_data,
5831                           p_chr_id         => l_contract_id
5832                          );
5833 
5834        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5835                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
5836        END IF;
5837        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5838          raise OKL_API.G_EXCEPTION_ERROR;
5839        END IF;
5840 
5841 
5842        G_TERMINATION_TRX_ID   := p_source_trx_id;
5843        G_TERMINATION_TRX_TYPE := p_source_trx_type;
5844        G_MASS_RBK_TRX_ID      := NULL;
5845 
5846        okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
5847 
5848        rebook_contract(
5849                        x_return_status      => x_return_status,
5850                        x_msg_count          => x_msg_count,
5851                        x_msg_data           => x_msg_data,
5852                        p_online_yn          => 'N',
5853                        p_khr_id             => l_contract_id,
5854                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5855                        p_line_count         => l_line_count,
5856                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5857                        p_book_type_code     => NULL,
5858                        p_deprn_method_code  => p_deprn_method_code,
5859                        p_in_service_date    => p_in_service_date,
5860                        p_life_in_months     => p_life_in_months,
5861                        p_basic_rate         => p_basic_rate,
5862                        p_adjusted_rate      => p_adjusted_rate,
5863                        p_residual_value     => p_residual_value,
5864                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl,
5865                        p_transaction_date   => p_transaction_date
5866                       );
5867 
5868        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5869                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->rebook Contract status: '||x_return_status);
5870        END IF;
5871        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5872           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5873        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5874           raise OKL_API.G_EXCEPTION_ERROR;
5875        END IF;
5876 
5877        x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
5878 
5879      ELSE
5880         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5881                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
5882         END IF;
5883         x_return_status := OKL_API.G_RET_STS_ERROR;
5884         RAISE OKL_API.G_EXCEPTION_ERROR;
5885      END IF;
5886 
5887      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5888                           x_msg_data    => x_msg_data);
5889 
5890 
5891      RETURN;
5892 
5893   EXCEPTION
5894       when OKL_API.G_EXCEPTION_ERROR then
5895          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5896                         p_api_name  => l_api_name,
5897                         p_pkg_name  => G_PKG_NAME,
5898                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5899                         x_msg_count => x_msg_count,
5900                         x_msg_data  => x_msg_data,
5901                         p_api_type  => G_API_TYPE);
5902 
5903       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5904          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5905                         p_api_name  => l_api_name,
5906                         p_pkg_name  => G_PKG_NAME,
5907                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5908                         x_msg_count => x_msg_count,
5909                         x_msg_data  => x_msg_data,
5910                         p_api_type  => G_API_TYPE);
5911 
5912       when OTHERS then
5913          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5914                         p_api_name  => l_api_name,
5915                         p_pkg_name  => G_PKG_NAME,
5916                         p_exc_name  => 'OTHERS',
5917                         x_msg_count => x_msg_count,
5918                         x_msg_data  => x_msg_data,
5919                         p_api_type  => G_API_TYPE);
5920   END apply_mass_rebook;
5921 
5922 ------------------------------------------------------------------------------
5923 -- PROCEDURE apply_mass_rebook
5924 --   This proecdure uses to apply mass rebook for contracts.
5925 --   This has been overloaded for following specific purpose:
5926 --   1. To accept prescheduled payment amount.
5927 -- Calls:
5928 -- Called by:
5929 ------------------------------------------------------------------------------
5930   PROCEDURE apply_mass_rebook(
5931      p_api_version        IN  NUMBER,
5932      p_init_msg_list      IN  VARCHAR2,
5933      x_return_status      OUT NOCOPY VARCHAR2,
5934      x_msg_count          OUT NOCOPY NUMBER,
5935      x_msg_data           OUT NOCOPY VARCHAR2,
5936      p_chr_id             IN  OKC_K_HEADERS_V.ID%TYPE,
5937      p_kle_tbl            IN  kle_tbl_type,
5938      p_source_trx_id      IN  OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE,
5939      p_source_trx_type    IN  OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE,
5940      p_transaction_date   IN  OKL_TRX_CONTRACTS.DATE_TRANSACTION_OCCURRED%TYPE,
5941      x_mass_rebook_trx_id OUT NOCOPY OKL_TRX_CONTRACTS.ID%TYPE,
5942      p_ppd_amount   IN  NUMBER,
5943      p_ppd_reason_code   IN  FND_LOOKUPS.LOOKUP_CODE%TYPE,
5944      p_payment_struc   IN  okl_mass_rebook_pvt.strm_lalevl_tbl_type
5945   )
5946 IS
5947   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5948   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5949   l_api_version NUMBER          := 1.0;
5950 
5951   l_line_count       NUMBER;
5952   l_contract_count   NUMBER;
5953   l_contract_id      NUMBER;
5954   l_prev_contract_id NUMBER;
5955 
5956   l_kle_tbl          kle_tbl_type;
5957 
5958   l_tcnv_rec tcnv_rec_type;
5959   x_tcnv_rec tcnv_rec_type;
5960   l_strm_lalevl_tbl   strm_lalevl_tbl_type;  /* DEBUG */
5961 
5962   BEGIN
5963     IF (G_DEBUG_ENABLED = 'Y') THEN
5964       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5965     END IF;
5966 
5967      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5968             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5969      END IF;
5970      -- call START_ACTIVITY to create savepoint, check compatibility
5971      -- and initialize message list
5972      x_return_status := OKL_API.START_ACTIVITY(
5973                                                p_api_name      => l_api_name,
5974                                                p_pkg_name      => G_PKG_NAME,
5975      	                                       p_init_msg_list => p_init_msg_list,
5976                                                l_api_version   => l_api_version,
5977                                                p_api_version   => p_api_version,
5978                                                p_api_type      => G_API_TYPE,
5979                                                x_return_status => x_return_status);
5980 
5981      -- check if activity started successfully
5982      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5983        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5984      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5985        raise OKL_API.G_EXCEPTION_ERROR;
5986      END IF;
5987 
5988 
5989        --
5990        -- Restart termination process
5991        -- cancel any ongoing transaction, if any
5992        --
5993        cancel_transaction(
5994                           x_return_status  => x_return_status,
5995                           x_msg_count      => x_msg_count,
5996                           x_msg_data       => x_msg_data,
5997                           p_chr_id         => p_chr_id
5998                          );
5999 
6000        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6001                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
6002        END IF;
6003        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
6004          raise OKL_API.G_EXCEPTION_ERROR;
6005        END IF;
6006 
6007 
6008        /* DEBUG */
6009        G_TERMINATION_TRX_ID := NULL;
6010        G_PPD_TRX_ID   := p_source_trx_id;
6011        G_PPD_TRX_TYPE := p_source_trx_type;
6012        G_MASS_RBK_TRX_ID      := NULL;
6013 
6014        --okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
6015 
6016        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6017                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before calling rebook contract...');
6018        END IF;
6019        l_line_count := p_kle_tbl.COUNT;
6020        rebook_contract(
6021                        x_return_status      => x_return_status,
6022                        x_msg_count          => x_msg_count,
6023                        x_msg_data           => x_msg_data,
6024                        p_online_yn          => 'N',
6025                        p_khr_id             => p_chr_id,
6026                        p_kle_tbl            => p_kle_tbl,           -- Table of Top Line ID
6027                        p_line_count         => l_line_count,
6028                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
6029                        p_book_type_code     => NULL,
6030                        p_deprn_method_code  => NULL,
6031                        p_in_service_date    => NULL,
6032                        p_life_in_months     => NULL,
6033                        p_basic_rate         => NULL,
6034                        p_adjusted_rate      => NULL,
6035                        p_residual_value     => NULL,
6036                        p_strm_lalevl_tbl    => p_payment_struc,
6037                        p_transaction_date   => p_transaction_date
6038                       );
6039 
6040        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6041                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->rebook Contract status: '||x_return_status);
6042          OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After rebook contract: x_return_status=' || x_return_status);
6043        END IF;
6044        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6045           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6046                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Raising OKL_API.G_RET_STS_UNEXP_ERROR:');
6047           END IF;
6048           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6049        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6050           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6051                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Raising OKL_API.G_EXCEPTION_ERROR:');
6052           END IF;
6053           raise OKL_API.G_EXCEPTION_ERROR;
6054        END IF;
6055 
6056        x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
6057 
6058      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6059                           x_msg_data    => x_msg_data);
6060 
6061 
6062      RETURN;
6063 
6064   EXCEPTION
6065       when OKL_API.G_EXCEPTION_ERROR then
6066          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6067                         p_api_name  => l_api_name,
6068                         p_pkg_name  => G_PKG_NAME,
6069                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6070                         x_msg_count => x_msg_count,
6071                         x_msg_data  => x_msg_data,
6072                         p_api_type  => G_API_TYPE);
6073         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6074                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After HANDLE_EXCEPTIONS: x_return_status='|| x_return_status);
6075         END IF;
6076 
6077       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6078          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6079                         p_api_name  => l_api_name,
6080                         p_pkg_name  => G_PKG_NAME,
6081                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6082                         x_msg_count => x_msg_count,
6083                         x_msg_data  => x_msg_data,
6084                         p_api_type  => G_API_TYPE);
6085 
6086       when OTHERS then
6087          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6088                         p_api_name  => l_api_name,
6089                         p_pkg_name  => G_PKG_NAME,
6090                         p_exc_name  => 'OTHERS',
6091                         x_msg_count => x_msg_count,
6092                         x_msg_data  => x_msg_data,
6093                         p_api_type  => G_API_TYPE);
6094 
6095   --null;
6096   return;
6097   END apply_mass_rebook;
6098 
6099 ------------------------------------------------------------------------------
6100 -- PROCEDURE create_mass_rbk_set_values
6101 --   This proecdure uses to create set values for  mass rebook request
6102 -- Calls:
6103 -- Called by:
6104 ------------------------------------------------------------------------------
6105     /* Added for CR */
6106   PROCEDURE create_mass_rbk_set_values(
6107                                      p_api_version      IN  NUMBER,
6108                                      p_init_msg_list    IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
6109                                      x_return_status    OUT NOCOPY VARCHAR2,
6110                                      x_msg_count        OUT NOCOPY NUMBER,
6111                                      x_msg_data         OUT NOCOPY VARCHAR2,
6112                                      p_request_name     IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE,
6113                                      p_mrbv_tbl         IN  mrbv_tbl_type,
6114                                      x_mrbv_tbl         OUT NOCOPY mrbv_tbl_type)
6115                                       IS
6116 
6117   l_api_name    VARCHAR2(35)    := 'create_mass_rbk_set_values';
6118   l_proc_name   VARCHAR2(35)    := 'CREATE_MASS_RBK_SET_VALUES';
6119   l_api_version NUMBER          := 1.0;
6120   i             INTEGER;
6121   l_set_value_present VARCHAR2(1) := 'N';
6122 
6123   BEGIN
6124     IF (G_DEBUG_ENABLED = 'Y') THEN
6125       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6126     END IF;
6127      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6128             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
6129      END IF;
6130      -- call START_ACTIVITY to create savepoint, check compatibility
6131      -- and initialize message list
6132      x_return_status := OKL_API.START_ACTIVITY(
6133                                                p_api_name      => l_api_name,
6134                                                p_pkg_name      => G_PKG_NAME,
6135                                                p_init_msg_list => p_init_msg_list,
6136                                                l_api_version   => l_api_version,
6137                                                p_api_version   => p_api_version,
6138                                                p_api_type      => G_API_TYPE,
6139                                                x_return_status => x_return_status);
6140 
6141      -- check if activity started successfully
6142      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6143        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6144      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6145        raise OKL_API.G_EXCEPTION_ERROR;
6146      END IF;
6147      --Validate the Set Values Data
6148      --Atleast one Set Value should be Present
6149      FOR i IN p_mrbv_tbl.FIRST..p_mrbv_tbl.LAST
6150      LOOP
6151        IF(p_mrbv_tbl.EXISTS(i)) THEN
6152           IF (p_mrbv_tbl(i).criteria_code = 'LIFE_IN_MONTHS'
6153              OR
6154              p_mrbv_tbl(i).criteria_code = 'BASIC_RATE'
6155              OR
6156              p_mrbv_tbl(i).criteria_code = 'ADJUSTED_RATE') THEN
6157 
6158            IF (p_mrbv_tbl(i).operand IS NOT NULL
6159               OR
6160               p_mrbv_tbl(i).criteria_value1 IS NOT NULL
6161               OR
6162               p_mrbv_tbl(i).criteria_value2 IS NOT NULL) THEN
6163               okl_api.set_message(
6164                                  G_APP_NAME,
6165                                  G_INVALID_MATCH_OPTION,
6166                                  'CRIT_CODE',
6167                                  p_mrbv_tbl(i).criteria_code
6168                                );
6169               RAISE OKL_API.G_EXCEPTION_ERROR;
6170          END IF;
6171         END IF;
6172         --Check for Data Integrity
6173         IF(p_mrbv_tbl(i).criteria_code = 'LIFE_IN_MONTHS' AND
6174            p_mrbv_tbl(i).set_value IS NOT NULL) THEN
6175            IF(p_mrbv_tbl(i).set_value <= 0 OR TRUNC(p_mrbv_tbl(i).set_value)<>(p_mrbv_tbl(i).set_value)) THEN
6176               okl_api.set_message(
6177                                 G_APP_NAME,
6178                                 'OKL_CONTRACTS_INVALID_VALUE',
6179                                 'COL_NAME',
6180                                 'LIFE_IN_MONTHS');
6181               RAISE OKL_API.G_EXCEPTION_ERROR;
6182            END IF;
6183 
6184         END IF;
6185         IF(p_mrbv_tbl(i).criteria_code = 'BASIC_RATE' AND
6186            p_mrbv_tbl(i).set_value IS NOT NULL) THEN
6187            IF(p_mrbv_tbl(i).set_value <= 0 ) THEN
6188               okl_api.set_message(
6189                                 G_APP_NAME,
6190                                 'OKL_CONTRACTS_INVALID_VALUE',
6191                                 'COL_NAME',
6192                                 'BASIC_RATE');
6193               RAISE OKL_API.G_EXCEPTION_ERROR;
6194            END IF;
6195 
6196         END IF;
6197         IF(p_mrbv_tbl(i).criteria_code = 'ADJUSTED_RATE' AND
6198            p_mrbv_tbl(i).set_value IS NOT NULL) THEN
6199            IF(p_mrbv_tbl(i).set_value <= 0 ) THEN
6200               okl_api.set_message(
6201                                 G_APP_NAME,
6202                                 'OKL_CONTRACTS_INVALID_VALUE',
6203                                 'COL_NAME',
6204                                 'ADJUSTED_RATE');
6205               RAISE OKL_API.G_EXCEPTION_ERROR;
6206            END IF;
6207 
6208         END IF;
6209         IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
6210             l_set_value_present := 'Y';
6211         END IF;
6212 
6213        END IF;
6214      END LOOP;
6215      IF (l_set_value_present = 'N') THEN
6216        okl_api.set_message(
6217                            G_APP_NAME,
6218                            G_NO_SET_VALUE,
6219                            'REQ_NAME',
6220                            p_request_name
6221                           );
6222        x_return_status := OKL_API.G_RET_STS_ERROR;
6223     END IF;
6224     --
6225     -- Insert Selection criteria
6226     --
6227     okl_mrb_pvt.insert_row(
6228                             p_api_version   => l_api_version,
6229                             p_init_msg_list => p_init_msg_list,
6230                             x_return_status => x_return_status,
6231                             x_msg_count     => x_msg_count,
6232                             x_msg_data      => x_msg_data,
6233                             p_mrbv_tbl      => p_mrbv_tbl,
6234                             x_mrbv_tbl      => x_mrbv_tbl
6235                            );
6236 
6237      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6238        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6239      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6240        raise OKL_API.G_EXCEPTION_ERROR;
6241      END IF;
6242 
6243      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6244                           x_msg_data    => x_msg_data);
6245 
6246 
6247      EXCEPTION
6248       when OKL_API.G_EXCEPTION_ERROR then
6249          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6250                         p_api_name  => l_api_name,
6251                         p_pkg_name  => G_PKG_NAME,
6252                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6253                         x_msg_count => x_msg_count,
6254                         x_msg_data  => x_msg_data,
6255                         p_api_type  => G_API_TYPE);
6256         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6257             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After HANDLE_EXCEPTIONS: x_return_status='|| x_return_status);
6258         END IF;
6259 
6260       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6261          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6262                         p_api_name  => l_api_name,
6263                         p_pkg_name  => G_PKG_NAME,
6264                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6265                         x_msg_count => x_msg_count,
6266                         x_msg_data  => x_msg_data,
6267                         p_api_type  => G_API_TYPE);
6268 
6269       when OTHERS then
6270          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6271                         p_api_name  => l_api_name,
6272                         p_pkg_name  => G_PKG_NAME,
6273                         p_exc_name  => 'OTHERS',
6274                         x_msg_count => x_msg_count,
6275                         x_msg_data  => x_msg_data,
6276                         p_api_type  => G_API_TYPE);
6277 
6278 
6279   END create_mass_rbk_set_values;
6280 
6281 END OKL_MASS_REBOOK_PVT;