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.38.12020000.3 2013/03/28 10:34:29 bkatraga 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   --ndani - 20-Mar-2013, Start - Mass Rebook accounting fix
2416   --Bug# 16526329 : Accounting Booking : Booking to make two accounting calls
2417   --                'Booking' and 'Release' while booking a contract
2418 
2419   --    cursor : to check whether Contract is having mixed asset or not
2420   CURSOR l_chk_con_csr (chrid NUMBER) IS
2421   SELECT COUNT (*)
2422   FROM  (SELECT COUNT(*)
2423          FROM  okc_k_lines_b   cleb,
2424                okl_k_lines     kle
2425          WHERE kle.id           = cleb.id
2426          AND   cleb.chr_id      = chrid
2427          --ndani - 27-Mar-2013 - Bug# 16552978 - Start
2428          AND   cleb.dnz_chr_id  = chrid
2429          AND   cleb.lse_id      = 33
2430          AND   cleb.sts_code    <> 'ABANDONED'
2431          --ndani - 27-Mar-2013 - Bug# 16552978 - End
2432          GROUP BY NVL(kle.re_lease_yn,'N')
2433         );
2434 
2435   --    cursor : to check whether Contract is having re-lease assets
2436   CURSOR l_con_rel_csr (chrid NUMBER) IS
2437   SELECT DISTINCT NVL(kle.re_lease_yn,'N')
2438   FROM   okc_k_lines_b   cleb,
2439          okl_k_lines     kle
2440   WHERE kle.id           = cleb.id
2441   AND   cleb.chr_id      = chrid
2442   --ndani - 27-Mar-2013 - Bug# 16552978 - Start
2443   AND   cleb.dnz_chr_id  = chrid
2444   AND   cleb.lse_id      = 33
2445   AND   cleb.sts_code    <> 'ABANDONED';
2446   --ndani - 27-Mar-2013 - Bug# 16552978 - End
2447 
2448 
2449   l_chk_contract_count     NUMBER := 0;
2450   l_con_rel_flag           okl_k_lines.re_lease_yn%TYPE;
2451   l_acct_trans_type        VARCHAR2 (256);
2452   l_acc_call_rel_flag      VARCHAR2 (1) := 'N';
2453 
2454   --Bug# 16526329 , End
2455   --ndani - 20-Mar-2013, End - Mass Rebook accounting fix
2456 
2457   BEGIN
2458     IF (G_DEBUG_ENABLED = 'Y') THEN
2459       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2460     END IF;
2461 
2462     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2463           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
2464     END IF;
2465 
2466     IF (p_transaction_date IS NULL
2467         OR
2468         p_transaction_date = OKL_API.G_MISS_DATE) THEN
2469 
2470        l_transaction_date := TRUNC(SYSDATE);
2471     ELSE
2472        l_transaction_date := p_transaction_date;
2473     END IF;
2474 
2475     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2476           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract : '||p_khr_id);
2477       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Tot Line : '||p_line_count);
2478       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Online? :' ||p_online_yn);
2479       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Transaction Date :' ||l_transaction_date);
2480     END IF;
2481 
2482     g_stream_trx_number := NULL; -- initialize before start
2483 
2484     --Bug# 8756653
2485     -- Check if contract has been upgraded for effective dated rebook
2486     -- for all mass rebooks other than partial termination
2487     IF (G_TERMINATION_TRX_ID IS NULL) THEN
2488       OKL_LLA_UTIL_PVT.check_rebook_upgrade
2489         (p_api_version     => 1.0,
2490          p_init_msg_list   => OKL_API.G_FALSE,
2491          x_return_status   => x_return_status,
2492          x_msg_count       => x_msg_count,
2493          x_msg_data        => x_msg_data,
2494          p_chr_id          => p_khr_id);
2495 
2496       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2497         RAISE rebook_contract_failed;
2498       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2499         RAISE rebook_contract_failed;
2500       END IF;
2501     END IF;
2502 
2503     IF (p_online_yn = 'N') THEN -- populate selected_contract table for Non-Online process only
2504        l_request_name          := TO_CHAR(get_seq_id());
2505        l_mstv_rec.request_name := l_request_name;
2506        FOR i IN 1..p_line_count
2507        LOOP
2508          l_mstv_rec.khr_id           := p_khr_id;
2509          l_mstv_rec.kle_id           := p_kle_tbl(i).id;
2510          l_mstv_rec.status           := 'NEW';
2511          l_mstv_rec.transaction_date := l_transaction_date;
2512 
2513          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2514                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Req: '||l_mstv_rec.request_name);
2515          END IF;
2516          okl_mst_pvt.insert_row(
2517                           p_api_version   => 1.0,
2518                           p_init_msg_list => OKL_API.G_FALSE,
2519                           x_return_status => x_return_status,
2520                           x_msg_count     => x_msg_count,
2521                           x_msg_data      => x_msg_data,
2522                           p_mstv_rec      => l_mstv_rec,
2523                           x_mstv_rec      => x_mstv_rec
2524                          );
2525 
2526          IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2527              RAISE rebook_contract_failed;
2528          END IF;
2529          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2530                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Line ID: '||p_kle_tbl(i).id);
2531          END IF;
2532        END LOOP;
2533 
2534     ELSE
2535        l_request_name := p_request_name;
2536     END IF;
2537 
2538     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2539           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Versioning...');
2540     END IF;
2541     --
2542     -- Version the Original Contract, only if it is ACTIVE, OKC requirement
2543     --
2544 
2545     FOR con_sts_rec IN con_sts_csr (p_khr_id)
2546     LOOP
2547        IF (con_sts_rec.ste_code = 'ACTIVE') THEN
2548 
2549           l_cvmv_rec.chr_id := p_khr_id;
2550           okl_version_pub.version_contract(
2551                                            p_api_version   => 1.0,
2552                                            p_init_msg_list => OKC_API.G_FALSE,
2553                                            x_return_status => x_return_status,
2554                                            x_msg_count     => x_msg_count,
2555                                            x_msg_data      => x_msg_data,
2556                                            p_cvmv_rec      => l_cvmv_rec,
2557                                            p_commit        => OKL_API.G_FALSE,
2558                                            x_cvmv_rec      => x_cvmv_rec
2559                                           );
2560 
2561            IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
2562               RAISE rebook_contract_failed;
2563            END IF;
2564 
2565            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2566                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract is versioned: '||x_return_status);
2567            END IF;
2568        END IF;
2569     END LOOP;
2570 
2571      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2572             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Versioning of Contract');
2573      END IF;
2574      -- Create Transaction for the rebook-ed contract
2575 
2576      okl_transaction_pvt.create_transaction(
2577                         p_api_version        => l_api_version,
2578                         p_init_msg_list      => OKL_API.G_FALSE,
2579                         x_return_status      => x_return_status,
2580                         x_msg_count          => x_msg_count,
2581                         x_msg_data           => x_msg_data,
2582                         p_chr_id             => p_khr_id,
2583                         p_new_chr_id         => NULL,
2584                         p_reason_code        => 'OTHER',
2585                         p_description        => NULL,
2586                         p_trx_date           => l_transaction_date, --SYSDATE,
2587                         p_trx_type           => 'REBOOK',
2588                         x_tcnv_rec           => x_tcnv_rec
2589                        );
2590 
2591      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2592         RAISE rebook_contract_failed;
2593      END IF;
2594 
2595      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2596             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Status After create transaction: '||x_return_status);
2597      END IF;
2598 
2599      l_mstv_tbl := get_rec(l_request_name, p_khr_id, x_return_status);
2600 
2601      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2602             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after get_rec : '||x_return_status);
2603      END IF;
2604      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2605         RAISE rebook_contract_failed;
2606      END IF;
2607 
2608      FOR i IN 1..l_mstv_tbl.COUNT
2609      LOOP
2610         l_mstv_tbl(i).transaction_id := x_tcnv_rec.id;
2611         l_mstv_tbl(i).status         := 'UNDER REVISION';
2612         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2613                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ID : '|| l_mstv_tbl(i).id);
2614           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'TRX ID : '|| l_mstv_tbl(i).transaction_id);
2615         END IF;
2616      END LOOP;
2617 
2618      okl_mst_pvt.update_row(
2619                             p_api_version    => l_api_version,
2620                             p_init_msg_list  => OKL_API.G_FALSE,
2621                             x_return_status  => x_return_status,
2622                             x_msg_count      => x_msg_count,
2623                             x_msg_data       => x_msg_data,
2624                             p_mstv_tbl       => l_mstv_tbl,
2625                             x_mstv_tbl       => x_mstv_tbl
2626                            );
2627 
2628      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2629             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after update mst :'|| x_return_status);
2630      END IF;
2631      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2632         RAISE rebook_contract_failed;
2633      END IF;
2634 
2635      -- Termination specific logic here
2636      IF (G_TERMINATION_TRX_ID IS NOT NULL) THEN
2637        --
2638        -- Update Mass rebook Transaction with source trx.
2639        --
2640        okl_api.set_message('OKL', 'AM', 'Termination Trx ID: ', G_TERMINATION_TRX_ID);
2641        l_tcnv_rec.id              := x_tcnv_rec.id;
2642        l_tcnv_rec.source_trx_id   := G_TERMINATION_TRX_ID;
2643        l_tcnv_rec.source_trx_type := G_TERMINATION_TRX_TYPE;
2644        G_MASS_RBK_TRX_ID          := x_tcnv_rec.id;
2645 
2646        Okl_Trx_Contracts_Pub.update_trx_contracts(
2647                                          p_api_version   => l_api_version,
2648                                          p_init_msg_list => OKL_API.G_FALSE,
2649                                          x_return_status => x_return_status,
2650                                          x_msg_count     => x_msg_count,
2651                                          x_msg_data      => x_msg_data,
2652                                          p_tcnv_rec      => l_tcnv_rec,
2653                                          x_tcnv_rec      => x_tcnv_rec
2654                                         );
2655 
2656        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2657                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After update transaction: '||x_return_status);
2658        END IF;
2659        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2660            RAISE OKL_API.G_EXCEPTION_ERROR;
2661        END IF;
2662 
2663      END IF;
2664      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2665             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after first loop ');
2666      END IF;
2667 
2668      --DEBUG
2669      -- PPD specific logic here
2670      IF (G_PPD_TRX_ID IS NOT NULL) THEN
2671        --
2672        -- Update Mass rebook Transaction with source trx.
2673        --
2674        okl_api.set_message('OKL', 'AM', 'Termination Trx ID: ', G_TERMINATION_TRX_ID);
2675        l_tcnv_rec.id              := x_tcnv_rec.id;
2676        l_tcnv_rec.source_trx_id   := G_PPD_TRX_ID;
2677        --l_tcnv_rec.source_trx_type := G_PPD_TRX_TYPE;
2678        l_tcnv_rec.source_trx_type := 'TCN';
2679        G_MASS_RBK_TRX_ID          := x_tcnv_rec.id;
2680 
2681        Okl_Trx_Contracts_Pub.update_trx_contracts(
2682                                          p_api_version   => l_api_version,
2683                                          p_init_msg_list => OKL_API.G_FALSE,
2684                                          x_return_status => x_return_status,
2685                                          x_msg_count     => x_msg_count,
2686                                          x_msg_data      => x_msg_data,
2687                                          p_tcnv_rec      => l_tcnv_rec,
2688                                          x_tcnv_rec      => x_tcnv_rec
2689                                         );
2690 
2691        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2692                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After update transaction: '||x_return_status);
2693        END IF;
2694        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2695            RAISE OKL_API.G_EXCEPTION_ERROR;
2696        END IF;
2697 
2698      END IF;
2699 
2700      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2701             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after second loop ');
2702      END IF;
2703      --
2704      -- Fix Bug# 2894810
2705      -- Create reversal journal entries before
2706      -- modifying the contract. This will help
2707      -- successfully reverse the current JE
2708      --
2709 
2710      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2711             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Transaction date: '||l_transaction_date);
2712      END IF;
2713      -- Bug#4542290 - smadhava - 01-SEP-2005 - Added - Start
2714      -- Bypass accoutning call for source transaction = Loan/Principal Pay down or Partial termination
2715      IF ( G_PPD_TRX_ID IS NULL AND G_TERMINATION_TRX_ID IS NULL ) THEN
2716      -- Bug#4542290 - smadhava - 01-SEP-2005 - Added - End
2717 
2718        --ndani - 20-Mar-2013, Start - Mass Rebook accounting fix
2719        --Bug# 16526329 : Accounting Booking : Booking to make two accounting calls
2720 
2721        -- Cursor called to check whether contract is mixed contract or not
2722        OPEN l_chk_con_csr (p_khr_id);
2723        FETCH l_chk_con_csr
2724         INTO l_chk_contract_count;
2725        CLOSE l_chk_con_csr;
2726 
2727        l_acct_trans_type := 'Rebook';
2728 
2729        -- if mixed contract call okl_la_je_pvt.generate_journal_entries for 'Release' seperately
2730        IF (l_chk_contract_count = 2) THEN
2731           l_acc_call_rel_flag := 'Y';
2732 
2733        ELSE
2734           -- Cursor to check re-leased asset, if released then assign l_acct_trans_type for Release asset contract
2735           OPEN l_con_rel_csr (p_khr_id);
2736           FETCH l_con_rel_csr
2737            INTO l_con_rel_flag;
2738           CLOSE l_con_rel_csr;
2739 
2740           IF (NVL (l_con_rel_flag,'N') = 'Y') THEN
2741              l_acct_trans_type := 'Rebook-Release';
2742           END IF;
2743        END IF;
2744 
2745        --Bug# 16526329 , End
2746        --ndani - 20-Mar-2013, End - Mass Rebook accounting fix
2747 
2748        OKL_LA_JE_PVT.GENERATE_JOURNAL_ENTRIES(
2749                       p_api_version      => l_api_version,
2750                       p_init_msg_list    => OKL_API.G_FALSE,
2751                       p_commit           => OKL_API.G_FALSE,
2752                       p_contract_id      => p_khr_id,
2753                       p_transaction_type => l_acct_trans_type,--'Rebook',--ndani - 20-Mar-2013, Bug# 16526329- Mass Rebook accounting fix
2754                       p_transaction_date => l_transaction_date, --trunc(SYSDATE),
2755                       p_draft_yn         => OKL_API.G_FALSE,
2756                       x_return_status    => x_return_status,
2757                       x_msg_count        => x_msg_count,
2758                       x_msg_data         => x_msg_data
2759                      );
2760 
2761        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2762                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after generate journal entries ');
2763        END IF;
2764        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2765            RAISE rebook_contract_failed;
2766        END IF;
2767 
2768        --ndani - 20-Mar-2013, Start - Mass Rebook accounting fix
2769        --Bug# 16526329 : Accounting Booking : Booking to make two accounting calls for reversal of
2770        --                'Booking' and 'Release'
2771        --                Calling okl_la_je_pvt.generate_journal_entries() when Contract
2772        --                is created as mixed contract
2773 
2774        IF l_acc_call_rel_flag = 'Y' THEN
2775 
2776           OKL_LA_JE_PVT.GENERATE_JOURNAL_ENTRIES(
2777                       p_api_version      => l_api_version,
2778                       p_init_msg_list    => OKL_API.G_FALSE,
2779                       p_commit           => OKL_API.G_FALSE,
2780                       p_contract_id      => p_khr_id,
2781                       p_transaction_type => 'Rebook-Release',
2782                       p_transaction_date => l_transaction_date, --trunc(SYSDATE),
2783                       p_draft_yn         => OKL_API.G_FALSE,
2784                       x_return_status    => x_return_status,
2785                       x_msg_count        => x_msg_count,
2786                       x_msg_data         => x_msg_data
2787                      );
2788 
2789          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2790              OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after generate journal entries ');
2791          END IF;
2792          IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2793              RAISE rebook_contract_failed;
2794          END IF;
2795 
2796        END IF;
2797        --Bug# 16526329 , End
2798        --ndani - 20-Mar-2013, End - Mass Rebook accounting fix
2799 
2800      -- Bug#4542290 - smadhava - 01-SEP-2005 - Added - Start
2801      END IF; -- end of check for the source transaction
2802      -- Bug#4542290 - smadhava - 01-SEP-2005 - Added - End
2803 
2804 
2805      -- Update contract according to parameter specified
2806      populate_asset_change(
2807                            x_return_status      => x_return_status,
2808                            x_msg_count          => x_msg_count,
2809                            x_msg_data           => x_msg_data,
2810                            p_request_name       => l_request_name,
2811                            p_online_yn          => p_online_yn,
2812                            p_khr_id             => p_khr_id,
2813                            p_kle_tbl            => p_kle_tbl,
2814                            p_line_count         => p_line_count,
2815                            p_book_type_code     => p_book_type_code,
2816                            p_deprn_method_code  => p_deprn_method_code,
2817                            p_in_service_date    => p_in_service_date,
2818                            p_life_in_months     => p_life_in_months,
2819                            p_basic_rate         => p_basic_rate,
2820                            p_adjusted_rate      => p_adjusted_rate,
2821                            p_transaction_date   => l_transaction_date
2822                           );
2823 
2824      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2825             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after populate asset change ');
2826      END IF;
2827      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2828          RAISE rebook_contract_failed;
2829      END IF;
2830 
2831      --
2832      -- Update RESIDUAL_VALUE if asked for ...
2833      --
2834      IF (p_residual_value IS NOT NULL) THEN
2835         update_residual_value(
2836                               x_return_status      => x_return_status,
2837                               x_msg_count          => x_msg_count,
2838                               x_msg_data           => x_msg_data,
2839                               p_kle_tbl            => p_kle_tbl,
2840                               p_residual_value     => p_residual_value
2841                              );
2842 
2843         IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2844            RAISE rebook_contract_failed;
2845         END IF;
2846      END IF;
2847 
2848      --
2849      -- Update SLH, SLL if provided, only for Non-OnLine process
2850      --
2851      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2852             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'before calling update_ppd_amount');
2853      END IF;
2854      IF (p_online_yn = 'N'
2855          AND
2856          p_strm_lalevl_tbl.COUNT > 0) THEN
2857        IF (G_PPD_TRX_ID IS NOT NULL) THEN
2858         update_ppd_amount(
2859                        x_return_status    => x_return_status,
2860                        x_msg_count        => x_msg_count,
2861                        x_msg_data         => x_msg_data,
2862                        p_khr_id           => p_khr_id,
2863                        p_kle_tbl          => p_kle_tbl,
2864                        p_strm_lalevl_tbl  => p_strm_lalevl_tbl
2865                       );
2866        ELSE
2867         update_slh_sll(
2868                        x_return_status    => x_return_status,
2869                        x_msg_count        => x_msg_count,
2870                        x_msg_data         => x_msg_data,
2871                        p_khr_id           => p_khr_id,
2872                        p_kle_tbl          => p_kle_tbl,
2873                        p_strm_lalevl_tbl  => p_strm_lalevl_tbl
2874                       );
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,'after calling update_ppd_amount');
2879        END IF;
2880        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2881            RAISE rebook_contract_failed;
2882        END IF;
2883      END IF;
2884 
2885      --
2886      -- Bug# 2843007, 14-MAR-2003
2887      -- Call Insurance API for asset termination
2888      --
2889 --Bug#5955320
2890      OKL_INSURANCE_POLICIES_PUB.cancel_create_policies(
2891                                                        p_api_version        => 1.0,
2892                                                        p_init_msg_list      => OKL_API.G_FALSE,
2893                                                        x_return_status      => x_return_status,
2894                                                        x_msg_count          => x_msg_count,
2895                                                        x_msg_data           => x_msg_data,
2896                                                        p_khr_id             => p_khr_id,
2897                                                        p_cancellation_date  => l_transaction_date, --SYSDATE
2898                                                        --Bug# 4055812
2899                                                        --Bug# 3945995
2900 					               p_transaction_id     => G_MASS_RBK_TRX_ID,
2901                                                        x_ignore_flag        => x_ignore_flag
2902                                                       );
2903 
2904      IF (x_return_status = OKL_API.G_RET_STS_ERROR) then
2905         IF (x_ignore_flag = OKL_API.G_FALSE) THEN
2906            raise rebook_contract_failed;
2907         ELSE
2908            x_return_status := OKL_API.G_RET_STS_SUCCESS;
2909         END IF;
2910      ELSIF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2911         raise rebook_contract_failed;
2912      END IF;
2913 
2914      -- Run QA Checker
2915 
2916      get_qcl_id(
2917                 x_return_status => x_return_status,
2918                 p_qcl_name      => 'OKL LA QA CHECK LIST',
2919                 x_qcl_id        => l_qcl_id
2920                );
2921 
2922      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2923             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Running QA Checker...');
2924      END IF;
2925      l_qa_check_status := 'S';
2926      okl_contract_book_pub.execute_qa_check_list(
2927                                                  p_api_version    => 1.0,
2928                                                  p_init_msg_list  => OKL_API.G_FALSE,
2929                                                  x_return_status  => x_return_status,
2930                                                  x_msg_count      => x_msg_count,
2931                                                  x_msg_data       => x_msg_data,
2932                                                  p_qcl_id         => l_qcl_id,
2933                                                  p_chr_id         => p_khr_id,
2934                                                  x_msg_tbl        => l_msg_tbl
2935                                                 );
2936 
2937      FOR i IN 1..l_msg_tbl.LAST
2938      LOOP
2939         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2940                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Name        : '||l_msg_tbl(i).name);
2941           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Description : '||l_msg_tbl(i).description);
2942           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error Status: '||l_msg_tbl(i).error_status);
2943           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Data        : '||l_msg_tbl(i).data);
2944         END IF;
2945 
2946         IF (l_msg_tbl(i).error_status = 'E') THEN
2947            l_qa_check_status := 'E';
2948         END IF;
2949      END LOOP;
2950 
2951      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2952             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After 1st Qa Checker '|| l_qa_check_status);
2953      END IF;
2954 
2955      IF (l_qa_check_status <> 'S') THEN
2956         RAISE rebook_contract_failed;
2957      END IF;
2958 
2959      -- R12B Authoring OA Migration
2960      -- Upfront Tax Calculation has been moved out of QA Checker.
2961      -- For Mass Rebook, Upfront Tax calculation will not be performed.
2962      -- The below call will only update the status of the Calculate Upfront Tax
2963      -- task to Complete.
2964      OKL_CONTRACT_BOOK_PVT.calculate_upfront_tax(
2965        p_api_version      =>  1.0,
2966        p_init_msg_list    =>  OKL_API.G_FALSE,
2967        x_return_status    =>  x_return_status,
2968        x_msg_count        =>  x_msg_count,
2969        x_msg_data         =>  x_msg_data,
2970        p_chr_id           =>  p_khr_id,
2971        x_process_status   =>  l_upfront_tax_status);
2972 
2973      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2974        RAISE rebook_contract_failed;
2975      END IF;
2976 
2977      -- Generate Stream
2978      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2979             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Submitting Request to generate Streams....');
2980      END IF;
2981      -- Changed to handle internal and external streams as well
2982      -- Fix Bug#
2983      --OKL_GENERATE_STREAMS_PUB.GENERATE_STREAMS(
2984      --
2985      OKL_LA_STREAM_PUB.GEN_INTR_EXTR_STREAM (
2986                                                p_api_version         => 1.0,
2987                                                p_init_msg_list       => OKL_API.G_FALSE,
2988                                                p_khr_id              => p_khr_id,
2989                                                p_generation_ctx_code => 'AUTH',
2990                                                x_trx_number          => x_trx_number,
2991                                                x_trx_status          => x_trx_status,
2992                                                x_return_status       => x_return_status,
2993                                                x_msg_count           => x_msg_count,
2994                                                x_msg_data            => x_msg_data
2995                                               );
2996 
2997      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2998          RAISE rebook_contract_failed;
2999      END IF;
3000 
3001      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3002             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Stream Status :'||x_return_status);
3003        OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Trx# : '||x_trx_number);
3004      END IF;
3005 
3006      g_stream_trx_number := x_trx_number;
3007 
3008      RETURN;
3009 
3010   EXCEPTION
3011 
3012       WHEN rebook_contract_failed THEN
3013         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3014                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook_contract_failed');
3015         END IF;
3016         g_stream_trx_number := NULL;
3017         x_return_status := OKL_API.G_RET_STS_ERROR;
3018         --raise; -- propagate error to caller
3019      WHEN others THEN
3020         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3021                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook_contract_failed');
3022         END IF;
3023         g_stream_trx_number := NULL;
3024         x_return_status := OKL_API.G_RET_STS_ERROR;
3025         --raise; -- propagate error to caller
3026 
3027   END rebook_contract;
3028 
3029 ------------------------------------------------------------------------------
3030 -- PROCEDURE update_mass_rbk_contract
3031 --   Call this process to update selected contracts. This process updates
3032 --   selected_flag and status of contract provided as parameter
3033 -- Calls:
3034 -- Called by:
3035 ------------------------------------------------------------------------------
3036   PROCEDURE update_mass_rbk_contract(
3037                                      p_api_version                  IN  NUMBER,
3038                                      p_init_msg_list                IN  VARCHAR2,
3039                                      x_return_status                OUT NOCOPY VARCHAR2,
3040                                      x_msg_count                    OUT NOCOPY NUMBER,
3041                                      x_msg_data                     OUT NOCOPY VARCHAR2,
3042                                      p_mstv_tbl                     IN  MSTV_TBL_TYPE,
3043                                      x_mstv_tbl                     OUT NOCOPY MSTV_TBL_TYPE
3044                                     ) IS
3045 
3046   l_api_name    VARCHAR2(35)    := 'update_mass_rbk_contract';
3047   l_proc_name   VARCHAR2(35)    := 'UPDATE_MASS_RBK_CONTRACT';
3048   l_api_version NUMBER          := 1.0;
3049 
3050   CURSOR rbk_csr (p_request_name OKL_RBK_SELECTED_CONTRACT.REQUEST_NAME%TYPE,
3051                   p_chr_id       OKC_K_HEADERS_V.ID%TYPE) IS
3052   SELECT id
3053   FROM   okl_rbk_selected_contract
3054   WHERE  khr_id       = p_chr_id
3055   AND    request_name = p_request_name;
3056 
3057   l_mstv_upd_tbl mstv_tbl_type;
3058   x_mstv_upd_tbl mstv_tbl_type;
3059   l_upd_count    NUMBER := 0;
3060 
3061   update_failed EXCEPTION;
3062 
3063   BEGIN
3064     IF (G_DEBUG_ENABLED = 'Y') THEN
3065       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3066     END IF;
3067      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3068             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
3069      END IF;
3070      x_return_status := OKL_API.G_RET_STS_SUCCESS;
3071 
3072      -- call START_ACTIVITY to create savepoint, check compatibility
3073      -- and initialize message list
3074      x_return_status := OKL_API.START_ACTIVITY(
3075                                                p_api_name      => l_api_name,
3076                                                p_pkg_name      => G_PKG_NAME,
3077                                                p_init_msg_list => p_init_msg_list,
3078                                                l_api_version   => l_api_version,
3079                                                p_api_version   => p_api_version,
3080                                                p_api_type      => G_API_TYPE,
3081                                                x_return_status => x_return_status);
3082 
3083      -- check if activity started successfully
3084      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3085        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3086      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3087        raise OKL_API.G_EXCEPTION_ERROR;
3088      END IF;
3089 
3090      l_upd_count := 1;
3091      FOR i IN 1..p_mstv_tbl.COUNT
3092      LOOP
3093         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3094                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ID     :'||p_mstv_tbl(i).id);
3095           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'KHR_ID :'||p_mstv_tbl(i).khr_id);
3096           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'REQ    :'||p_mstv_tbl(i).request_name);
3097         END IF;
3098 
3099         FOR rbk_rec IN rbk_csr(p_mstv_tbl(i).request_name,
3100                                p_mstv_tbl(i).khr_id)
3101         LOOP
3102            l_mstv_upd_tbl(l_upd_count).id            := rbk_rec.id;
3103            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3104                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ID     :'||l_mstv_upd_tbl(l_upd_count).id);
3105            END IF;
3106            --insert into dd_dummy values (3.1, 'ID: '||l_mstv_upd_tbl(l_upd_count).id);
3107            l_mstv_upd_tbl(l_upd_count).selected_flag := p_mstv_tbl(i).selected_flag;
3108            l_mstv_upd_tbl(l_upd_count).status        := p_mstv_tbl(i).status;
3109            l_upd_count := l_upd_count+ 1;
3110         END LOOP;
3111      END LOOP;
3112 
3113      okl_mst_pvt.update_row(
3114                             p_api_version   => p_api_version,
3115                             p_init_msg_list => p_init_msg_list,
3116                             x_return_status => x_return_status,
3117                             x_msg_count     => x_msg_count,
3118                             x_msg_data      => x_msg_data,
3119                             p_mstv_tbl      => l_mstv_upd_tbl,
3120                             x_mstv_tbl      => x_mstv_upd_tbl
3121                            );
3122 
3123      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3124        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3125      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3126        raise OKL_API.G_EXCEPTION_ERROR;
3127      END IF;
3128 
3129      --insert into dd_dummy values (3.2, 'After update');
3130      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
3131                           x_msg_data    => x_msg_data);
3132 
3133      RETURN;
3134 
3135   EXCEPTION
3136       WHEN update_failed THEN
3137           x_return_status := OKL_API.G_RET_STS_SUCCESS;
3138 
3139       when OKL_API.G_EXCEPTION_ERROR then
3140          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3141                         p_api_name  => l_api_name,
3142                         p_pkg_name  => G_PKG_NAME,
3143                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3144                         x_msg_count => x_msg_count,
3145                         x_msg_data  => x_msg_data,
3146                         p_api_type  => G_API_TYPE);
3147 
3148       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3149          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3150                         p_api_name  => l_api_name,
3151                         p_pkg_name  => G_PKG_NAME,
3152                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3153                         x_msg_count => x_msg_count,
3154                         x_msg_data  => x_msg_data,
3155                         p_api_type  => G_API_TYPE);
3156 
3157       when OTHERS then
3158          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3159                         p_api_name  => l_api_name,
3160                         p_pkg_name  => G_PKG_NAME,
3161                         p_exc_name  => 'OTHERS',
3162                         x_msg_count => x_msg_count,
3163                         x_msg_data  => x_msg_data,
3164                         p_api_type  => G_API_TYPE);
3165   END update_mass_rbk_contract;
3166 
3167 ------------------------------------------------------------------------------
3168 -- PROCEDURE update_trx_asset
3169 --   Call this process to update status (TSU_CODE) of okl_trx_assets_v with
3170 --   p_status.
3171 -- Calls:
3172 -- Called by:
3173 ------------------------------------------------------------------------------
3174   PROCEDURE update_trx_asset(
3175                              x_return_status OUT NOCOPY VARCHAR2,
3176                              x_msg_count     OUT NOCOPY NUMBER,
3177                              x_msg_data      OUT NOCOPY VARCHAR2,
3178                              p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
3179                              p_status        IN  VARCHAR2
3180                             ) IS
3181   --Bug# 3521126 :
3182   /*--modified cursor to change only status of current transaction--
3183   --CURSOR trx_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3184   --SELECT txl.tas_id
3185   --FROM   okl_txl_assets_v txl
3186   --WHERE  txl.dnz_khr_id = p_chr_id
3187   --AND    EXISTS (SELECT 'Y'
3188                  --FROM   okl_trx_assets_v trx
3189                  --WHERE  trx.id       = txl.tas_id
3190                  --AND    trx.tsu_code = 'ENTERED');
3191   ---------------------------------------------------------------*/
3192   CURSOR trx_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3193   SELECT trx.id
3194   FROM   okl_trx_assets   trx,
3195          okl_trx_types_tl ttyp,
3196          okl_txl_assets_b txl
3197   WHERE  trx.id         = txl.tas_id
3198   AND    trx.try_id     = ttyp.id
3199   AND    trx.tas_type   = 'CRB'
3200   AND    trx.tsu_code   = 'ENTERED'
3201   AND    ttyp.name      = 'Rebook'
3202   AND    ttyp.language  = 'US'
3203   AND    txl.tal_type   = 'CRB'
3204   AND    txl.dnz_khr_id = p_chr_id;
3205 
3206   l_thpv_rec   thpv_rec_type;
3207   x_thpv_rec   thpv_rec_type;
3208 
3209   BEGIN
3210 
3211     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3212 
3213     FOR trx_rec IN trx_csr(p_chr_id)
3214     LOOP
3215        l_thpv_rec.id       := trx_rec.id;
3216        l_thpv_rec.tsu_code := p_status;
3217 
3218        okl_trx_assets_pub.update_trx_ass_h_def(
3219                                         p_api_version   => 1.0,
3220                                         p_init_msg_list => OKL_API.G_FALSE,
3221                                         x_return_status => x_return_status,
3222                                         x_msg_count     => x_msg_count,
3223                                         x_msg_data      => x_msg_data,
3224                                         p_thpv_rec      => l_thpv_rec,
3225                                         x_thpv_rec      => x_thpv_rec
3226                                        );
3227 
3228     END LOOP;
3229 
3230   END update_trx_asset;
3231 
3232   -- Bug# 4398936
3233   PROCEDURE  process_securitization_stream(p_chr_id   IN  OKC_K_HEADERS_V.ID%TYPE,
3234                                            p_rbk_trx_id   IN NUMBER,
3235                                            x_return_status OUT NOCOPY VARCHAR2,
3236                                            x_msg_count     OUT NOCOPY NUMBER,
3237                                            x_msg_data      OUT NOCOPY VARCHAR2)
3238   IS
3239 
3240     l_api_name    VARCHAR2(35)    := 'process_securitization_stream';
3241     l_proc_name   VARCHAR2(35)    := 'process_securitization_stream';
3242     l_api_version CONSTANT NUMBER := 1;
3243 
3244   CURSOR l_okl_trbk_txn_csr
3245   IS
3246     SELECT date_transaction_occurred
3247     FROM   okl_trx_contracts
3248     WHERE  id   = p_rbk_trx_id;
3249 
3250   CURSOR l_okl_tcn_type_csr
3251   IS
3252   SELECT trxp.tcn_type,
3253          trxp.qte_id,
3254          trxp.date_transaction_occurred,
3255          qtev.qtp_code
3256   FROM   okl_trx_contracts trxp,
3257          okl_trx_contracts trxc,
3258          okl_trx_quotes_v qtev
3259   WHERE  trxp.id = trxc.source_trx_id
3260   AND    trxc.id = p_rbk_trx_id
3261   AND    trxc.tsu_code <> 'PROCESSED'
3262   AND    qtev.id = trxp.qte_id;
3263 
3264 
3265 
3266     --Bug 6740000 ssdeshpa start
3267     --Changed Stream Type Subclass to 'INVESTOR_DISBURSEMENT'
3268     CURSOR disb_strm_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3269     SELECT strm.id
3270     FROM   okl_streams strm,
3271            okl_strm_type_v TYPE
3272     WHERE  TYPE.id                   = strm.sty_id
3273     AND    TYPE.stream_type_subclass = 'INVESTOR_DISBURSEMENT'
3274     AND    strm.khr_id               = p_chr_id
3275     AND    strm.say_code             = 'CURR';
3276     --Bug 6740000 ssdeshpa End
3277 
3278     CURSOR accu_strm_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3279     SELECT strm.id
3280     FROM   okl_streams strm,
3281            okl_strm_type_v TYPE
3282     WHERE  TYPE.id       = strm.sty_id
3283     AND    TYPE.stream_type_purpose IN (
3284                          'INVESTOR_RENTAL_ACCRUAL',
3285                          'INVESTOR_PRE_TAX_INCOME',
3286                          'INVESTOR_INTEREST_INCOME',
3287                          'INVESTOR_VARIABLE_INTEREST'
3288                         )
3289     AND    strm.khr_id   = p_chr_id
3290     AND    strm.say_code = 'CURR';
3291 
3292     CURSOR l_okl_alt_kle_csr(p_qte_id IN NUMBER)
3293     IS
3294     SELECT kle_id
3295     FROM   okl_txl_quote_lines_v
3296     WHERE  qte_id = p_qte_id
3297     AND    qlt_code = 'AMCFIA';
3298 
3299     --Bug 6740000 ssdeshpa start
3300     --Cursor to get the deal Type for Contract
3301     CURSOR get_deal_type_csr(p_chr_id OKL_K_HEADERS.ID%TYPE)
3302     IS
3303      SELECT DEAL_TYPE
3304      FROM OKL_K_HEADERS
3305      WHERE ID = p_chr_id;
3306 
3307      l_deal_type OKL_K_HEADERS.DEAL_TYPE%TYPE;
3308      --Bug 6740000 ssdeshpa End
3309 
3310     i NUMBER := 0;
3311     l_disb_strm_tbl OKL_STREAMS_PUB.stmv_tbl_type;
3312     x_disb_strm_tbl OKL_STREAMS_PUB.stmv_tbl_type;
3313 
3314     l_accu_strm_tbl OKL_STREAMS_PUB.stmv_tbl_type;
3315     x_accu_strm_tbl OKL_STREAMS_PUB.stmv_tbl_type;
3316 
3317 
3318     lx_value VARCHAR2(1);
3319     lx_inv_agmt_chr_id_tbl Okl_Securitization_Pvt.inv_agmt_chr_id_tbl_type;
3320 
3321     secu_failed EXCEPTION;
3322 
3323     --l_stream_type_subclass         okl_strm_type_b.stream_type_subclass%TYPE DEFAULT NULL;
3324     l_alt_purchase BOOLEAN := FALSE;
3325 
3326     BEGIN
3327       IF (G_DEBUG_ENABLED = 'Y') THEN
3328         G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3329       END IF;
3330 
3331       x_return_status := OKC_API.G_RET_STS_SUCCESS;
3332 
3333       --
3334       -- Check for Securitized Contract
3335       --
3336       FOR l_okl_trbk_txn_rec IN l_okl_trbk_txn_csr
3337       LOOP
3338 
3339       Okl_Securitization_Pvt.check_khr_securitized(
3340                                                    p_api_version         => 1.0,
3341                                                    p_init_msg_list       => OKC_API.G_FALSE,
3342                                                    x_return_status       => x_return_status,
3343                                                    x_msg_count           => x_msg_count,
3344                                                    x_msg_data            => x_msg_data,
3345                                                    p_khr_id              => p_chr_id,
3346                                                    p_effective_date      => l_okl_trbk_txn_rec.date_transaction_occurred,
3347                                                    x_value               => lx_value,
3348                                                    x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl
3349                                                   );
3350 
3351       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3352          RAISE secu_failed;
3353       END IF;
3354 
3355       IF (lx_value = OKL_API.G_TRUE) THEN
3356 	      --
3357 	      -- HISTorize disbursement streams, with subclass = 'INVESTOR_DISBURSEMENT'
3358 	      --
3359 	      FOR disb_strm_rec IN disb_strm_csr (p_chr_id)
3360 	      LOOP
3361 		 i := disb_strm_csr%ROWCOUNT;
3362 		 l_disb_strm_tbl(i).id        := disb_strm_rec.id;
3363 		 l_disb_strm_tbl(i).say_code  := 'HIST';
3364 		 l_disb_strm_tbl(i).active_yn := 'N';
3365      l_disb_strm_tbl(i).date_history  := SYSDATE;
3366 	      END LOOP;
3367 
3368 	      IF (l_disb_strm_tbl.COUNT > 0) THEN
3369 		  okl_streams_pub.update_streams(
3370 						 p_api_version    => 1.0,
3371 						 p_init_msg_list  => OKC_API.G_FALSE,
3372 						 x_return_status  => x_return_status,
3373 						 x_msg_count      => x_msg_count,
3374 						 x_msg_data       => x_msg_data,
3375 						 p_stmv_tbl       => l_disb_strm_tbl,
3376 						 x_stmv_tbl       => x_disb_strm_tbl
3377 					       );
3378 
3379 		   IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3380 		     RAISE secu_failed;
3381 	    	END IF;
3382 	      END IF;
3383 
3384              FOR l_okl_tcn_type_rec IN l_okl_tcn_type_csr
3385    	     LOOP
3386 
3387 		  IF l_okl_tcn_type_rec.tcn_type = 'ALT' THEN
3388 		    IF l_okl_tcn_type_rec.qtp_code IN (
3389 		             'TER_PURCHASE',       -- Termination - With Purchase
3390 		             'TER_ROLL_PURCHASE',  -- Termination - Rollover To New Contract With Purchase
3391 		             'TER_RECOURSE',       -- Termination - Recourse With Purchase
3392 		             'TER_MAN_PURCHASE'    -- Termination - Manual With Purchase
3393 		            )
3394 		    THEN
3395 		       l_alt_purchase := TRUE;
3396 		    ELSE -- Termination without purchase
3397 		      l_alt_purchase := FALSE;
3398 		    END IF;
3399 
3400 	            --Bug 6740000 ssdeshpa Start
3401                     --get the Deal type for Contract
3402                     OPEN get_deal_type_csr(p_chr_id);
3403                     FETCH get_deal_type_csr INTO l_deal_type;
3404                     CLOSE get_deal_type_csr;
3405                     --Bug 6740000 ssdeshpa end
3406 
3407 	            FOR l_okl_alt_kle_rec IN l_okl_alt_kle_csr(l_okl_tcn_type_rec.qte_id)
3408 		    LOOP
3409 
3410                       --Bug 6740000 ssdeshpa Start
3411                           IF(l_deal_type IN('LEASEOP','LEASEDF','LEASEST')) THEN
3412 		              Okl_Securitization_Pvt.modify_pool_contents(
3413 								  p_api_version         => 1.0,
3414 								  p_init_msg_list       => OKC_API.G_FALSE,
3415 								  x_return_status       => x_return_status,
3416 								  x_msg_count           => x_msg_count,
3417 								  x_msg_data            => x_msg_data,
3418 								  p_transaction_reason  => Okl_Securitization_Pvt.G_TRX_REASON_ASSET_TERMINATION,
3419 								  p_khr_id              => p_chr_id,
3420 								  p_kle_id              => l_okl_alt_kle_rec.kle_id,
3421 								  p_transaction_date    => l_okl_tcn_type_rec.date_transaction_occurred,
3422 								  p_effective_date      => l_okl_tcn_type_rec.date_transaction_occurred,
3423                                                                   p_stream_type_subclass => 'RENT'
3424 								 );
3425 			  ELSIF(l_deal_type IN('LOAN', 'LOAN-REVOLVING')) THEN
3426 		              Okl_Securitization_Pvt.modify_pool_contents(
3427 								  p_api_version         => 1.0,
3428 								  p_init_msg_list       => OKC_API.G_FALSE,
3429 								  x_return_status       => x_return_status,
3430 								  x_msg_count           => x_msg_count,
3431 								  x_msg_data            => x_msg_data,
3432 								  p_transaction_reason  => Okl_Securitization_Pvt.G_TRX_REASON_ASSET_TERMINATION,
3433 								  p_khr_id              => p_chr_id,
3434 								  p_kle_id              => l_okl_alt_kle_rec.kle_id,
3435 								  p_transaction_date    => l_okl_tcn_type_rec.date_transaction_occurred,
3436 								  p_effective_date      => l_okl_tcn_type_rec.date_transaction_occurred,
3437                                                                   p_stream_type_subclass => 'LOAN_PAYMENT'
3438 								 );
3439                       END IF;
3440                       --Bug 6740000 ssdeshpa End
3441 		      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3442 			   RAISE secu_failed;
3443 		      END IF;
3444 
3445 		      IF l_alt_purchase THEN
3446 			      Okl_Securitization_Pvt.modify_pool_contents(
3447 									  p_api_version         => 1.0,
3448 									  p_init_msg_list       => OKC_API.G_FALSE,
3449 									  x_return_status       => x_return_status,
3450 									  x_msg_count           => x_msg_count,
3451 									  x_msg_data            => x_msg_data,
3452 									  p_transaction_reason  => Okl_Securitization_Pvt.G_TRX_REASON_ASSET_DISPOSAL,
3453 									  p_khr_id              => p_chr_id,
3454 									  p_kle_id              => l_okl_alt_kle_rec.kle_id,
3455 									  p_transaction_date    => l_okl_tcn_type_rec.date_transaction_occurred,
3456 									  p_effective_date      => l_okl_tcn_type_rec.date_transaction_occurred,
3457 									  p_stream_type_subclass => 'RESIDUAL'
3458 									 );
3459 			      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3460 				 RAISE secu_failed;
3461 			      END IF;
3462                END IF;
3463 
3464 		      END LOOP; -- l_okl_alt_kle_rec
3465 
3466 		  END IF; -- 		  l_okl_tcn_type_rec.tcn_type = 'ALT'
3467 
3468 
3469 
3470 	      END LOOP; -- l_okl_tcn_type_csr
3471 
3472 
3473 
3474    	              --
3475 		      -- Create Pool transaction for Mass Rebook
3476 		      --
3477 		      Okl_Securitization_Pvt.modify_pool_contents(
3478 								  p_api_version         => 1.0,
3479 								  p_init_msg_list       => OKC_API.G_FALSE,
3480 								  x_return_status       => x_return_status,
3481 								  x_msg_count           => x_msg_count,
3482 								  x_msg_data            => x_msg_data,
3483 								  p_transaction_reason  => Okl_Securitization_Pvt.G_TRX_REASON_CONTRACT_REBOOK,
3484 								  p_khr_id              => p_chr_id,
3485 								  p_transaction_date    => l_okl_trbk_txn_rec.date_transaction_occurred,
3486 								  p_effective_date      => l_okl_trbk_txn_rec.date_transaction_occurred
3487 								 );
3488 
3489 		      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3490     			 RAISE secu_failed;
3491 		      END IF;
3492 
3493 -- Bug# 4775555: Start
3494 -- Accrual Streams will now be Historized in OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS
3495 -- This API will create the new accrual streams, link the old and new streams
3496 -- and then Historize the old streams
3497 /*
3498 	      --
3499 	      -- HISTorize accrual streams
3500 	      --
3501 	      FOR accu_strm_rec IN accu_strm_csr (p_chr_id)
3502 	      LOOP
3503 		 i := accu_strm_csr%ROWCOUNT;
3504 		 l_accu_strm_tbl(i).id        := accu_strm_rec.id;
3505 		 l_accu_strm_tbl(i).say_code  := 'HIST';
3506 		 l_accu_strm_tbl(i).active_yn := 'N';
3507 	      END LOOP;
3508 
3509 	      IF (l_accu_strm_tbl.COUNT > 0) THEN
3510 		  okl_streams_pub.update_streams(
3511 						 p_api_version    => 1.0,
3512 						 p_init_msg_list  => OKC_API.G_FALSE,
3513 						 x_return_status  => x_return_status,
3514 						 x_msg_count      => x_msg_count,
3515 						 x_msg_data       => x_msg_data,
3516 						 p_stmv_tbl       => l_accu_strm_tbl,
3517 						 x_stmv_tbl       => x_accu_strm_tbl
3518 					       );
3519 
3520 		IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3521 		   RAISE secu_failed;
3522 		END IF;
3523 	      END IF;
3524 */
3525 -- Bug# 4775555: End
3526 
3527 	      --
3528 	      -- Regenerate disbursement streams
3529 	      --
3530 	      okl_stream_generator_pvt.create_disb_streams(
3531 							   p_api_version         => 1.0,
3532 							   p_init_msg_list       => OKC_API.G_FALSE,
3533 							   x_return_status       => x_return_status,
3534 							   x_msg_count           => x_msg_count,
3535 							   x_msg_data            => x_msg_data,
3536 							   p_contract_id         => p_chr_id
3537 							  );
3538 
3539 	      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3540 		 RAISE secu_failed;
3541 	      END IF;
3542 
3543             -- Bug# 4775555
3544             --
3545             -- Regenerate Present Value Disbursement streams
3546             --
3547             okl_stream_generator_pvt.create_pv_streams(
3548                                        p_api_version         => 1.0,
3549                                        p_init_msg_list       => OKC_API.G_FALSE,
3550                                        x_return_status       => x_return_status,
3551                                        x_msg_count           => x_msg_count,
3552                                        x_msg_data            => x_msg_data,
3553                                        p_contract_id         => p_chr_id
3554                                        );
3555 
3556             IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3557               RAISE secu_failed;
3558             END IF;
3559             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3560                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After regerating Present Value Disbursement streams');
3561             END IF;
3562 
3563 	      --
3564 	      -- Generate Investor accrual streams
3565 	      --
3566 	      OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS(
3567 						 p_api_version    => 1.0,
3568 						 p_init_msg_list  => OKL_API.G_FALSE,
3569 						 x_return_status  => x_return_status,
3570 						 x_msg_count      => x_msg_count,
3571 						 x_msg_data       => x_msg_data,
3572 						 p_khr_id         => p_chr_id
3573 						);
3574 
3575 	      IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3576 		 RAISE secu_failed;
3577 	      END IF;
3578 
3579 
3580       END IF;
3581       END LOOP; -- l_okl_trbk_txn_csr
3582       RETURN;
3583 
3584     EXCEPTION
3585         WHEN secu_failed THEN
3586            NULL; -- excception is handled by caller
3587 
3588         WHEN OTHERS THEN
3589            x_return_status := OKC_API.HANDLE_EXCEPTIONS(
3590   			p_api_name  => l_api_name,
3591   			p_pkg_name  => G_PKG_NAME,
3592   			p_exc_name  => 'OTHERS',
3593   			x_msg_count => x_msg_count,
3594   			x_msg_data  => x_msg_data,
3595   			p_api_type  => G_API_TYPE);
3596 
3597     END process_securitization_stream;
3598 -- Bug# 4398936
3599 
3600 -- Bug# 5038395
3601 ------------------------------------------------------------------------------
3602 -- PROCEDURE mass_rebook_activate
3603 -- This procedure performs Approval and Activation for Mass rebook. This will
3604 -- be called from mass_rebook_after_yield that is called by Stream generation
3605 -- process after completing stream generation during mass rebook. This procedure
3606 -- will also be called from Submit button on Contract Booking UI if the user
3607 -- is trying to activate a contract for which Mass rebook is in progress.
3608 -- Calls:
3609 -- Called by:
3610 ------------------------------------------------------------------------------
3611   PROCEDURE mass_rebook_activate(
3612                                     p_api_version        IN  NUMBER,
3613                                     p_init_msg_list      IN  VARCHAR2,
3614                                     x_return_status      OUT NOCOPY VARCHAR2,
3615                                     x_msg_count          OUT NOCOPY NUMBER,
3616                                     x_msg_data           OUT NOCOPY VARCHAR2,
3617                                     p_chr_id             IN  NUMBER
3618                                    ) IS
3619 
3620   l_api_name    VARCHAR2(35)    := 'mass_rebook_activate';
3621   l_proc_name   VARCHAR2(35)    := 'MASS_REBOOK_ACTIVATE';
3622   l_api_version NUMBER          := 1.0;
3623 
3624   CURSOR check_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3625   SELECT DISTINCT
3626          A.REQUEST_NAME,
3627          A.KHR_ID,
3628          A.TRANSACTION_ID,
3629          --Bug# 4107330
3630          A.TRANSACTION_DATE,
3631          B.MULTI_GAAP_YN,  -- MGAAP 7263041
3632          C.REPORTING_PDT_ID  -- MGAAP 7263041
3633   FROM   okl_rbk_selected_contract A,
3634          okl_k_headers B,
3635          okl_products C
3636   WHERE  A.khr_id = p_chr_id
3637   AND    NVL(A.status,'NEW') = 'UNDER REVISION'
3638   AND    A.KHR_ID = B.ID -- MGAAP 7263041
3639   AND    B.PDT_ID = C.ID; -- MGAAP 7263041
3640   --AND    NVL(status,'NEW') <> 'PROCESSED';
3641 
3642 
3643   CURSOR parent_trx_csr (p_trx_id NUMBER) IS
3644   SELECT source_trx_id, source_trx_type
3645   FROM   okl_trx_contracts
3646   WHERE  id        =  p_trx_id
3647   AND    tsu_code <> 'PROCESSED';
3648 
3649   CURSOR parent_tcn_type_csr (p_trx_id NUMBER) IS
3650   select tcn_type
3651   from   okl_trx_contracts
3652   where id = p_trx_id;
3653 
3654   l_rbk_id             okl_rbk_selected_contract.id%TYPE;
3655   l_rbk_khr_id         okl_rbk_selected_contract.khr_id%TYPE;
3656   l_rbk_transaction_id okl_rbk_selected_contract.transaction_id%TYPE;
3657 
3658   -- MGAAP start 7263041
3659   l_multi_gaap_yn      okl_k_headers.multi_gaap_yn%TYPE;
3660   l_reporting_pdt_id   okl_products.reporting_pdt_id%TYPE;
3661   -- MGAAP end 7263041
3662 
3663   --Bug# 4107330
3664   l_rbk_trx_date       okl_rbk_selected_contract.transaction_date%TYPE;
3665   l_request_name       okl_rbk_selected_contract.request_name%TYPE;
3666 
3667   l_parent_tcn_type    okl_trx_contracts.tcn_type%TYPE;
3668   l_mstv_tbl           mstv_tbl_type;
3669   x_mstv_tbl           mstv_tbl_type;
3670 
3671   l_tcnv_rec           tcnv_rec_type;
3672   x_tcnv_rec           tcnv_rec_type;
3673 
3674   l_am_tcnv_rec        tcnv_rec_type;
3675   x_am_tcnv_rec        tcnv_rec_type;
3676 
3677   not_to_process       EXCEPTION;
3678 
3679   -- dedey,Bug#4264314
3680   lx_trx_number OKL_TRX_CONTRACTS.trx_number%TYPE := null; -- MGAAP 7263041
3681   l_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
3682   l_stream_tbl  OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
3683   -- dedey,Bug#4264314
3684 
3685   --Bug# 4775555
3686   l_inv_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
3687   l_inv_stream_tbl  OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
3688 
3689   --Bug# 9191475
3690   lx_trxnum_tbl      OKL_GENERATE_ACCRUALS_PVT.trxnum_tbl_type;
3691   l_trxnum_init_tbl  OKL_GENERATE_ACCRUALS_PVT.trxnum_tbl_type;
3692 
3693   BEGIN
3694     IF (G_DEBUG_ENABLED = 'Y') THEN
3695       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3696     END IF;
3697 
3698      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3699             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
3700      END IF;
3701      x_return_status := OKL_API.G_RET_STS_SUCCESS;
3702 
3703      -- call START_ACTIVITY to create savepoint, check compatibility
3704      -- and initialize message list
3705      x_return_status := OKL_API.START_ACTIVITY(
3706                                                p_api_name      => l_api_name,
3707                                                p_pkg_name      => G_PKG_NAME,
3708                                                p_init_msg_list => p_init_msg_list,
3709                                                l_api_version   => l_api_version,
3710                                                p_api_version   => p_api_version,
3711                                                p_api_type      => G_API_TYPE,
3712                                                x_return_status => x_return_status);
3713 
3714      -- check if activity started successfully
3715      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3716        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3717      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3718        raise OKL_API.G_EXCEPTION_ERROR;
3719      END IF;
3720 
3721      --
3722      -- Check contract for Mass Rebook
3723      --
3724      OPEN check_csr(p_chr_id);
3725      --Bug# 4107330
3726      FETCH check_csr INTO l_request_name,
3727                           l_rbk_khr_id,
3728                           l_rbk_transaction_id,
3729                           l_rbk_trx_date,
3730                           l_multi_gaap_yn, -- MGAAP 7263041
3731                           l_reporting_pdt_id; -- MGAAP 7263041
3732      IF check_csr%NOTFOUND THEN
3733         RAISE not_to_process; -- Not a candidate for mass re-book
3734      END IF;
3735      CLOSE check_csr;
3736 
3737      --insert into dd_dummy values (1, 'Selected for Mass rebook');
3738 
3739      --
3740      -- Process after Yield for this contract
3741      --
3742      --debug_message('Submit for Approval...');
3743      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3744             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Approve Contract...');
3745      END IF;
3746      --Bug# 2566822 : Integration with AME/WF for approval
3747      --okl_contract_book_pub.submit_for_approval(
3748      okl_contract_book_pvt.approve_contract(
3749              p_api_version     => p_api_version,
3750              p_init_msg_list   => p_init_msg_list,
3751              x_return_status   => x_return_status,
3752              x_msg_count       => x_msg_count,
3753              x_msg_data        => x_msg_data,
3754              p_chr_id          => p_chr_id
3755             );
3756 
3757      IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3758        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3759      ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3760        RAISE Okl_Api.G_EXCEPTION_ERROR;
3761      END IF;
3762 
3763     -- dedey,Bug#4264314
3764 
3765      OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
3766      OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
3767        p_api_version     => p_api_version,
3768        p_init_msg_list   => p_init_msg_list,
3769        x_return_status   => x_return_status,
3770        x_msg_count       => x_msg_count,
3771        x_msg_data        => x_msg_data,
3772        p_rbk_khr_id      => p_chr_id,
3773        p_orig_khr_id     => p_chr_id,
3774        p_trx_id          => l_rbk_transaction_id,
3775        p_trx_date        => sysdate, -- 4583578 passing sysdate instead of rebook date
3776        x_accrual_rec     => l_accrual_rec,
3777        x_stream_tbl      => l_stream_tbl);
3778 
3779      IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3780        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3781      ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3782        RAISE Okl_Api.G_EXCEPTION_ERROR;
3783      END IF;
3784 
3785     -- dedey,Bug#4264314
3786 
3787       -- Bug# 4398936
3788       --
3789       -- Securitization stream processing
3790       --
3791       process_securitization_stream(p_chr_id   => p_chr_id,
3792                                     p_rbk_trx_id   => l_rbk_transaction_id,
3793                                     x_return_status => x_return_status,
3794                                     x_msg_count     => x_msg_count,
3795                                     x_msg_data      => x_msg_data);
3796 
3797       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3798         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3799       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3800         raise OKL_API.G_EXCEPTION_ERROR;
3801       END IF;
3802       -- Bug# 4398936
3803 
3804      --insert into dd_dummy values (2, 'Approval Done');
3805      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3806             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Submit for Activation ...');
3807      END IF;
3808 
3809      okl_contract_book_pub.activate_contract(
3810              p_api_version     => p_api_version,
3811              p_init_msg_list   => p_init_msg_list,
3812              x_return_status   => x_return_status,
3813              x_msg_count       => x_msg_count,
3814              x_msg_data        => x_msg_data,
3815              p_chr_id          => p_chr_id
3816             );
3817 
3818      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3819        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3820      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3821        raise OKL_API.G_EXCEPTION_ERROR;
3822      END IF;
3823 
3824      -- R12B Authoring OA Migration
3825      -- Update the status of the Submit Contract task to Complete
3826      OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
3827        p_api_version        => p_api_version,
3828        p_init_msg_list      => p_init_msg_list,
3829        x_return_status      => x_return_status,
3830        x_msg_count          => x_msg_count,
3831        x_msg_data           => x_msg_data,
3832        p_khr_id             => p_chr_id ,
3833        p_prog_short_name    => OKL_BOOK_CONTROLLER_PVT.G_SUBMIT_CONTRACT,
3834        p_progress_status    => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
3835 
3836      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3837        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3838      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3839        raise OKL_API.G_EXCEPTION_ERROR;
3840      END IF;
3841 
3842      --insert into dd_dummy values (3, 'Activation Done');
3843      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3844             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Activation Done');
3845      END IF;
3846 
3847      -- Bug# 4775555: Start
3848      --
3849      -- Create Investor Disbursement Adjustment
3850      --
3851      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3852             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call create_inv_disb_adjustment');
3853      END IF;
3854      OKL_CONTRACT_REBOOK_PVT.create_inv_disb_adjustment(
3855                          p_api_version     => p_api_version,
3856                          p_init_msg_list   => p_init_msg_list,
3857                          x_return_status   => x_return_status,
3858                          x_msg_count       => x_msg_count,
3859                          x_msg_data        => x_msg_data,
3860                          p_orig_khr_id     => p_chr_id
3861                          );
3862      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3863             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call create_inv_disb_adjustment'||x_return_status);
3864      END IF;
3865 
3866      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3867        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3868      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3869        raise OKL_API.G_EXCEPTION_ERROR;
3870      END IF;
3871      -- Bug# 4775555: End
3872 
3873      --Bug# 4107330
3874      -- This call is moved from Okl_Activate_Contract_Pub(OKLPACOB.pls)
3875      -- as the accrual adjustment api requires the Contract
3876      -- status to be 'BOOKED' before accrual adjustments can be
3877      -- generated.
3878 
3879      -- dedey,Bug#4264314
3880 
3881        IF(l_stream_tbl.COUNT>0) THEN
3882         OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
3883           p_api_version    => p_api_version,
3884           p_init_msg_list  => p_init_msg_list,
3885           x_return_status  => x_return_status,
3886           x_msg_count      => x_msg_count,
3887           x_msg_data       => x_msg_data ,
3888           --Bug# 9191475
3889           --x_trx_number     => lx_trx_number,
3890           x_trx_tbl        => lx_trxnum_tbl,
3891           p_accrual_rec    => l_accrual_rec,
3892           p_stream_tbl     => l_stream_tbl);
3893 
3894       -- dedey,Bug#4264314
3895 
3896         IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3897           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3898         ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3899           RAISE Okl_Api.G_EXCEPTION_ERROR;
3900         END IF;
3901 
3902       -- dedey,Bug#4264314
3903       END IF;
3904       -- dedey,Bug#4264314
3905 
3906      -- MGAAP start 7263041
3907      IF (l_multi_gaap_yn = 'Y') THEN
3908 
3909        OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; -- MGAAP 7263041
3910 
3911        OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
3912          p_api_version     => p_api_version,
3913          p_init_msg_list   => p_init_msg_list,
3914          x_return_status   => x_return_status,
3915          x_msg_count       => x_msg_count,
3916          x_msg_data        => x_msg_data,
3917          p_rbk_khr_id      => p_chr_id,
3918          p_orig_khr_id     => p_chr_id,
3919          p_trx_id          => l_rbk_transaction_id,
3920          p_trx_date        => sysdate, -- 4583578 passing sysdate instead of rebook date
3921          x_accrual_rec     => l_accrual_rec,
3922          x_stream_tbl      => l_stream_tbl);
3923 
3924        OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
3925 
3926        IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3927          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3928        ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3929          RAISE Okl_Api.G_EXCEPTION_ERROR;
3930        END IF;
3931 
3932        IF(l_stream_tbl.COUNT>0) THEN
3933         --Bug# 9191475
3934         --l_accrual_rec.trx_number := lx_trx_number;
3935 
3936         OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
3937           p_api_version    => p_api_version,
3938           p_init_msg_list  => p_init_msg_list,
3939           x_return_status  => x_return_status,
3940           x_msg_count      => x_msg_count,
3941           x_msg_data       => x_msg_data ,
3942           --Bug# 9191475
3943           --x_trx_number     => lx_trx_number,
3944           x_trx_tbl        => lx_trxnum_tbl,
3945           p_accrual_rec    => l_accrual_rec,
3946           p_stream_tbl     => l_stream_tbl,
3947           p_representation_type     => 'SECONDARY');
3948 
3949 
3950         IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3951           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3952         ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3953           RAISE Okl_Api.G_EXCEPTION_ERROR;
3954         END IF;
3955 
3956       END IF;
3957 
3958      END IF;
3959      -- MGAAP end 7263041
3960 
3961 
3962      -- Bug# 4775555: Start
3963      --
3964      -- Create Investor Accrual Adjustment
3965      --
3966      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3967             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call calc_inv_acc_adjustment');
3968      END IF;
3969      OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
3970                          p_api_version     => p_api_version,
3971                          p_init_msg_list   => p_init_msg_list,
3972                          x_return_status   => x_return_status,
3973                          x_msg_count       => x_msg_count,
3974                          x_msg_data        => x_msg_data,
3975                          p_orig_khr_id     => p_chr_id,
3976                          p_trx_id          => l_rbk_transaction_id,
3977                          p_trx_date        => sysdate,
3978                          x_inv_accrual_rec => l_inv_accrual_rec,
3979                          x_inv_stream_tbl  => l_inv_stream_tbl
3980                          );
3981 
3982      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3983             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call calc_inv_acc_adjustment'||x_return_status);
3984      END IF;
3985 
3986      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3987        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3988      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3989        raise OKL_API.G_EXCEPTION_ERROR;
3990      END IF;
3991 
3992      lx_trx_number := null; -- MGAAP 7263041
3993      --Bug# 9191475
3994      lx_trxnum_tbl := l_trxnum_init_tbl;
3995      IF (l_inv_stream_tbl.COUNT > 0) THEN
3996        OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
3997           p_api_version    => p_api_version,
3998           p_init_msg_list  => p_init_msg_list,
3999           x_return_status  => x_return_status,
4000           x_msg_count      => x_msg_count,
4001           x_msg_data       => x_msg_data ,
4002           --Bug# 9191475
4003           --x_trx_number     => lx_trx_number,
4004           x_trx_tbl        => lx_trxnum_tbl,
4005           p_accrual_rec    => l_inv_accrual_rec,
4006           p_stream_tbl     => l_inv_stream_tbl);
4007 
4008        IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4009          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4010        ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4011          RAISE Okl_Api.G_EXCEPTION_ERROR;
4012        END IF;
4013      END IF;
4014      -- Bug# 4775555: End
4015 
4016      -- MGAAP start 7263041
4017      IF (l_multi_gaap_yn = 'Y') THEN
4018        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4019               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call calc_inv_acc_adjustment for SECONDARY');
4020        END IF;
4021 
4022        OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4023        OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
4024                            p_api_version     => p_api_version,
4025                            p_init_msg_list   => p_init_msg_list,
4026                            x_return_status   => x_return_status,
4027                            x_msg_count       => x_msg_count,
4028                            x_msg_data        => x_msg_data,
4029                            p_orig_khr_id     => p_chr_id,
4030                            p_trx_id          => l_rbk_transaction_id,
4031                            p_trx_date        => sysdate,
4032                            x_inv_accrual_rec => l_inv_accrual_rec,
4033                            x_inv_stream_tbl  => l_inv_stream_tbl,
4034                            p_product_id      => l_reporting_pdt_id
4035                            );
4036 
4037        OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4038 
4039        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4040               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After call calc_inv_acc_adjustment'||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        IF (l_inv_stream_tbl.COUNT > 0) THEN
4050          --Bug# 9191475
4051          --l_inv_accrual_rec.trx_number := lx_trx_number;
4052          OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
4053             p_api_version    => p_api_version,
4054             p_init_msg_list  => p_init_msg_list,
4055             x_return_status  => x_return_status,
4056             x_msg_count      => x_msg_count,
4057             x_msg_data       => x_msg_data ,
4058             --Bug# 9191475
4059             --x_trx_number     => lx_trx_number,
4060             x_trx_tbl        => lx_trxnum_tbl,
4061             p_accrual_rec    => l_inv_accrual_rec,
4062             p_stream_tbl     => l_inv_stream_tbl,
4063             p_representation_type     => 'SECONDARY');
4064 
4065          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4066            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4067          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4068            RAISE Okl_Api.G_EXCEPTION_ERROR;
4069          END IF;
4070        END IF;
4071 
4072      END IF;
4073      -- MGAAP end 7263041
4074 
4075      --
4076      -- Update source transaction to PROCESSED, if any
4077      --
4078      FOR parent_trx_rec IN parent_trx_csr (l_rbk_transaction_id)
4079      LOOP
4080 
4081         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4082                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Source Trx ID: '|| parent_trx_rec.source_trx_id);
4083         END IF;
4084 
4085         IF (parent_trx_rec.source_trx_id IS NOT NULL) THEN
4086 
4087           begin
4088             open parent_tcn_type_csr(parent_trx_rec.source_trx_id);
4089             FETCH parent_tcn_type_csr INTO l_parent_tcn_type;
4090 
4091             IF parent_tcn_type_csr%NOTFOUND THEN
4092               x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4093               CLOSE parent_tcn_type_csr;
4094               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4095             END IF;
4096             CLOSE parent_tcn_type_csr;
4097           end;
4098 
4099          IF (l_parent_tcn_type = 'PPD') THEN
4100           --DEBUG
4101           --
4102           -- Cancel PPD Amount, if any
4103           --
4104            l_am_tcnv_rec.id                      := parent_trx_rec.source_trx_id;
4105            l_am_tcnv_rec.tsu_code                := 'PROCESSED';
4106 
4107            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4108                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'before update_trx_contracts');
4109            END IF;
4110 
4111            Okl_Trx_Contracts_Pub.update_trx_contracts(
4112                                                p_api_version   => l_api_version,
4113                                                p_init_msg_list => OKL_API.G_FALSE,
4114                                                x_return_status => x_return_status,
4115                                                x_msg_count     => x_msg_count,
4116                                                x_msg_data      => x_msg_data,
4117                                                p_tcnv_rec      => l_am_tcnv_rec,
4118                                                x_tcnv_rec      => x_am_tcnv_rec
4119                                               );
4120 
4121            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4122                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_trx_contracts: '||x_return_status);
4123            END IF;
4124 
4125            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4126              raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4127            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4128              raise OKL_API.G_EXCEPTION_ERROR;
4129            END IF;
4130 
4131            okl_api.set_message('OKL','AM','Term trx updated', parent_trx_rec.source_trx_id);
4132 
4133           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4134                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Cancel PPD : '||x_return_status);
4135           END IF;
4136           OKL_CS_PRINCIPAL_PAYDOWN_PUB.cancel_ppd(
4137                                  p_api_version    => 1.0,
4138                                  p_init_msg_list  => OKL_API.G_FALSE,
4139                                  x_return_status  => x_return_status,
4140                                  x_msg_count      => x_msg_count,
4141                                  x_msg_data       => x_msg_data,
4142                                  p_khr_id         => p_chr_id
4143                                );
4144           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4145                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Cancel PPD : '||x_return_status);
4146           END IF;
4147 
4148           okl_api.set_message('OKL','AM','After cancel PPD Amount', x_return_status);
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 
4157           ELSIF (l_parent_tcn_type = 'ALT') THEN
4158           --ELSE
4159            l_am_tcnv_rec.id                      := parent_trx_rec.source_trx_id;
4160            --Bug# 6043327 : R12B SLA impact
4161            --l_am_tcnv_rec.tsu_code                := 'PROCESSED';
4162            l_am_tcnv_rec.tmt_status_code                := 'PROCESSED';
4163            l_am_tcnv_rec.tmt_contract_updated_yn := 'Y';
4164 
4165            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4166                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'before update_trx_contracts');
4167            END IF;
4168 
4169            Okl_Trx_Contracts_Pub.update_trx_contracts(
4170                                                p_api_version   => l_api_version,
4171                                                p_init_msg_list => OKL_API.G_FALSE,
4172                                                x_return_status => x_return_status,
4173                                                x_msg_count     => x_msg_count,
4174                                                x_msg_data      => x_msg_data,
4175                                                p_tcnv_rec      => l_am_tcnv_rec,
4176                                                x_tcnv_rec      => x_am_tcnv_rec
4177                                               );
4178 
4179            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4180                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_trx_contracts: '||x_return_status);
4181            END IF;
4182 
4183            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4184              raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4185            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4186              raise OKL_API.G_EXCEPTION_ERROR;
4187            END IF;
4188 
4189            okl_api.set_message('OKL','AM','Term trx updated', parent_trx_rec.source_trx_id);
4190 
4191            -- Bug 4556370
4192            -- Cancel Termination Quote, if any
4193            --
4194            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4195                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Cancel Termination : '||x_return_status);
4196            END IF;
4197            OKL_AM_INTEGRATION_PVT.cancel_termination_quotes  (
4198                                                     p_api_version    => 1.0,
4199                                                     p_init_msg_list  => OKL_API.G_FALSE,
4200                                                     p_khr_id         => p_chr_id,
4201                                                     p_source_trx_id  => parent_trx_rec.source_trx_id,
4202                                                     p_source         => l_parent_tcn_type, -- 'ALT'
4203                                                     x_return_status  => x_return_status,
4204                                                     x_msg_count      => x_msg_count,
4205                                                     x_msg_data       => x_msg_data
4206                                                    );
4207            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4208                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Cancel Termination : '||x_return_status);
4209            END IF;
4210 
4211            okl_api.set_message('OKL','AM','After cancel term quote', x_return_status);
4212 
4213            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4214              raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4215            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4216              raise OKL_API.G_EXCEPTION_ERROR;
4217            END IF;
4218 
4219          END IF;
4220         END IF;
4221 
4222      END LOOP;
4223 
4224      --
4225      -- Update Transaction and Rebook status to PROCESSED
4226      --
4227 
4228      l_mstv_tbl(1).request_name := l_request_name;
4229      l_mstv_tbl(1).khr_id       := p_chr_id;
4230      l_mstv_tbl(1).status       := 'PROCESSED';
4231 
4232      okl_mass_rebook_pvt.update_mass_rbk_contract(
4233                                                   p_api_version    => l_api_version,
4234                                                   p_init_msg_list  => OKL_API.G_FALSE,
4235                                                   x_return_status  => x_return_status,
4236                                                   x_msg_count      => x_msg_count,
4237                                                   x_msg_data       => x_msg_data,
4238                                                   p_mstv_tbl       => l_mstv_tbl,
4239                                                   x_mstv_tbl       => x_mstv_tbl
4240                                                  );
4241 
4242 
4243      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4244             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_mas_rbk_contract: '||x_return_status);
4245      END IF;
4246 
4247      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4248        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4249      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4250        raise OKL_API.G_EXCEPTION_ERROR;
4251      END IF;
4252      --insert into dd_dummy values (4, 'update mass rebook status');
4253 
4254      l_tcnv_rec.id       := l_rbk_transaction_id;
4255      l_tcnv_rec.tsu_code := 'PROCESSED';
4256 
4257 
4258      Okl_Trx_Contracts_Pub.update_trx_contracts(
4259                                                p_api_version   => l_api_version,
4260                                                p_init_msg_list => OKL_API.G_FALSE,
4261                                                x_return_status => x_return_status,
4262                                                x_msg_count     => x_msg_count,
4263                                                x_msg_data      => x_msg_data,
4264                                                p_tcnv_rec      => l_tcnv_rec,
4265                                                x_tcnv_rec      => x_tcnv_rec
4266                                               );
4267 
4268      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4269             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_trx_contracts : '||x_return_status);
4270      END IF;
4271 
4272      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4273        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4274      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4275        raise OKL_API.G_EXCEPTION_ERROR;
4276      END IF;
4277 
4278      --insert into dd_dummy values (5, 'update trx status');
4279      --
4280      -- Update trx_asset status = 'PROCESSED'
4281      --
4282      update_trx_asset(
4283                       x_return_status => x_return_status,
4284                       x_msg_count     => x_msg_count,
4285                       x_msg_data      => x_msg_data,
4286                       p_chr_id        => p_chr_id,
4287                       p_status        => 'PROCESSED'
4288                      );
4289 
4290      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4291        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4292      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4293        raise OKL_API.G_EXCEPTION_ERROR;
4294      END IF;
4295 
4296      --insert into dd_dummy values (6, 'update trx asset status');
4297 
4298      --DEBUG
4299      --IF G_PPD_TRX_ID IS NOT NULL THEN  (To be checked by the API if for PPD)
4300      BEGIN
4301        --Create AR invoice for principal amount
4302        --Call BPD API to create AR journal entries
4303        OKL_CS_PRINCIPAL_PAYDOWN_PUB.invoice_apply_ppd(
4304                 p_api_version   => l_api_version,
4305                 p_init_msg_list => OKL_API.G_FALSE,
4306                 x_return_status => x_return_status,
4307                 x_msg_count     => x_msg_count,
4308                 x_msg_data      => x_msg_data,
4309                 p_khr_id        => p_chr_id,
4310                 p_trx_id        => l_rbk_transaction_id );
4311 
4312        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4313          x_return_status := OKL_API.G_RET_STS_SUCCESS;
4314        END IF;
4315 
4316        EXCEPTION WHEN OTHERS THEN
4317          null; -- For any errors during journal creation, we just ignore
4318          x_return_status := OKL_API.G_RET_STS_SUCCESS;
4319        END;
4320      --END IF;
4321 
4322      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4323                           x_msg_data    => x_msg_data);
4324 
4325 
4326      --insert into dd_dummy values (7, 'returning after yield');
4327      RETURN;
4328 
4329   EXCEPTION
4330       WHEN not_to_process THEN
4331           x_return_status := OKL_API.G_RET_STS_SUCCESS;
4332 
4333       when OKL_API.G_EXCEPTION_ERROR then
4334          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4335                         p_api_name  => l_api_name,
4336                         p_pkg_name  => G_PKG_NAME,
4337                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4338                         x_msg_count => x_msg_count,
4339                         x_msg_data  => x_msg_data,
4340                         p_api_type  => G_API_TYPE);
4341 
4342       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4343          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4344                         p_api_name  => l_api_name,
4345                         p_pkg_name  => G_PKG_NAME,
4346                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4347                         x_msg_count => x_msg_count,
4348                         x_msg_data  => x_msg_data,
4349                         p_api_type  => G_API_TYPE);
4350 
4351       when OTHERS then
4352          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4353                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error...');
4354          END IF;
4355          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4356                         p_api_name  => l_api_name,
4357                         p_pkg_name  => G_PKG_NAME,
4358                         p_exc_name  => 'OTHERS',
4359                         x_msg_count => x_msg_count,
4360                         x_msg_data  => x_msg_data,
4361                         p_api_type  => G_API_TYPE);
4362 END mass_rebook_activate;
4363 -- Bug# 5038395
4364 
4365 ------------------------------------------------------------------------------
4366 -- PROCEDURE mass_rebook_after_yield
4367 --   Call this process after yeild comes back. It will do rest of the mass
4368 --   rebook process. It first checks eligibility of a contract for Mass Rebook
4369 --   and then process the same.
4370 -- Calls:
4371 -- Called by:
4372 ------------------------------------------------------------------------------
4373   PROCEDURE mass_rebook_after_yield(
4374                                     p_api_version        IN  NUMBER,
4375                                     p_init_msg_list      IN  VARCHAR2,
4376                                     x_return_status      OUT NOCOPY VARCHAR2,
4377                                     x_msg_count          OUT NOCOPY NUMBER,
4378                                     x_msg_data           OUT NOCOPY VARCHAR2,
4379                                     p_chr_id             IN  OKC_K_HEADERS_V.ID%TYPE
4380                                    ) IS
4381 
4382   l_api_name    VARCHAR2(35)    := 'mass_rebook_after_yield';
4383   l_proc_name   VARCHAR2(35)    := 'MASS_REBOOK_AFTER_YIELD';
4384   l_api_version NUMBER          := 1.0;
4385 
4386   CURSOR check_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4387   SELECT DISTINCT
4388          REQUEST_NAME,
4389          KHR_ID,
4390          TRANSACTION_ID,
4391          --Bug# 4107330
4392          TRANSACTION_DATE
4393   FROM   okl_rbk_selected_contract
4394   WHERE  khr_id = p_chr_id
4395   AND    NVL(status,'NEW') = 'UNDER REVISION';
4396   --AND    NVL(status,'NEW') <> 'PROCESSED';
4397 
4398   l_rbk_khr_id         okl_rbk_selected_contract.khr_id%TYPE;
4399   l_rbk_transaction_id okl_rbk_selected_contract.transaction_id%TYPE;
4400   --Bug# 4107330
4401   l_rbk_trx_date       okl_rbk_selected_contract.transaction_date%TYPE;
4402   l_request_name       okl_rbk_selected_contract.request_name%TYPE;
4403 
4404   after_yield_failed   EXCEPTION;
4405   not_to_process       EXCEPTION;
4406 
4407   BEGIN
4408     IF (G_DEBUG_ENABLED = 'Y') THEN
4409       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4410     END IF;
4411 
4412      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4413             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
4414      END IF;
4415      x_return_status := OKL_API.G_RET_STS_SUCCESS;
4416 
4417      -- call START_ACTIVITY to create savepoint, check compatibility
4418      -- and initialize message list
4419      x_return_status := OKL_API.START_ACTIVITY(
4420                                                p_api_name      => l_api_name,
4421                                                p_pkg_name      => G_PKG_NAME,
4422                                                p_init_msg_list => p_init_msg_list,
4423                                                l_api_version   => l_api_version,
4424                                                p_api_version   => p_api_version,
4425                                                p_api_type      => G_API_TYPE,
4426                                                x_return_status => x_return_status);
4427 
4428      -- check if activity started successfully
4429      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4430        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4431      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4432        raise OKL_API.G_EXCEPTION_ERROR;
4433      END IF;
4434 
4435      --
4436      -- Check contract for Mass Rebook
4437      --
4438      OPEN check_csr(p_chr_id);
4439      --Bug# 4107330
4440      FETCH check_csr INTO l_request_name,
4441                           l_rbk_khr_id,
4442                           l_rbk_transaction_id,
4443                           l_rbk_trx_date;
4444      IF check_csr%NOTFOUND THEN
4445         RAISE not_to_process; -- Not a candidate for mass re-book
4446      END IF;
4447      CLOSE check_csr;
4448 
4449      --insert into dd_dummy values (1, 'Selected for Mass rebook');
4450 
4451      -- Bug# 5038395
4452      -- This procedure will handle approval and activation for
4453      -- mass rebook
4454      okl_mass_rebook_pvt.mass_rebook_activate(
4455              p_api_version     => p_api_version,
4456              p_init_msg_list   => p_init_msg_list,
4457              x_return_status   => x_return_status,
4458              x_msg_count       => x_msg_count,
4459              x_msg_data        => x_msg_data,
4460              p_chr_id          => p_chr_id
4461             );
4462 
4463      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4464        raise after_yield_failed;
4465      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4466        raise after_yield_failed;
4467      END IF;
4468 
4469      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4470                           x_msg_data    => x_msg_data);
4471 
4472 
4473      --insert into dd_dummy values (7, 'returning after yield');
4474      RETURN;
4475 
4476   EXCEPTION
4477       WHEN not_to_process THEN
4478           x_return_status := OKL_API.G_RET_STS_SUCCESS;
4479 
4480       WHEN after_yield_failed THEN
4481 
4482           -- Bug# 5038395
4483           -- Update status of Submit Contract task to Error
4484           OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
4485             p_api_version        => p_api_version,
4486             p_init_msg_list      => OKL_API.G_FALSE, --To retain message stack
4487             x_return_status      => x_return_status,
4488             x_msg_count          => x_msg_count,
4489             x_msg_data           => x_msg_data,
4490             p_khr_id             => p_chr_id ,
4491             p_prog_short_name    => OKL_BOOK_CONTROLLER_PVT.G_SUBMIT_CONTRACT ,
4492             p_progress_status    => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
4493 
4494           x_return_status := OKL_API.G_RET_STS_SUCCESS;
4495 
4496       when OKL_API.G_EXCEPTION_ERROR then
4497          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4498                         p_api_name  => l_api_name,
4499                         p_pkg_name  => G_PKG_NAME,
4500                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4501                         x_msg_count => x_msg_count,
4502                         x_msg_data  => x_msg_data,
4503                         p_api_type  => G_API_TYPE);
4504 
4505       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4506          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4507                         p_api_name  => l_api_name,
4508                         p_pkg_name  => G_PKG_NAME,
4509                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4510                         x_msg_count => x_msg_count,
4511                         x_msg_data  => x_msg_data,
4512                         p_api_type  => G_API_TYPE);
4513 
4514       when OTHERS then
4515          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4516                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error...');
4517          END IF;
4518          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4519                         p_api_name  => l_api_name,
4520                         p_pkg_name  => G_PKG_NAME,
4521                         p_exc_name  => 'OTHERS',
4522                         x_msg_count => x_msg_count,
4523                         x_msg_data  => x_msg_data,
4524                         p_api_type  => G_API_TYPE);
4525   END mass_rebook_after_yield;
4526 
4527 ------------------------------------------------------------------------------
4528 -- PROCEDURE cancel_transaction
4529 --   Call this process to CANCEL any pending mass rebook transaction
4530 -- Calls:
4531 -- Called by:
4532 ------------------------------------------------------------------------------
4533   PROCEDURE cancel_transaction(
4534                           x_return_status  OUT NOCOPY VARCHAR2,
4535                           x_msg_count      OUT NOCOPY NUMBER,
4536                           x_msg_data       OUT NOCOPY VARCHAR2,
4537                           p_chr_id         IN  OKC_K_HEADERS_V.ID%TYPE
4538                          ) IS
4539 
4540   l_proc_name VARCHAR2(35) := 'CANCEL_TRANSACTION';
4541   l_api_name  VARCHAR2(35) := 'CANCEL_TRANSACTION';
4542 
4543   CURSOR trx_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4544   SELECT DISTINCT
4545          REQUEST_NAME,
4546          KHR_ID,
4547          TRANSACTION_ID
4548   FROM   okl_rbk_selected_contract
4549   WHERE  khr_id            = p_chr_id
4550   AND    NVL(status,'NEW') <> 'PROCESSED';
4551 
4552   l_mstv_tbl mstv_tbl_type;
4553   l_tcnv_rec tcnv_rec_type;
4554   x_mstv_tbl mstv_tbl_type;
4555   x_tcnv_rec tcnv_rec_type;
4556 
4557   cancel_failed EXCEPTION;
4558 
4559   BEGIN
4560     IF (G_DEBUG_ENABLED = 'Y') THEN
4561       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4562     END IF;
4563 
4564     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4565     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4566           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
4567     END IF;
4568 
4569     FOR trx_rec IN trx_csr (p_chr_id)
4570     LOOP
4571 
4572        --
4573        -- Update Transaction and Rebook status to CANCELLED
4574        --
4575 
4576        l_mstv_tbl(1).request_name := trx_rec.request_name;
4577        l_mstv_tbl(1).khr_id       := p_chr_id;
4578        l_mstv_tbl(1).status       := 'CANCELED';
4579 
4580        okl_mass_rebook_pvt.update_mass_rbk_contract(
4581                                                     p_api_version    => 1.0,
4582                                                     p_init_msg_list  => OKL_API.G_FALSE,
4583                                                     x_return_status  => x_return_status,
4584                                                     x_msg_count      => x_msg_count,
4585                                                     x_msg_data       => x_msg_data,
4586                                                     p_mstv_tbl       => l_mstv_tbl,
4587                                                     x_mstv_tbl       => x_mstv_tbl
4588                                                    );
4589 
4590        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4591           RAISE cancel_failed;
4592        END IF;
4593        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4594                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After mass rebook trx update: '||x_return_status);
4595        END IF;
4596 
4597        l_tcnv_rec.id       := trx_rec.transaction_id;
4598        l_tcnv_rec.tsu_code := 'CANCELED';
4599 
4600        Okl_Trx_Contracts_Pub.update_trx_contracts(
4601                                                   p_api_version   => 1.0,
4602                                                   p_init_msg_list => OKL_API.G_FALSE,
4603                                                   x_return_status => x_return_status,
4604                                                   x_msg_count     => x_msg_count,
4605                                                   x_msg_data      => x_msg_data,
4606                                                   p_tcnv_rec      => l_tcnv_rec,
4607                                                   x_tcnv_rec      => x_tcnv_rec
4608                                                  );
4609 
4610        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4611           RAISE cancel_failed;
4612        END IF;
4613 
4614        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4615                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After trx update: '||x_return_status);
4616        END IF;
4617 
4618     END LOOP;
4619 
4620   EXCEPTION
4621 
4622       when cancel_failed then
4623          x_return_status := OKL_API.G_RET_STS_ERROR;
4624 
4625       when OTHERS then
4626          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4627                         p_api_name  => l_api_name,
4628                         p_pkg_name  => G_PKG_NAME,
4629                         p_exc_name  => 'OTHERS',
4630                         x_msg_count => x_msg_count,
4631                         x_msg_data  => x_msg_data,
4632                         p_api_type  => G_API_TYPE);
4633 
4634   END cancel_transaction;
4635 
4636 ------------------------------------------------------------------------------
4637 -- PROCEDURE process_mass_rebook
4638 --   This proecdure applies Rebook when called from On-line user
4639 -- Calls:
4640 -- Called by:
4641 ------------------------------------------------------------------------------
4642 
4643   PROCEDURE process_mass_rebook(
4644                                 p_api_version        IN  NUMBER,
4645                                 p_init_msg_list      IN  VARCHAR2,
4646                                 x_return_status      OUT NOCOPY VARCHAR2,
4647                                 x_msg_count          OUT NOCOPY NUMBER,
4648                                 x_msg_data           OUT NOCOPY VARCHAR2,
4649                                 p_request_name       IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE
4650                                ) IS
4651   l_api_name    VARCHAR2(35)    := 'process_mass_rebook';
4652   l_proc_name   VARCHAR2(35)    := 'PROCESS_MASS_REBOOK';
4653   l_api_version NUMBER          := 1.0;
4654 
4655   l_set_count      NUMBER       := 0;
4656   l_contract_count NUMBER       := 0;
4657 
4658   l_deprn_method_code VARCHAR2(35) := NULL;
4659   l_in_service_date   DATE         := NULL;
4660   l_life_in_months    NUMBER       := NULL;
4661   l_basic_rate        NUMBER       := NULL;
4662   l_adjusted_rate     NUMBER       := NULL;
4663   l_book_type_code    FA_BOOKS.BOOK_TYPE_CODE%TYPE := NULL;
4664 
4665   l_contract_id       NUMBER;
4666   l_line_count        NUMBER := 0;
4667   l_prev_contract_id  NUMBER;
4668   l_kle_id            NUMBER;
4669 
4670    -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4671   l_object_version_no OKL_K_HEADERS.OBJECT_VERSION_NUMBER%TYPE;
4672    -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4673 
4674   l_kle_tbl           kle_tbl_type;
4675   l_strm_lalevl_tbl   strm_lalevl_tbl_type;
4676 
4677   l_transaction_date  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE;
4678 
4679   CURSOR rbk_set_csr (p_req_name VARCHAR2) IS
4680   SELECT criteria_code,
4681          criteria_value1,
4682          set_value
4683   FROM   okl_mass_rbk_criteria
4684   WHERE  request_name = p_req_name
4685   AND    (set_value IS NOT NULL
4686           OR
4687           criteria_code = 'BOOK_TYPE_CODE'); -- in order to keep Tax Book as selection crietria
4688 
4689  -- Bug#4542290 - smadhava - 26-AUG-2005 - Modified - Start
4690   -- Modified cusor to get the object version number of the OKL_K_HEADERS table
4691   CURSOR rbk_csr (p_req_name VARCHAR2) IS
4692   SELECT
4693          rbk.khr_id,
4694          rbk.contract_number,
4695          rbk.contract_description,
4696          rbk.kle_id,
4697          rbk.transaction_date,
4698          khr.object_version_number
4699   FROM   okl_rbk_selected_contract rbk
4700        , okl_k_headers khr
4701   WHERE
4702          rbk.request_name = p_req_name
4703   AND    rbk.selected_flag = 'Y'
4704   AND    rbk.transaction_id IS NULL
4705   AND    khr.id = rbk.khr_id;
4706  -- Bug#4542290 - smadhava - 26-AUG-2005 - Modified - End
4707 
4708  -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4709  l_pdt_params_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
4710  lp_khrv_rec       OKL_KHR_PVT.khrv_rec_type;
4711  lx_khrv_rec       OKL_KHR_PVT.khrv_rec_type;
4712 
4713  -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4714   BEGIN
4715     IF (G_DEBUG_ENABLED = 'Y') THEN
4716       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4717     END IF;
4718 
4719      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4720             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
4721      END IF;
4722 
4723      -- call START_ACTIVITY to create savepoint, check compatibility
4724      -- and initialize message list
4725      x_return_status := OKL_API.START_ACTIVITY(
4726                                                p_api_name      => l_api_name,
4727                                                p_pkg_name      => G_PKG_NAME,
4728                                                p_init_msg_list => p_init_msg_list,
4729                                                l_api_version   => l_api_version,
4730                                                p_api_version   => p_api_version,
4731                                                p_api_type      => G_API_TYPE,
4732                                                x_return_status => x_return_status);
4733 
4734      -- check if activity started successfully
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 
4741      --
4742      -- Get SET_VALUE for ALl contracts to be processed
4743      --
4744 
4745      l_set_count := 0;
4746      l_deprn_method_code := NULL;
4747      l_in_service_date   := NULL;
4748      l_life_in_months    := NULL;
4749      l_basic_rate        := NULL;
4750      l_adjusted_rate     := NULL;
4751      l_book_type_code    := NULL;
4752 
4753      FOR rbk_set_rec IN rbk_set_csr(p_request_name)
4754      LOOP
4755         l_set_count := l_set_count + 1;
4756         IF (rbk_set_rec.criteria_code = 'DEPRN_METHOD_CODE') THEN
4757             l_deprn_method_code := rbk_set_rec.set_value;
4758         ELSIF (rbk_set_rec.criteria_code = 'DATE_PLACED_IN_SERVICE') THEN
4759             l_in_service_date := rbk_set_rec.set_value;
4760         ELSIF (rbk_set_rec.criteria_code = 'LIFE_IN_MONTHS') THEN
4761             l_life_in_months := rbk_set_rec.set_value;
4762         ELSIF (rbk_set_rec.criteria_code = 'BASIC_RATE') THEN
4763             l_basic_rate := TO_NUMBER(rbk_set_rec.set_value);
4764         ELSIF (rbk_set_rec.criteria_code = 'ADJUSTED_RATE') THEN
4765             l_adjusted_rate := TO_NUMBER(rbk_set_rec.set_value);
4766         ELSIF (rbk_set_rec.criteria_code = 'BOOK_TYPE_CODE') THEN
4767             l_book_type_code := rbk_set_rec.criteria_value1;        -- For selection only, do not Set value
4768         ELSE
4769            okl_api.set_message(
4770                                G_APP_NAME,
4771                                G_INVALID_SET_VALUE,
4772                                'CRIT_CODE',
4773                                rbk_set_rec.criteria_code
4774                               );
4775            x_return_status := OKL_API.G_RET_STS_ERROR;
4776            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4777         END IF;
4778 
4779      END LOOP;
4780 
4781      IF (l_set_count = 0) THEN
4782        okl_api.set_message(
4783                            G_APP_NAME,
4784                            G_NO_SET_VALUE,
4785                            'REQ_NAME',
4786                            P_request_name
4787                           );
4788        x_return_status := OKL_API.G_RET_STS_ERROR;
4789        RAISE OKL_API.G_EXCEPTION_ERROR;
4790      END IF;
4791 
4792      l_contract_count := 0;
4793      l_line_count     := 0;
4794      l_prev_contract_id := G_INIT_NUMBER;
4795      FOR rbk_rec IN rbk_csr(p_request_name)
4796      LOOP
4797 
4798        -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4799        OKL_K_RATE_PARAMS_PVT.get_product(
4800                 p_api_version       => p_api_version,
4801                 p_init_msg_list     => p_init_msg_list,
4802                 x_return_status     => x_return_status,
4803                 x_msg_count         => x_msg_count,
4804                 x_msg_data          => x_msg_data,
4805                 p_khr_id            => rbk_rec.khr_id,
4806                 x_pdt_parameter_rec => l_pdt_params_rec);
4807 
4808        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4809          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4810        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4811          RAISE OKL_API.G_EXCEPTION_ERROR;
4812        END IF;
4813        -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4814 
4815         l_transaction_date := rbk_rec.transaction_date;
4816 
4817         l_contract_count := l_contract_count + 1;
4818         IF (l_prev_contract_id = rbk_rec.khr_id
4819             OR
4820             l_contract_count = 1) THEN               -- Either same contract or first record
4821            l_line_count := l_line_count + 1;
4822            l_kle_tbl(l_line_count).id := rbk_rec.kle_id;
4823            l_contract_id         := rbk_rec.khr_id;
4824            l_prev_contract_id    := rbk_rec.khr_id;
4825 
4826            -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4827            l_object_version_no := rbk_rec.object_version_number;
4828            -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4829         ELSE
4830            -- Call Rebook_Contract
4831            rebook_contract(
4832                         x_return_status      => x_return_status,
4833                         x_msg_count          => x_msg_count,
4834                         x_msg_data           => x_msg_data,
4835                         p_online_yn          => 'Y',
4836                         p_khr_id             => l_contract_id,
4837                         p_kle_tbl            => l_kle_tbl,         -- FA Line ID
4838                         p_line_count         => l_line_count,
4839                         p_request_name       => p_request_name,
4840                         p_book_type_code     => l_book_type_code,
4841                         p_deprn_method_code  => l_deprn_method_code,
4842                         p_in_service_date    => l_in_service_date,
4843                         p_life_in_months     => l_life_in_months,
4844                         p_basic_rate         => l_basic_rate,
4845                         p_adjusted_rate      => l_adjusted_rate,
4846                         p_residual_value     => NULL,              -- Not for On-Line Rebook
4847                         p_strm_lalevl_tbl    => l_strm_lalevl_tbl,  -- Not for On-Line Rebook
4848                         p_transaction_date   => l_transaction_date
4849                        );
4850            IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
4851              raise OKL_API.G_EXCEPTION_ERROR;
4852            END IF;
4853            -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4854            -- Updating the Last interest calculation date to the rebook
4855            -- transaction date if the Interest Calc. Basis=REAMORT and
4856            -- Rev. recognition method=STREAMS
4857            IF ( l_pdt_params_rec.interest_calculation_basis = G_ICB_REAMORT
4858               AND l_pdt_params_rec.revenue_recognition_method = G_RRM_STREAMS )
4859            THEN
4860             lp_khrv_rec.id := rbk_rec.khr_id;
4861              -- get the object version number of the record
4862             lp_khrv_rec.object_version_number := rbk_rec.object_version_number;
4863 
4864              -- Update the last interest calc date field
4865              lp_khrv_rec.date_last_interim_interest_cal := l_transaction_date;
4866              OKL_KHR_PVT.update_row(
4867                        p_api_version     => p_api_version
4868                      , p_init_msg_list   => p_init_msg_list
4869                      , x_return_status   => x_return_status
4870                      , x_msg_count       => x_msg_count
4871                      , x_msg_data        => x_msg_data
4872                      , p_khrv_rec        => lp_khrv_rec
4873                      , x_khrv_rec        => lx_khrv_rec);
4874 
4875              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4876                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4877              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4878                RAISE OKL_API.G_EXCEPTION_ERROR;
4879              END IF;
4880            END IF; -- end of check for ICB and RRM
4881            -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4882 
4883            l_line_count := 1; -- Reset for next contract
4884            l_kle_tbl(l_line_count).id := rbk_rec.kle_id;
4885            l_contract_id      := rbk_rec.khr_id;
4886            l_prev_contract_id := rbk_rec.khr_id;
4887 
4888         END IF;
4889      END LOOP;
4890 
4891      IF (l_contract_count = 0 ) THEN
4892         okl_api.set_message(
4893                             G_APP_NAME,
4894                             G_NO_SEL_CONTRACT,
4895                             'REQ_NAME',
4896                             p_request_name
4897                            );
4898         RAISE OKL_API.G_EXCEPTION_ERROR;
4899      END IF;
4900 
4901      -- Final Call for last contract
4902      rebook_contract(
4903                         x_return_status      => x_return_status,
4904                         x_msg_count          => x_msg_count,
4905                         x_msg_data           => x_msg_data,
4906                         p_online_yn          => 'Y',
4907                         p_khr_id             => l_contract_id,
4908                         p_kle_tbl            => l_kle_tbl,         -- FA Line ID
4909                         p_line_count         => l_line_count,
4910                         p_request_name       => p_request_name,
4911                         P_book_type_code     => l_book_type_code,
4912                         p_deprn_method_code  => l_deprn_method_code,
4913                         p_in_service_date    => l_in_service_date,
4914                         p_life_in_months     => l_life_in_months,
4915                         p_basic_rate         => l_basic_rate,
4916                         p_adjusted_rate      => l_adjusted_rate,
4917                         p_residual_value     => NULL,             -- Not for On-Line Rebook
4918                         p_strm_lalevl_tbl    => l_strm_lalevl_tbl, -- Not for On-Line Rebook
4919                         p_transaction_date   => l_transaction_date
4920                        );
4921      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
4922        raise OKL_API.G_EXCEPTION_ERROR;
4923      END IF;
4924      -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - Start
4925      -- Updating the Last interest calculation date to the rebook
4926      -- transaction date if the Interest Calc. Basis=REAMORT and
4927      -- Rev. recognition method=STREAMS
4928      IF ( l_pdt_params_rec.interest_calculation_basis = G_ICB_REAMORT
4929         AND l_pdt_params_rec.revenue_recognition_method = G_RRM_STREAMS )
4930      THEN
4931       lp_khrv_rec.id := l_contract_id;
4932        -- get the object version number of the record
4933        lp_khrv_rec.object_version_number := l_object_version_no;
4934 
4935        -- Update the last interest calc date field
4936        lp_khrv_rec.date_last_interim_interest_cal := l_transaction_date;
4937        OKL_KHR_PVT.update_row(
4938                   p_api_version     => p_api_version
4939                 , p_init_msg_list   => p_init_msg_list
4940                 , x_return_status   => x_return_status
4941                 , x_msg_count       => x_msg_count
4942                 , x_msg_data        => x_msg_data
4943                 , p_khrv_rec        => lp_khrv_rec
4944                 , x_khrv_rec        => lx_khrv_rec);
4945 
4946        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4947          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4948        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4949          RAISE OKL_API.G_EXCEPTION_ERROR;
4950        END IF;
4951      END IF; -- end of check for ICB and RRM
4952      -- Bug#4542290 - smadhava - 26-AUG-2005 - Added - End
4953 
4954     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4955                          x_msg_data    => x_msg_data);
4956 
4957     RETURN;
4958 
4959   EXCEPTION
4960       when OKL_API.G_EXCEPTION_ERROR then
4961          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4962                         p_api_name  => l_api_name,
4963                         p_pkg_name  => G_PKG_NAME,
4964                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4965                         x_msg_count => x_msg_count,
4966                         x_msg_data  => x_msg_data,
4967                         p_api_type  => G_API_TYPE);
4968 
4969       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4970          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4971                         p_api_name  => l_api_name,
4972                         p_pkg_name  => G_PKG_NAME,
4973                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4974                         x_msg_count => x_msg_count,
4975                         x_msg_data  => x_msg_data,
4976                         p_api_type  => G_API_TYPE);
4977 
4978       when OTHERS then
4979          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4980                         p_api_name  => l_api_name,
4981                         p_pkg_name  => G_PKG_NAME,
4982                         p_exc_name  => 'OTHERS',
4983                         x_msg_count => x_msg_count,
4984                         x_msg_data  => x_msg_data,
4985                         p_api_type  => G_API_TYPE);
4986   END process_mass_rebook;
4987 
4988 ------------------------------------------------------------------------------
4989 -- PROCEDURE apply_mass_rebook
4990 --   This proecdure uses to apply mass rebook for contracts. It should be called
4991 --   by those who does not have access to MASS REBOOK UI under OKL
4992 -- Calls:
4993 -- Called by:
4994 ------------------------------------------------------------------------------
4995 
4996   PROCEDURE apply_mass_rebook(
4997                               p_api_version        IN  NUMBER,
4998                               p_init_msg_list      IN  VARCHAR2,
4999                               x_return_status      OUT NOCOPY VARCHAR2,
5000                               x_msg_count          OUT NOCOPY NUMBER,
5001                               x_msg_data           OUT NOCOPY VARCHAR2,
5002                               p_rbk_tbl            IN  rbk_tbl_type,
5003                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5004                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5005                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5006                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5007                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5008                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5009                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type
5010                              ) IS
5011   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5012   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5013   l_api_version NUMBER          := 1.0;
5014 
5015   l_line_count       NUMBER;
5016   l_contract_count   NUMBER;
5017   l_contract_id      NUMBER;
5018   l_prev_contract_id NUMBER;
5019 
5020   l_kle_tbl          kle_tbl_type;
5021 
5022   BEGIN
5023     IF (G_DEBUG_ENABLED = 'Y') THEN
5024       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5025     END IF;
5026 
5027      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5028             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5029      END IF;
5030      -- call START_ACTIVITY to create savepoint, check compatibility
5031      -- and initialize message list
5032      x_return_status := OKL_API.START_ACTIVITY(
5033                                                p_api_name      => l_api_name,
5034                                                p_pkg_name      => G_PKG_NAME,
5035      	                                       p_init_msg_list => p_init_msg_list,
5036                                                l_api_version   => l_api_version,
5037                                                p_api_version   => p_api_version,
5038                                                p_api_type      => G_API_TYPE,
5039                                                x_return_status => x_return_status);
5040 
5041      -- check if activity started successfully
5042      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5043        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5044      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5045        raise OKL_API.G_EXCEPTION_ERROR;
5046      END IF;
5047 
5048      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5049             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Count: '||p_rbk_tbl.COUNT);
5050      END IF;
5051 
5052      IF (p_rbk_tbl.COUNT > 0 ) THEN
5053        l_line_count := 0;
5054        l_contract_count := 0;
5055        l_prev_contract_id := G_INIT_NUMBER;
5056        FOR i IN 1..p_rbk_tbl.COUNT
5057        LOOP
5058           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5059                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract# :'||p_rbk_tbl(i).contract_number);
5060           END IF;
5061           l_contract_count := l_contract_count + 1;
5062           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5063               OR
5064               l_contract_count = 1) THEN
5065              l_line_count := l_line_count + 1;
5066              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5067              l_contract_id := p_rbk_tbl(i).khr_id;
5068              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5069           ELSE
5070              -- Call Rebook_Contract
5071              rebook_contract(
5072                           x_return_status      => x_return_status,
5073                           x_msg_count          => x_msg_count,
5074                           x_msg_data           => x_msg_data,
5075                           p_online_yn          => 'N',
5076                           p_khr_id             => l_contract_id,
5077                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5078                           p_line_count         => l_line_count,
5079                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5080                           p_book_type_code     => NULL,
5081                           p_deprn_method_code  => p_deprn_method_code,
5082                           p_in_service_date    => p_in_service_date,
5083                           p_life_in_months     => p_life_in_months,
5084                           p_basic_rate         => p_basic_rate,
5085                           p_adjusted_rate      => p_adjusted_rate,
5086                           p_residual_value     => p_residual_value,
5087                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5088                          );
5089              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5090                raise OKL_API.G_EXCEPTION_ERROR;
5091              END IF;
5092              l_line_count := 1;
5093              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5094              l_contract_id         := p_rbk_tbl(i).khr_id;
5095           END IF;
5096        END LOOP;
5097 
5098        rebook_contract(
5099                        x_return_status      => x_return_status,
5100                        x_msg_count          => x_msg_count,
5101                        x_msg_data           => x_msg_data,
5102                        p_online_yn          => 'N',
5103                        p_khr_id             => l_contract_id,
5104                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5105                        p_line_count         => l_line_count,
5106                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5107                        p_book_type_code     => NULL,
5108                        p_deprn_method_code  => p_deprn_method_code,
5109                        p_in_service_date    => p_in_service_date,
5110                        p_life_in_months     => p_life_in_months,
5111                        p_basic_rate         => p_basic_rate,
5112                        p_adjusted_rate      => p_adjusted_rate,
5113                        p_residual_value     => p_residual_value,
5114                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5115                       );
5116 
5117        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5118                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook Contract status: '||x_return_status);
5119        END IF;
5120        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5121           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5122        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5123           raise OKL_API.G_EXCEPTION_ERROR;
5124        END IF;
5125 
5126      ELSE
5127         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5128                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
5129         END IF;
5130         x_return_status := OKL_API.G_RET_STS_ERROR;
5131         RAISE OKL_API.G_EXCEPTION_ERROR;
5132      END IF;
5133 
5134      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5135                           x_msg_data    => x_msg_data);
5136 
5137 
5138      RETURN;
5139 
5140   EXCEPTION
5141       when OKL_API.G_EXCEPTION_ERROR then
5142          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5143                         p_api_name  => l_api_name,
5144                         p_pkg_name  => G_PKG_NAME,
5145                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5146                         x_msg_count => x_msg_count,
5147                         x_msg_data  => x_msg_data,
5148                         p_api_type  => G_API_TYPE);
5149 
5150       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5151          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5152                         p_api_name  => l_api_name,
5153                         p_pkg_name  => G_PKG_NAME,
5154                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5155                         x_msg_count => x_msg_count,
5156                         x_msg_data  => x_msg_data,
5157                         p_api_type  => G_API_TYPE);
5158 
5159       when OTHERS then
5160          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5161                         p_api_name  => l_api_name,
5162                         p_pkg_name  => G_PKG_NAME,
5163                         p_exc_name  => 'OTHERS',
5164                         x_msg_count => x_msg_count,
5165                         x_msg_data  => x_msg_data,
5166                         p_api_type  => G_API_TYPE);
5167   END apply_mass_rebook;
5168 
5169 ------------------------------------------------------------------------------
5170 -- PROCEDURE apply_mass_rebook
5171 --   This proecdure uses to apply mass rebook for contracts. It should be called
5172 --   by those who does not have access to MASS REBOOK UI under OKL.
5173 --   This process is overloaded from previous one to return stream transactio ID
5174 --   to caller program
5175 -- Calls:
5176 -- Called by:
5177 ------------------------------------------------------------------------------
5178 
5179   PROCEDURE apply_mass_rebook(
5180                               p_api_version        IN  NUMBER,
5181                               p_init_msg_list      IN  VARCHAR2,
5182                               x_return_status      OUT NOCOPY VARCHAR2,
5183                               x_msg_count          OUT NOCOPY NUMBER,
5184                               x_msg_data           OUT NOCOPY VARCHAR2,
5185                               p_rbk_tbl            IN  rbk_tbl_type,
5186                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5187                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5188                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5189                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5190                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5191                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5192                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
5193                               x_stream_trx_tbl     OUT NOCOPY strm_trx_tbl_type
5194                              ) IS
5195   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5196   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5197   l_api_version NUMBER          := 1.0;
5198 
5199   l_line_count       NUMBER;
5200   l_contract_count   NUMBER;
5201   l_contract_id      NUMBER;
5202   l_prev_contract_id NUMBER;
5203 
5204   l_kle_tbl          kle_tbl_type;
5205 
5206   BEGIN
5207     IF (G_DEBUG_ENABLED = 'Y') THEN
5208       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5209     END IF;
5210 
5211      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5212             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5213      END IF;
5214      -- call START_ACTIVITY to create savepoint, check compatibility
5215      -- and initialize message list
5216      x_return_status := OKL_API.START_ACTIVITY(
5217                                                p_api_name      => l_api_name,
5218                                                p_pkg_name      => G_PKG_NAME,
5219      	                                       p_init_msg_list => p_init_msg_list,
5220                                                l_api_version   => l_api_version,
5221                                                p_api_version   => p_api_version,
5222                                                p_api_type      => G_API_TYPE,
5223                                                x_return_status => x_return_status);
5224 
5225      -- check if activity started successfully
5226      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5227        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5228      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5229        raise OKL_API.G_EXCEPTION_ERROR;
5230      END IF;
5231 
5232 
5233      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5234             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Count: '||p_rbk_tbl.COUNT);
5235      END IF;
5236 
5237      IF (p_rbk_tbl.COUNT > 0 ) THEN
5238        l_line_count := 0;
5239        l_contract_count := 0;
5240        l_prev_contract_id := G_INIT_NUMBER;
5241        FOR i IN 1..p_rbk_tbl.COUNT
5242        LOOP
5243           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5244                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract# :'||p_rbk_tbl(i).contract_number);
5245           END IF;
5246           l_contract_count := l_contract_count + 1;
5247           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5248               OR
5249               l_contract_count = 1) THEN
5250              l_line_count := l_line_count + 1;
5251              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5252              l_contract_id := p_rbk_tbl(i).khr_id;
5253              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5254           ELSE
5255              -- Call Rebook_Contract
5256              rebook_contract(
5257                           x_return_status      => x_return_status,
5258                           x_msg_count          => x_msg_count,
5259                           x_msg_data           => x_msg_data,
5260                           p_online_yn          => 'N',
5261                           p_khr_id             => l_contract_id,
5262                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5263                           p_line_count         => l_line_count,
5264                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5265                           p_book_type_code     => NULL,
5266                           p_deprn_method_code  => p_deprn_method_code,
5267                           p_in_service_date    => p_in_service_date,
5268                           p_life_in_months     => p_life_in_months,
5269                           p_basic_rate         => p_basic_rate,
5270                           p_adjusted_rate      => p_adjusted_rate,
5271                           p_residual_value     => p_residual_value,
5272                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5273                          );
5274 
5275              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5276                raise OKL_API.G_EXCEPTION_ERROR;
5277              END IF;
5278 
5279              x_stream_trx_tbl(l_contract_count).chr_id     := l_contract_id;
5280              x_stream_trx_tbl(l_contract_count).trx_number := g_stream_trx_number;
5281 
5282              l_line_count := 1;
5283              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5284              l_contract_id         := p_rbk_tbl(i).khr_id;
5285 
5286           END IF;
5287        END LOOP;
5288 
5289        rebook_contract(
5290                        x_return_status      => x_return_status,
5291                        x_msg_count          => x_msg_count,
5292                        x_msg_data           => x_msg_data,
5293                        p_online_yn          => 'N',
5294                        p_khr_id             => l_contract_id,
5295                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5296                        p_line_count         => l_line_count,
5297                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5298                        p_book_type_code     => NULL,
5299                        p_deprn_method_code  => p_deprn_method_code,
5300                        p_in_service_date    => p_in_service_date,
5301                        p_life_in_months     => p_life_in_months,
5302                        p_basic_rate         => p_basic_rate,
5303                        p_adjusted_rate      => p_adjusted_rate,
5304                        p_residual_value     => p_residual_value,
5305                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5306                       );
5307 
5308        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5309                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook Contract status: '||x_return_status);
5310        END IF;
5311        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5312           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5313        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5314           raise OKL_API.G_EXCEPTION_ERROR;
5315        END IF;
5316 
5317        --l_contract_count := l_contract_count + 1;
5318        x_stream_trx_tbl(l_contract_count).chr_id     := l_contract_id;
5319        x_stream_trx_tbl(l_contract_count).trx_number := g_stream_trx_number;
5320 
5321      ELSE
5322         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5323                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
5324         END IF;
5325         x_return_status := OKL_API.G_RET_STS_ERROR;
5326         RAISE OKL_API.G_EXCEPTION_ERROR;
5327      END IF;
5328 
5329      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5330                           x_msg_data    => x_msg_data);
5331 
5332 
5333      RETURN;
5334 
5335   EXCEPTION
5336       when OKL_API.G_EXCEPTION_ERROR then
5337          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5338                         p_api_name  => l_api_name,
5339                         p_pkg_name  => G_PKG_NAME,
5340                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5341                         x_msg_count => x_msg_count,
5342                         x_msg_data  => x_msg_data,
5343                         p_api_type  => G_API_TYPE);
5344 
5345       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5346          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5347                         p_api_name  => l_api_name,
5348                         p_pkg_name  => G_PKG_NAME,
5349                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5350                         x_msg_count => x_msg_count,
5351                         x_msg_data  => x_msg_data,
5352                         p_api_type  => G_API_TYPE);
5353 
5354       when OTHERS then
5355          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5356                         p_api_name  => l_api_name,
5357                         p_pkg_name  => G_PKG_NAME,
5358                         p_exc_name  => 'OTHERS',
5359                         x_msg_count => x_msg_count,
5360                         x_msg_data  => x_msg_data,
5361                         p_api_type  => G_API_TYPE);
5362   END apply_mass_rebook;
5363 
5364 ------------------------------------------------------------------------------
5365 -- PROCEDURE apply_mass_rebook
5366 --   This proecdure uses to apply mass rebook for contracts. It should be called
5367 --   by those who does not have access to MASS REBOOK UI under OKL.
5368 --   This process is overloaded from previous one to return stream transactio ID
5369 --   to caller program
5370 --
5371 --   Adding p_transaction_date parameter, if not provided, system
5372 --   will pass SYSDATE to downstream processes
5373 -- Calls:
5374 -- Called by:
5375 ------------------------------------------------------------------------------
5376 
5377   PROCEDURE apply_mass_rebook(
5378                               p_api_version        IN  NUMBER,
5379                               p_init_msg_list      IN  VARCHAR2,
5380                               x_return_status      OUT NOCOPY VARCHAR2,
5381                               x_msg_count          OUT NOCOPY NUMBER,
5382                               x_msg_data           OUT NOCOPY VARCHAR2,
5383                               p_rbk_tbl            IN  rbk_tbl_type,
5384                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5385                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5386                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5387                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5388                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5389                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5390                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
5391                               p_transaction_date   IN  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE,
5392                               x_stream_trx_tbl     OUT NOCOPY strm_trx_tbl_type
5393                              ) IS
5394   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5395   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5396   l_api_version NUMBER          := 1.0;
5397 
5398   l_line_count       NUMBER;
5399   l_contract_count   NUMBER;
5400   l_contract_id      NUMBER;
5401   l_prev_contract_id NUMBER;
5402 
5403   l_kle_tbl          kle_tbl_type;
5404 
5405   BEGIN
5406     IF (G_DEBUG_ENABLED = 'Y') THEN
5407       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5408     END IF;
5409 
5410      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5411             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5412      END IF;
5413      -- call START_ACTIVITY to create savepoint, check compatibility
5414      -- and initialize message list
5415      x_return_status := OKL_API.START_ACTIVITY(
5416                                                p_api_name      => l_api_name,
5417                                                p_pkg_name      => G_PKG_NAME,
5418      	                                       p_init_msg_list => p_init_msg_list,
5419                                                l_api_version   => l_api_version,
5420                                                p_api_version   => p_api_version,
5421                                                p_api_type      => G_API_TYPE,
5422                                                x_return_status => x_return_status);
5423 
5424      -- check if activity started successfully
5425      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5426        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5427      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5428        raise OKL_API.G_EXCEPTION_ERROR;
5429      END IF;
5430 
5431 
5432      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5433             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Count: '||p_rbk_tbl.COUNT);
5434      END IF;
5435 
5436      IF (p_rbk_tbl.COUNT > 0 ) THEN
5437        l_line_count := 0;
5438        l_contract_count := 0;
5439        l_prev_contract_id := G_INIT_NUMBER;
5440        FOR i IN 1..p_rbk_tbl.COUNT
5441        LOOP
5442           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5443                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Contract# :'||p_rbk_tbl(i).contract_number);
5444           END IF;
5445           l_contract_count := l_contract_count + 1;
5446           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5447               OR
5448               l_contract_count = 1) THEN
5449              l_line_count := l_line_count + 1;
5450              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5451              l_contract_id := p_rbk_tbl(i).khr_id;
5452              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5453           ELSE
5454              -- Call Rebook_Contract
5455              rebook_contract(
5456                           x_return_status      => x_return_status,
5457                           x_msg_count          => x_msg_count,
5458                           x_msg_data           => x_msg_data,
5459                           p_online_yn          => 'N',
5460                           p_khr_id             => l_contract_id,
5461                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5462                           p_line_count         => l_line_count,
5463                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5464                           p_book_type_code     => NULL,
5465                           p_deprn_method_code  => p_deprn_method_code,
5466                           p_in_service_date    => p_in_service_date,
5467                           p_life_in_months     => p_life_in_months,
5468                           p_basic_rate         => p_basic_rate,
5469                           p_adjusted_rate      => p_adjusted_rate,
5470                           p_residual_value     => p_residual_value,
5471                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl,
5472                           p_transaction_date   => p_transaction_date
5473                          );
5474 
5475              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5476                raise OKL_API.G_EXCEPTION_ERROR;
5477              END IF;
5478 
5479              x_stream_trx_tbl(l_contract_count).chr_id     := l_contract_id;
5480              x_stream_trx_tbl(l_contract_count).trx_number := g_stream_trx_number;
5481 
5482              l_line_count := 1;
5483              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5484              l_contract_id         := p_rbk_tbl(i).khr_id;
5485 
5486           END IF;
5487        END LOOP;
5488 
5489        rebook_contract(
5490                        x_return_status      => x_return_status,
5491                        x_msg_count          => x_msg_count,
5492                        x_msg_data           => x_msg_data,
5493                        p_online_yn          => 'N',
5494                        p_khr_id             => l_contract_id,
5495                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5496                        p_line_count         => l_line_count,
5497                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5498                        p_book_type_code     => NULL,
5499                        p_deprn_method_code  => p_deprn_method_code,
5500                        p_in_service_date    => p_in_service_date,
5501                        p_life_in_months     => p_life_in_months,
5502                        p_basic_rate         => p_basic_rate,
5503                        p_adjusted_rate      => p_adjusted_rate,
5504                        p_residual_value     => p_residual_value,
5505                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl,
5506                        p_transaction_date   => p_transaction_date
5507                       );
5508 
5509        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5510                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rebook Contract status: '||x_return_status);
5511        END IF;
5512        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5513           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5514        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5515           raise OKL_API.G_EXCEPTION_ERROR;
5516        END IF;
5517 
5518        --l_contract_count := l_contract_count + 1;
5519        x_stream_trx_tbl(l_contract_count).chr_id     := l_contract_id;
5520        x_stream_trx_tbl(l_contract_count).trx_number := g_stream_trx_number;
5521 
5522      ELSE
5523         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5524                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
5525         END IF;
5526         x_return_status := OKL_API.G_RET_STS_ERROR;
5527         RAISE OKL_API.G_EXCEPTION_ERROR;
5528      END IF;
5529 
5530      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5531                           x_msg_data    => x_msg_data);
5532 
5533 
5534      RETURN;
5535 
5536   EXCEPTION
5537       when OKL_API.G_EXCEPTION_ERROR then
5538          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5539                         p_api_name  => l_api_name,
5540                         p_pkg_name  => G_PKG_NAME,
5541                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5542                         x_msg_count => x_msg_count,
5543                         x_msg_data  => x_msg_data,
5544                         p_api_type  => G_API_TYPE);
5545 
5546       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5547          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5548                         p_api_name  => l_api_name,
5549                         p_pkg_name  => G_PKG_NAME,
5550                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5551                         x_msg_count => x_msg_count,
5552                         x_msg_data  => x_msg_data,
5553                         p_api_type  => G_API_TYPE);
5554 
5555       when OTHERS then
5556          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5557                         p_api_name  => l_api_name,
5558                         p_pkg_name  => G_PKG_NAME,
5559                         p_exc_name  => 'OTHERS',
5560                         x_msg_count => x_msg_count,
5561                         x_msg_data  => x_msg_data,
5562                         p_api_type  => G_API_TYPE);
5563   END apply_mass_rebook;
5564 
5565 ------------------------------------------------------------------------------
5566 -- PROCEDURE apply_mass_rebook
5567 --   This proecdure uses to apply mass rebook for contracts.
5568 --   This has been overloaded for following specific purpose:
5569 --   1. To get termination transaction ID (p_source_trx_id)
5570 --   2. Use this ID to update transaction after successful completion of Mass rebook
5571 --   3. To accept source transaction type (p_source_trx_type)
5572 --   4. Return Mass rebook transaction id to caller (x_mass_rebook_trx_id)
5573 -- Calls:
5574 -- Called by:
5575 ------------------------------------------------------------------------------
5576   PROCEDURE apply_mass_rebook(
5577                               p_api_version        IN  NUMBER,
5578                               p_init_msg_list      IN  VARCHAR2,
5579                               x_return_status      OUT NOCOPY VARCHAR2,
5580                               x_msg_count          OUT NOCOPY NUMBER,
5581                               x_msg_data           OUT NOCOPY VARCHAR2,
5582                               p_rbk_tbl            IN  rbk_tbl_type,
5583                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5584                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5585                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5586                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5587                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5588                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5589                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
5590                               p_source_trx_id      IN  OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE,
5591                               p_source_trx_type    IN  OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE,
5592                               x_mass_rebook_trx_id OUT NOCOPY OKL_TRX_CONTRACTS.ID%TYPE
5593                              ) IS
5594 
5595   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5596   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5597   l_api_version NUMBER          := 1.0;
5598 
5599   l_line_count       NUMBER;
5600   l_contract_count   NUMBER;
5601   l_contract_id      NUMBER;
5602   l_prev_contract_id NUMBER;
5603 
5604   l_kle_tbl          kle_tbl_type;
5605 
5606   l_tcnv_rec tcnv_rec_type;
5607   x_tcnv_rec tcnv_rec_type;
5608 
5609   BEGIN
5610     IF (G_DEBUG_ENABLED = 'Y') THEN
5611       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5612     END IF;
5613 
5614      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5615             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5616      END IF;
5617      -- call START_ACTIVITY to create savepoint, check compatibility
5618      -- and initialize message list
5619      x_return_status := OKL_API.START_ACTIVITY(
5620                                                p_api_name      => l_api_name,
5621                                                p_pkg_name      => G_PKG_NAME,
5622      	                                       p_init_msg_list => p_init_msg_list,
5623                                                l_api_version   => l_api_version,
5624                                                p_api_version   => p_api_version,
5625                                                p_api_type      => G_API_TYPE,
5626                                                x_return_status => x_return_status);
5627 
5628      -- check if activity started successfully
5629      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5630        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5631      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5632        raise OKL_API.G_EXCEPTION_ERROR;
5633      END IF;
5634 
5635      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5636             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->Count: '||p_rbk_tbl.COUNT);
5637      END IF;
5638 
5639      IF (p_rbk_tbl.COUNT > 0 ) THEN
5640        l_line_count := 0;
5641        l_contract_count := 0;
5642        l_prev_contract_id := G_INIT_NUMBER;
5643        FOR i IN 1..p_rbk_tbl.COUNT
5644        LOOP
5645           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5646                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->Contract# :'||p_rbk_tbl(i).contract_number);
5647           END IF;
5648           l_contract_count := l_contract_count + 1;
5649           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5650               OR
5651               l_contract_count = 1) THEN
5652              l_line_count := l_line_count + 1;
5653              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5654              l_contract_id := p_rbk_tbl(i).khr_id;
5655              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5656           ELSE
5657              --
5658              -- Restart termination process
5659              -- cancel any ongoing transaction, if any
5660              --
5661              cancel_transaction(
5662                                 x_return_status  => x_return_status,
5663                                 x_msg_count      => x_msg_count,
5664                                 x_msg_data       => x_msg_data,
5665                                 p_chr_id         => l_contract_id
5666                                );
5667 
5668              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5669                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
5670              END IF;
5671              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5672                raise OKL_API.G_EXCEPTION_ERROR;
5673              END IF;
5674 
5675              G_TERMINATION_TRX_ID   := p_source_trx_id;
5676              G_TERMINATION_TRX_TYPE := p_source_trx_type;
5677              G_MASS_RBK_TRX_ID      := NULL;
5678 
5679              okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
5680 
5681              -- Call Rebook_Contract
5682              rebook_contract(
5683                           x_return_status      => x_return_status,
5684                           x_msg_count          => x_msg_count,
5685                           x_msg_data           => x_msg_data,
5686                           p_online_yn          => 'N',
5687                           p_khr_id             => l_contract_id,
5688                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5689                           p_line_count         => l_line_count,
5690                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5691                           p_book_type_code     => NULL,
5692                           p_deprn_method_code  => p_deprn_method_code,
5693                           p_in_service_date    => p_in_service_date,
5694                           p_life_in_months     => p_life_in_months,
5695                           p_basic_rate         => p_basic_rate,
5696                           p_adjusted_rate      => p_adjusted_rate,
5697                           p_residual_value     => p_residual_value,
5698                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5699                          );
5700              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5701                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After rebook_contract: '||x_return_status);
5702              END IF;
5703              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5704                raise OKL_API.G_EXCEPTION_ERROR;
5705              END IF;
5706 
5707              x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
5708 
5709              l_line_count := 1;
5710              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5711              l_contract_id         := p_rbk_tbl(i).khr_id;
5712           END IF;
5713        END LOOP;
5714 
5715        --
5716        -- Restart termination process
5717        -- cancel any ongoing transaction, if any
5718        --
5719        cancel_transaction(
5720                           x_return_status  => x_return_status,
5721                           x_msg_count      => x_msg_count,
5722                           x_msg_data       => x_msg_data,
5723                           p_chr_id         => l_contract_id
5724                          );
5725 
5726        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5727                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
5728        END IF;
5729        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5730          raise OKL_API.G_EXCEPTION_ERROR;
5731        END IF;
5732 
5733 
5734        G_TERMINATION_TRX_ID   := p_source_trx_id;
5735        G_TERMINATION_TRX_TYPE := p_source_trx_type;
5736        G_MASS_RBK_TRX_ID      := NULL;
5737 
5738        okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
5739 
5740        rebook_contract(
5741                        x_return_status      => x_return_status,
5742                        x_msg_count          => x_msg_count,
5743                        x_msg_data           => x_msg_data,
5744                        p_online_yn          => 'N',
5745                        p_khr_id             => l_contract_id,
5746                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5747                        p_line_count         => l_line_count,
5748                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5749                        p_book_type_code     => NULL,
5750                        p_deprn_method_code  => p_deprn_method_code,
5751                        p_in_service_date    => p_in_service_date,
5752                        p_life_in_months     => p_life_in_months,
5753                        p_basic_rate         => p_basic_rate,
5754                        p_adjusted_rate      => p_adjusted_rate,
5755                        p_residual_value     => p_residual_value,
5756                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl
5757                       );
5758 
5759        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5760                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->rebook Contract status: '||x_return_status);
5761        END IF;
5762        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5763           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5764        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5765           raise OKL_API.G_EXCEPTION_ERROR;
5766        END IF;
5767 
5768        x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
5769 
5770      ELSE
5771         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5772                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
5773         END IF;
5774         x_return_status := OKL_API.G_RET_STS_ERROR;
5775         RAISE OKL_API.G_EXCEPTION_ERROR;
5776      END IF;
5777 
5778      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5779                           x_msg_data    => x_msg_data);
5780 
5781 
5782      RETURN;
5783 
5784   EXCEPTION
5785       when OKL_API.G_EXCEPTION_ERROR then
5786          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5787                         p_api_name  => l_api_name,
5788                         p_pkg_name  => G_PKG_NAME,
5789                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5790                         x_msg_count => x_msg_count,
5791                         x_msg_data  => x_msg_data,
5792                         p_api_type  => G_API_TYPE);
5793 
5794       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5795          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5796                         p_api_name  => l_api_name,
5797                         p_pkg_name  => G_PKG_NAME,
5798                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5799                         x_msg_count => x_msg_count,
5800                         x_msg_data  => x_msg_data,
5801                         p_api_type  => G_API_TYPE);
5802 
5803       when OTHERS then
5804          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5805                         p_api_name  => l_api_name,
5806                         p_pkg_name  => G_PKG_NAME,
5807                         p_exc_name  => 'OTHERS',
5808                         x_msg_count => x_msg_count,
5809                         x_msg_data  => x_msg_data,
5810                         p_api_type  => G_API_TYPE);
5811   END apply_mass_rebook;
5812 
5813 ------------------------------------------------------------------------------
5814 -- PROCEDURE apply_mass_rebook
5815 --   This proecdure uses to apply mass rebook for contracts.
5816 --   This has been overloaded for following specific purpose:
5817 --   1. To accept transaction date from calling process, This date is going to
5818 --      be used for accounting too.
5819 -- Calls:
5820 -- Called by:
5821 ------------------------------------------------------------------------------
5822   PROCEDURE apply_mass_rebook(
5823                               p_api_version        IN  NUMBER,
5824                               p_init_msg_list      IN  VARCHAR2,
5825                               x_return_status      OUT NOCOPY VARCHAR2,
5826                               x_msg_count          OUT NOCOPY NUMBER,
5827                               x_msg_data           OUT NOCOPY VARCHAR2,
5828                               p_rbk_tbl            IN  rbk_tbl_type,
5829                               p_deprn_method_code  IN  FA_BOOKS.DEPRN_METHOD_CODE%TYPE,
5830                               p_in_service_date    IN  FA_BOOKS.DATE_PLACED_IN_SERVICE%TYPE,
5831                               p_life_in_months     IN  FA_BOOKS.LIFE_IN_MONTHS%TYPE,
5832                               p_basic_rate         IN  FA_BOOKS.BASIC_RATE%TYPE,
5833                               p_adjusted_rate      IN  FA_BOOKS.ADJUSTED_RATE%TYPE,
5834                               p_residual_value     IN  OKL_K_LINES_V.RESIDUAL_VALUE%TYPE,
5835                               p_strm_lalevl_tbl    IN  strm_lalevl_tbl_type,
5836                               p_source_trx_id      IN  OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE,
5837                               p_source_trx_type    IN  OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE,
5838                               p_transaction_date   IN  OKL_RBK_SELECTED_CONTRACT.TRANSACTION_DATE%TYPE,
5839                               x_mass_rebook_trx_id OUT NOCOPY OKL_TRX_CONTRACTS.ID%TYPE
5840                              ) IS
5841 
5842   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
5843   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
5844   l_api_version NUMBER          := 1.0;
5845 
5846   l_line_count       NUMBER;
5847   l_contract_count   NUMBER;
5848   l_contract_id      NUMBER;
5849   l_prev_contract_id NUMBER;
5850 
5851   l_kle_tbl          kle_tbl_type;
5852 
5853   l_tcnv_rec tcnv_rec_type;
5854   x_tcnv_rec tcnv_rec_type;
5855 
5856   BEGIN
5857     IF (G_DEBUG_ENABLED = 'Y') THEN
5858       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5859     END IF;
5860 
5861      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5862             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
5863      END IF;
5864      -- call START_ACTIVITY to create savepoint, check compatibility
5865      -- and initialize message list
5866      x_return_status := OKL_API.START_ACTIVITY(
5867                                                p_api_name      => l_api_name,
5868                                                p_pkg_name      => G_PKG_NAME,
5869      	                                       p_init_msg_list => p_init_msg_list,
5870                                                l_api_version   => l_api_version,
5871                                                p_api_version   => p_api_version,
5872                                                p_api_type      => G_API_TYPE,
5873                                                x_return_status => x_return_status);
5874 
5875      -- check if activity started successfully
5876      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5877        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5878      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5879        raise OKL_API.G_EXCEPTION_ERROR;
5880      END IF;
5881 
5882      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5883             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->Count: '||p_rbk_tbl.COUNT);
5884      END IF;
5885 
5886      IF (p_rbk_tbl.COUNT > 0 ) THEN
5887        l_line_count := 0;
5888        l_contract_count := 0;
5889        l_prev_contract_id := G_INIT_NUMBER;
5890        FOR i IN 1..p_rbk_tbl.COUNT
5891        LOOP
5892           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5893                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->Contract# :'||p_rbk_tbl(i).contract_number);
5894           END IF;
5895           l_contract_count := l_contract_count + 1;
5896           IF (l_prev_contract_id = p_rbk_tbl(i).khr_id
5897               OR
5898               l_contract_count = 1) THEN
5899              l_line_count := l_line_count + 1;
5900              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5901              l_contract_id := p_rbk_tbl(i).khr_id;
5902              l_prev_contract_id := p_rbk_tbl(i).khr_id; --Bug# 2579620
5903           ELSE
5904              --
5905              -- Restart termination process
5906              -- cancel any ongoing transaction, if any
5907              --
5908              cancel_transaction(
5909                                 x_return_status  => x_return_status,
5910                                 x_msg_count      => x_msg_count,
5911                                 x_msg_data       => x_msg_data,
5912                                 p_chr_id         => l_contract_id
5913                                );
5914 
5915              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5916                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
5917              END IF;
5918              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5919                raise OKL_API.G_EXCEPTION_ERROR;
5920              END IF;
5921 
5922              G_TERMINATION_TRX_ID   := p_source_trx_id;
5923              G_TERMINATION_TRX_TYPE := p_source_trx_type;
5924              G_MASS_RBK_TRX_ID      := NULL;
5925 
5926              okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
5927 
5928              -- Call Rebook_Contract
5929              rebook_contract(
5930                           x_return_status      => x_return_status,
5931                           x_msg_count          => x_msg_count,
5932                           x_msg_data           => x_msg_data,
5933                           p_online_yn          => 'N',
5934                           p_khr_id             => l_contract_id,
5935                           p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5936                           p_line_count         => l_line_count,
5937                           p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5938                           p_book_type_code     => NULL,
5939                           p_deprn_method_code  => p_deprn_method_code,
5940                           p_in_service_date    => p_in_service_date,
5941                           p_life_in_months     => p_life_in_months,
5942                           p_basic_rate         => p_basic_rate,
5943                           p_adjusted_rate      => p_adjusted_rate,
5944                           p_residual_value     => p_residual_value,
5945                           p_strm_lalevl_tbl    => p_strm_lalevl_tbl,
5946                           p_transaction_date   => p_transaction_date
5947                          );
5948              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5949                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After rebook_contract: '||x_return_status);
5950              END IF;
5951              IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5952                raise OKL_API.G_EXCEPTION_ERROR;
5953              END IF;
5954 
5955              x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
5956 
5957              l_line_count := 1;
5958              l_kle_tbl(l_line_count).id := p_rbk_tbl(i).kle_id;
5959              l_contract_id         := p_rbk_tbl(i).khr_id;
5960           END IF;
5961        END LOOP;
5962 
5963        --
5964        -- Restart termination process
5965        -- cancel any ongoing transaction, if any
5966        --
5967        cancel_transaction(
5968                           x_return_status  => x_return_status,
5969                           x_msg_count      => x_msg_count,
5970                           x_msg_data       => x_msg_data,
5971                           p_chr_id         => l_contract_id
5972                          );
5973 
5974        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5975                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
5976        END IF;
5977        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
5978          raise OKL_API.G_EXCEPTION_ERROR;
5979        END IF;
5980 
5981 
5982        G_TERMINATION_TRX_ID   := p_source_trx_id;
5983        G_TERMINATION_TRX_TYPE := p_source_trx_type;
5984        G_MASS_RBK_TRX_ID      := NULL;
5985 
5986        okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
5987 
5988        rebook_contract(
5989                        x_return_status      => x_return_status,
5990                        x_msg_count          => x_msg_count,
5991                        x_msg_data           => x_msg_data,
5992                        p_online_yn          => 'N',
5993                        p_khr_id             => l_contract_id,
5994                        p_kle_tbl            => l_kle_tbl,           -- Table of Top Line ID
5995                        p_line_count         => l_line_count,
5996                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
5997                        p_book_type_code     => NULL,
5998                        p_deprn_method_code  => p_deprn_method_code,
5999                        p_in_service_date    => p_in_service_date,
6000                        p_life_in_months     => p_life_in_months,
6001                        p_basic_rate         => p_basic_rate,
6002                        p_adjusted_rate      => p_adjusted_rate,
6003                        p_residual_value     => p_residual_value,
6004                        p_strm_lalevl_tbl    => p_strm_lalevl_tbl,
6005                        p_transaction_date   => p_transaction_date
6006                       );
6007 
6008        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6009                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->rebook Contract status: '||x_return_status);
6010        END IF;
6011        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6012           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6013        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6014           raise OKL_API.G_EXCEPTION_ERROR;
6015        END IF;
6016 
6017        x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
6018 
6019      ELSE
6020         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6021                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Nothing to Process...');
6022         END IF;
6023         x_return_status := OKL_API.G_RET_STS_ERROR;
6024         RAISE OKL_API.G_EXCEPTION_ERROR;
6025      END IF;
6026 
6027      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6028                           x_msg_data    => x_msg_data);
6029 
6030 
6031      RETURN;
6032 
6033   EXCEPTION
6034       when OKL_API.G_EXCEPTION_ERROR then
6035          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6036                         p_api_name  => l_api_name,
6037                         p_pkg_name  => G_PKG_NAME,
6038                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6039                         x_msg_count => x_msg_count,
6040                         x_msg_data  => x_msg_data,
6041                         p_api_type  => G_API_TYPE);
6042 
6043       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6044          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6045                         p_api_name  => l_api_name,
6046                         p_pkg_name  => G_PKG_NAME,
6047                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6048                         x_msg_count => x_msg_count,
6049                         x_msg_data  => x_msg_data,
6050                         p_api_type  => G_API_TYPE);
6051 
6052       when OTHERS then
6053          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6054                         p_api_name  => l_api_name,
6055                         p_pkg_name  => G_PKG_NAME,
6056                         p_exc_name  => 'OTHERS',
6057                         x_msg_count => x_msg_count,
6058                         x_msg_data  => x_msg_data,
6059                         p_api_type  => G_API_TYPE);
6060   END apply_mass_rebook;
6061 
6062 ------------------------------------------------------------------------------
6063 -- PROCEDURE apply_mass_rebook
6064 --   This proecdure uses to apply mass rebook for contracts.
6065 --   This has been overloaded for following specific purpose:
6066 --   1. To accept prescheduled payment amount.
6067 -- Calls:
6068 -- Called by:
6069 ------------------------------------------------------------------------------
6070   PROCEDURE apply_mass_rebook(
6071      p_api_version        IN  NUMBER,
6072      p_init_msg_list      IN  VARCHAR2,
6073      x_return_status      OUT NOCOPY VARCHAR2,
6074      x_msg_count          OUT NOCOPY NUMBER,
6075      x_msg_data           OUT NOCOPY VARCHAR2,
6076      p_chr_id             IN  OKC_K_HEADERS_V.ID%TYPE,
6077      p_kle_tbl            IN  kle_tbl_type,
6078      p_source_trx_id      IN  OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE,
6079      p_source_trx_type    IN  OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE,
6080      p_transaction_date   IN  OKL_TRX_CONTRACTS.DATE_TRANSACTION_OCCURRED%TYPE,
6081      x_mass_rebook_trx_id OUT NOCOPY OKL_TRX_CONTRACTS.ID%TYPE,
6082      p_ppd_amount   IN  NUMBER,
6083      p_ppd_reason_code   IN  FND_LOOKUPS.LOOKUP_CODE%TYPE,
6084      p_payment_struc   IN  okl_mass_rebook_pvt.strm_lalevl_tbl_type
6085   )
6086 IS
6087   l_api_name    VARCHAR2(35)    := 'apply_mass_rebook';
6088   l_proc_name   VARCHAR2(35)    := 'APPLY_MASS_REBOOK';
6089   l_api_version NUMBER          := 1.0;
6090 
6091   l_line_count       NUMBER;
6092   l_contract_count   NUMBER;
6093   l_contract_id      NUMBER;
6094   l_prev_contract_id NUMBER;
6095 
6096   l_kle_tbl          kle_tbl_type;
6097 
6098   l_tcnv_rec tcnv_rec_type;
6099   x_tcnv_rec tcnv_rec_type;
6100   l_strm_lalevl_tbl   strm_lalevl_tbl_type;  /* DEBUG */
6101 
6102   BEGIN
6103     IF (G_DEBUG_ENABLED = 'Y') THEN
6104       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6105     END IF;
6106 
6107      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6108             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
6109      END IF;
6110      -- call START_ACTIVITY to create savepoint, check compatibility
6111      -- and initialize message list
6112      x_return_status := OKL_API.START_ACTIVITY(
6113                                                p_api_name      => l_api_name,
6114                                                p_pkg_name      => G_PKG_NAME,
6115      	                                       p_init_msg_list => p_init_msg_list,
6116                                                l_api_version   => l_api_version,
6117                                                p_api_version   => p_api_version,
6118                                                p_api_type      => G_API_TYPE,
6119                                                x_return_status => x_return_status);
6120 
6121      -- check if activity started successfully
6122      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6123        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6124      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6125        raise OKL_API.G_EXCEPTION_ERROR;
6126      END IF;
6127 
6128 
6129        --
6130        -- Restart termination process
6131        -- cancel any ongoing transaction, if any
6132        --
6133        cancel_transaction(
6134                           x_return_status  => x_return_status,
6135                           x_msg_count      => x_msg_count,
6136                           x_msg_data       => x_msg_data,
6137                           p_chr_id         => p_chr_id
6138                          );
6139 
6140        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6141                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->After cancel_transaction: '||x_return_status);
6142        END IF;
6143        IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
6144          raise OKL_API.G_EXCEPTION_ERROR;
6145        END IF;
6146 
6147 
6148        /* DEBUG */
6149        G_TERMINATION_TRX_ID := NULL;
6150        G_PPD_TRX_ID   := p_source_trx_id;
6151        G_PPD_TRX_TYPE := p_source_trx_type;
6152        G_MASS_RBK_TRX_ID      := NULL;
6153 
6154        --okl_api.set_message('OKL', 'AM', 'Before Term Trx ID: ', G_TERMINATION_TRX_ID);
6155 
6156        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6157                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before calling rebook contract...');
6158        END IF;
6159        l_line_count := p_kle_tbl.COUNT;
6160        rebook_contract(
6161                        x_return_status      => x_return_status,
6162                        x_msg_count          => x_msg_count,
6163                        x_msg_data           => x_msg_data,
6164                        p_online_yn          => 'N',
6165                        p_khr_id             => p_chr_id,
6166                        p_kle_tbl            => p_kle_tbl,           -- Table of Top Line ID
6167                        p_line_count         => l_line_count,
6168                        p_request_name       => NULL,                -- Not a ON-LINE Mass Rebook
6169                        p_book_type_code     => NULL,
6170                        p_deprn_method_code  => NULL,
6171                        p_in_service_date    => NULL,
6172                        p_life_in_months     => NULL,
6173                        p_basic_rate         => NULL,
6174                        p_adjusted_rate      => NULL,
6175                        p_residual_value     => NULL,
6176                        p_strm_lalevl_tbl    => p_payment_struc,
6177                        p_transaction_date   => p_transaction_date
6178                       );
6179 
6180        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6181                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'----->rebook Contract status: '||x_return_status);
6182          OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After rebook contract: x_return_status=' || x_return_status);
6183        END IF;
6184        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6185           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6186                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Raising OKL_API.G_RET_STS_UNEXP_ERROR:');
6187           END IF;
6188           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6189        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6190           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6191                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Raising OKL_API.G_EXCEPTION_ERROR:');
6192           END IF;
6193           raise OKL_API.G_EXCEPTION_ERROR;
6194        END IF;
6195 
6196        x_mass_rebook_trx_id := G_MASS_RBK_TRX_ID;
6197 
6198      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6199                           x_msg_data    => x_msg_data);
6200 
6201 
6202      RETURN;
6203 
6204   EXCEPTION
6205       when OKL_API.G_EXCEPTION_ERROR then
6206          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6207                         p_api_name  => l_api_name,
6208                         p_pkg_name  => G_PKG_NAME,
6209                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6210                         x_msg_count => x_msg_count,
6211                         x_msg_data  => x_msg_data,
6212                         p_api_type  => G_API_TYPE);
6213         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6214                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After HANDLE_EXCEPTIONS: x_return_status='|| x_return_status);
6215         END IF;
6216 
6217       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6218          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6219                         p_api_name  => l_api_name,
6220                         p_pkg_name  => G_PKG_NAME,
6221                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6222                         x_msg_count => x_msg_count,
6223                         x_msg_data  => x_msg_data,
6224                         p_api_type  => G_API_TYPE);
6225 
6226       when OTHERS then
6227          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6228                         p_api_name  => l_api_name,
6229                         p_pkg_name  => G_PKG_NAME,
6230                         p_exc_name  => 'OTHERS',
6231                         x_msg_count => x_msg_count,
6232                         x_msg_data  => x_msg_data,
6233                         p_api_type  => G_API_TYPE);
6234 
6235   --null;
6236   return;
6237   END apply_mass_rebook;
6238 
6239 ------------------------------------------------------------------------------
6240 -- PROCEDURE create_mass_rbk_set_values
6241 --   This proecdure uses to create set values for  mass rebook request
6242 -- Calls:
6243 -- Called by:
6244 ------------------------------------------------------------------------------
6245     /* Added for CR */
6246   PROCEDURE create_mass_rbk_set_values(
6247                                      p_api_version      IN  NUMBER,
6248                                      p_init_msg_list    IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
6249                                      x_return_status    OUT NOCOPY VARCHAR2,
6250                                      x_msg_count        OUT NOCOPY NUMBER,
6251                                      x_msg_data         OUT NOCOPY VARCHAR2,
6252                                      p_request_name     IN  OKL_MASS_RBK_CRITERIA.REQUEST_NAME%TYPE,
6253                                      p_mrbv_tbl         IN  mrbv_tbl_type,
6254                                      x_mrbv_tbl         OUT NOCOPY mrbv_tbl_type)
6255                                       IS
6256 
6257   l_api_name    VARCHAR2(35)    := 'create_mass_rbk_set_values';
6258   l_proc_name   VARCHAR2(35)    := 'CREATE_MASS_RBK_SET_VALUES';
6259   l_api_version NUMBER          := 1.0;
6260   i             INTEGER;
6261   l_set_value_present VARCHAR2(1) := 'N';
6262 
6263   BEGIN
6264     IF (G_DEBUG_ENABLED = 'Y') THEN
6265       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6266     END IF;
6267      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6268             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
6269      END IF;
6270      -- call START_ACTIVITY to create savepoint, check compatibility
6271      -- and initialize message list
6272      x_return_status := OKL_API.START_ACTIVITY(
6273                                                p_api_name      => l_api_name,
6274                                                p_pkg_name      => G_PKG_NAME,
6275                                                p_init_msg_list => p_init_msg_list,
6276                                                l_api_version   => l_api_version,
6277                                                p_api_version   => p_api_version,
6278                                                p_api_type      => G_API_TYPE,
6279                                                x_return_status => x_return_status);
6280 
6281      -- check if activity started successfully
6282      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6283        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6284      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6285        raise OKL_API.G_EXCEPTION_ERROR;
6286      END IF;
6287      --Validate the Set Values Data
6288      --Atleast one Set Value should be Present
6289      FOR i IN p_mrbv_tbl.FIRST..p_mrbv_tbl.LAST
6290      LOOP
6291        IF(p_mrbv_tbl.EXISTS(i)) THEN
6292           IF (p_mrbv_tbl(i).criteria_code = 'LIFE_IN_MONTHS'
6293              OR
6294              p_mrbv_tbl(i).criteria_code = 'BASIC_RATE'
6295              OR
6296              p_mrbv_tbl(i).criteria_code = 'ADJUSTED_RATE') THEN
6297 
6298            IF (p_mrbv_tbl(i).operand IS NOT NULL
6299               OR
6300               p_mrbv_tbl(i).criteria_value1 IS NOT NULL
6301               OR
6302               p_mrbv_tbl(i).criteria_value2 IS NOT NULL) THEN
6303               okl_api.set_message(
6304                                  G_APP_NAME,
6305                                  G_INVALID_MATCH_OPTION,
6306                                  'CRIT_CODE',
6307                                  p_mrbv_tbl(i).criteria_code
6308                                );
6309               RAISE OKL_API.G_EXCEPTION_ERROR;
6310          END IF;
6311         END IF;
6312         --Check for Data Integrity
6313         IF(p_mrbv_tbl(i).criteria_code = 'LIFE_IN_MONTHS' AND
6314            p_mrbv_tbl(i).set_value IS NOT NULL) THEN
6315            IF(p_mrbv_tbl(i).set_value <= 0 OR TRUNC(p_mrbv_tbl(i).set_value)<>(p_mrbv_tbl(i).set_value)) THEN
6316               okl_api.set_message(
6317                                 G_APP_NAME,
6318                                 'OKL_CONTRACTS_INVALID_VALUE',
6319                                 'COL_NAME',
6320                                 'LIFE_IN_MONTHS');
6321               RAISE OKL_API.G_EXCEPTION_ERROR;
6322            END IF;
6323 
6324         END IF;
6325         IF(p_mrbv_tbl(i).criteria_code = 'BASIC_RATE' AND
6326            p_mrbv_tbl(i).set_value IS NOT NULL) THEN
6327            IF(p_mrbv_tbl(i).set_value <= 0 ) THEN
6328               okl_api.set_message(
6329                                 G_APP_NAME,
6330                                 'OKL_CONTRACTS_INVALID_VALUE',
6331                                 'COL_NAME',
6332                                 'BASIC_RATE');
6333               RAISE OKL_API.G_EXCEPTION_ERROR;
6334            END IF;
6335 
6336         END IF;
6337         IF(p_mrbv_tbl(i).criteria_code = 'ADJUSTED_RATE' AND
6338            p_mrbv_tbl(i).set_value IS NOT NULL) THEN
6339            IF(p_mrbv_tbl(i).set_value <= 0 ) THEN
6340               okl_api.set_message(
6341                                 G_APP_NAME,
6342                                 'OKL_CONTRACTS_INVALID_VALUE',
6343                                 'COL_NAME',
6344                                 'ADJUSTED_RATE');
6345               RAISE OKL_API.G_EXCEPTION_ERROR;
6346            END IF;
6347 
6348         END IF;
6349         IF (p_mrbv_tbl(i).set_value IS NOT NULL) THEN
6350             l_set_value_present := 'Y';
6351         END IF;
6352 
6353        END IF;
6354      END LOOP;
6355      IF (l_set_value_present = 'N') THEN
6356        okl_api.set_message(
6357                            G_APP_NAME,
6358                            G_NO_SET_VALUE,
6359                            'REQ_NAME',
6360                            p_request_name
6361                           );
6362        x_return_status := OKL_API.G_RET_STS_ERROR;
6363     END IF;
6364     --
6365     -- Insert Selection criteria
6366     --
6367     okl_mrb_pvt.insert_row(
6368                             p_api_version   => l_api_version,
6369                             p_init_msg_list => p_init_msg_list,
6370                             x_return_status => x_return_status,
6371                             x_msg_count     => x_msg_count,
6372                             x_msg_data      => x_msg_data,
6373                             p_mrbv_tbl      => p_mrbv_tbl,
6374                             x_mrbv_tbl      => x_mrbv_tbl
6375                            );
6376 
6377      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6378        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6379      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6380        raise OKL_API.G_EXCEPTION_ERROR;
6381      END IF;
6382 
6383      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6384                           x_msg_data    => x_msg_data);
6385 
6386 
6387      EXCEPTION
6388       when OKL_API.G_EXCEPTION_ERROR then
6389          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6390                         p_api_name  => l_api_name,
6391                         p_pkg_name  => G_PKG_NAME,
6392                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6393                         x_msg_count => x_msg_count,
6394                         x_msg_data  => x_msg_data,
6395                         p_api_type  => G_API_TYPE);
6396         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6397             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After HANDLE_EXCEPTIONS: x_return_status='|| x_return_status);
6398         END IF;
6399 
6400       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6401          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6402                         p_api_name  => l_api_name,
6403                         p_pkg_name  => G_PKG_NAME,
6404                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6405                         x_msg_count => x_msg_count,
6406                         x_msg_data  => x_msg_data,
6407                         p_api_type  => G_API_TYPE);
6408 
6409       when OTHERS then
6410          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6411                         p_api_name  => l_api_name,
6412                         p_pkg_name  => G_PKG_NAME,
6413                         p_exc_name  => 'OTHERS',
6414                         x_msg_count => x_msg_count,
6415                         x_msg_data  => x_msg_data,
6416                         p_api_type  => G_API_TYPE);
6417 
6418 
6419   END create_mass_rbk_set_values;
6420 
6421 END OKL_MASS_REBOOK_PVT;