DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_AM_LEASE_LOAN_TRMNT_PVT

Source


1 PACKAGE BODY OKL_AM_LEASE_LOAN_TRMNT_PVT AS
2 /* $Header: OKLRLLTB.pls 120.42.12010000.3 2008/10/20 18:37:23 apaul ship $ */
3 
4 -- GLOBAL VARIABLES
5   G_LEVEL_PROCEDURE            CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
6   G_LEVEL_EXCEPTION            CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
7   G_LEVEL_STATEMENT            CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
8   G_MODULE_NAME                CONSTANT VARCHAR2(500) := 'okl.am.plsql.okl_am_lease_loan_trmnt_pvt.';
9 
10   -- Start of comments
11   --
12   -- Function Name	: check_int_calc_done.
13   -- Description    : Returns 'Y' if last int calc was after last scheduled calculation
14   -- Business Rules	: Called from OKL_AM_CREATE_QUOTE_PVT, OKL_AM_TERMNT_QUOTE_PVT and OKL_AM_LEASE_TRMNT_PVT
15   -- Parameters	    :
16   -- Version		: 1.0
17   -- History        : RMUNJULU LOANS_ENHACEMENT
18   --                : SECHAWLA 20-JAN-06 4970009 : Added the interest calculation check for lease contracts
19   --                       with int calc basis ('FLOAT_FACTORS','REAMORT')
20   --                  SECHAWLA 24-JAN-05 4970009 : Modified check_int_calc_done to compare last_int_calc_till_date
21   --                       with termination  date instead of last_sch_int_calc_date, to determine if
22   --                       variable rate processing has been done completely
23   --                  RMUNJULU 20-FEB-06 5050158 : Modified the check based on contract end date
24   --
25   -- End of comments
26   FUNCTION check_int_calc_done(
27                p_contract_id         IN NUMBER,
28                p_contract_number     IN VARCHAR2,
29                p_quote_number        IN NUMBER DEFAULT NULL,
30                p_source              IN VARCHAR2,
31                p_trn_date            IN DATE) RETURN VARCHAR2 IS
32 
33 	  -- rmunjulu BUG 5050158
34       CURSOR get_contract_end_date_csr (p_contract_id IN NUMBER ) IS
35         SELECT end_date
36         FROM   okc_k_headers_b
37         WHERE  id = p_contract_id;
38 
39       l_last_int_calc_till_date DATE;
40       l_last_sch_int_calc_date DATE;
41       l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
42       l_deal_type VARCHAR2(300);
43       l_rev_rec_method VARCHAR2(300);
44 	     l_int_cal_basis VARCHAR2(300);
45   	   l_tax_owner VARCHAR2(300);
46       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_int_calc_done';
47       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
48       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
49       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
50 
51 	  -- rmunjulu BUG 5050158
52 		l_contract_end_date DATE;
53 
54   BEGIN
55      IF (is_debug_procedure_on) THEN
56        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
57      END IF;
58      IF (is_debug_statement_on) THEN
59        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
60        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_number: '|| p_contract_number);
61        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_number: '|| p_quote_number);
62        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_source: '|| p_source);
63        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: '|| p_trn_date);
64      END IF;
65 
66       IF (is_debug_statement_on) THEN
67         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_product_details');
68       END IF;
69       -- Get the contract product details
70       OKL_AM_UTIL_PVT.get_contract_product_details(
71                       p_khr_id           => p_contract_id,
72                       x_deal_type        => l_deal_type,
73                       x_rev_rec_method   => l_rev_rec_method,
74 				      x_int_cal_basis    => l_int_cal_basis,
75 				      x_tax_owner        => l_tax_owner,
76 				      x_return_status    => l_return_status);
77       IF (is_debug_statement_on) THEN
78         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_contract_product_details , return status: ' || l_return_status);
79         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_deal_type: ' || l_deal_type);
80         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_rev_rec_method: ' || l_rev_rec_method);
81         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_int_cal_basis: ' || l_int_cal_basis);
82         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_tax_owner: ' || l_tax_owner);
83       END IF;
84 
85 	  IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
86 	     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
87    	  ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
88 	 	 RAISE OKL_API.G_EXCEPTION_ERROR;
89    	  END IF;
90 
91      -- only for loans check int calc
92      -- rmunjulu LOANS_ENHANCEMENT added condition to check for only some cases
93      IF ( (l_deal_type LIKE 'LOAN%' AND l_int_cal_basis IN ('FLOAT','REAMORT','CATCHUP/CLEANUP'))
94 	       OR --SECHAWLA 20-JAN-06 4970009 :Added the following condition to cover certain type of leases
95 		  (l_deal_type LIKE 'LEASE%' AND l_int_cal_basis IN ('FLOAT_FACTORS','REAMORT') ) -- SECHAWLA 20-JAN-06 4970009 : added
96 		) THEN
97 
98          IF (is_debug_statement_on) THEN
99            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_VARIABLE_INT_UTIL_PVT.get_last_interim_int_calc_date');
100          END IF;
101          -- get last interest calculation till date
102          l_last_int_calc_till_date := OKL_VARIABLE_INT_UTIL_PVT.get_last_interim_int_calc_date(
103                                        x_return_status    => l_return_status,
104                                        p_khr_id           => p_contract_id);
105          IF (is_debug_statement_on) THEN
106            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_VARIABLE_INT_UTIL_PVT.get_last_interim_int_calc_date , return status: ' || l_return_status);
107            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_last_int_calc_till_date: ' || l_last_int_calc_till_date);
108          END IF;
109 
110    	     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
111 	        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
112    	     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
113 	 	    RAISE OKL_API.G_EXCEPTION_ERROR;
114    	     END IF;
115 
116 		 -- SECHAWLA 24-JAN-05 4970009 :  comparing  l_last_int_calc_till_date with
117 		 -- l_last_sch_int_calc_date won't work. e.g K1 (15-Jul-04 - 14-Oct-04)
118 		 -- ran variable rate procesing. It runs for 1 month at a time, starting from
119 		 -- the begining/last run date.
120 		 -- At the end of 1st run, l_last_int_calc_till_date = 15-AUG-04, l_last_sch_int_calc_date = 15-SEP-04
121 		 -- ran variable rate procesing 2nd time
122 		 -- At the end of 2nd run, l_last_int_calc_till_date = 15-SEP-04, l_last_sch_int_calc_date = 15-SEP-04
123 		 -- So our check ( l_last_int_calc_till_date < l_last_sch_int_calc_date) will fail and we will
124 		 -- allow termination. This is wrong. Variable rate processing needs to run for 1 more month (till the
125 		 -- contract end date). So we should compare l_last_int_calc_till_date with p_trn_date
126 		 -- Run variable rate processing for the 3rd time.
127 		 -- At the end of 3rd run, l_last_int_calc_till_date = 15-OCT-04, l_last_sch_int_calc_date = 15-SEP-04
128 		 -- Now l_last_int_calc_till_date > p_trn_date (termination date) and it is ok to terminate at this point
129 
130 		  -- rmunjulu BUG 5050158 WE NEED THE CHECK FOR LAST SCHEDULED INTEREST CALCULATION OR ELSE
131 		  -- IF USER TRIES TO DO TERMINATION ON 20-AUG, AND SCHEDULED IS 15-AUG, IT ERRORS.
132 
133          -- get last scheduled interest calculation date before termination date
134 
135          IF (is_debug_statement_on) THEN
136            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_VARIABLE_INT_UTIL_PVT.get_last_sch_int_calc_date');
137          END IF;
138          l_last_sch_int_calc_date := OKL_VARIABLE_INT_UTIL_PVT.get_last_sch_int_calc_date(
139                                        x_return_status    => l_return_status,
140                                        p_khr_id           => p_contract_id,
141                                        p_effective_date   => p_trn_date);
142          IF (is_debug_statement_on) THEN
143            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_VARIABLE_INT_UTIL_PVT.get_last_sch_int_calc_date , return status: ' || l_return_status);
144            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_last_sch_int_calc_date: ' || l_last_sch_int_calc_date);
145          END IF;
146 
147    	     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
148 	        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
149    	     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
150 	 	    RAISE OKL_API.G_EXCEPTION_ERROR;
151    	     END IF;
152 
153     	 -- rmunjulu BUG 5050158 derive contract end date
154    	     --OPEN get_contract_end_date_csr (p_contract_id);
155    	     --FETCH get_contract_end_date_csr INTO l_contract_end_date;
156    	     --CLOSE get_contract_end_date_csr;
157 
158     	 -- rmunjulu BUG 5050158 Final logic
159     	 -- If last int calc till date is NULL or last int calc till date < last scheduled int calc then
160 		     -- throw error
161 
162      	 -- rmunjulu BUG 5050158
163    	     --IF trunc(l_contract_end_date) < trunc(p_trn_date) THEN --  rmunjulu BUG 5050158 termination after contract end date
164 
165 	     -- if last int calc date is less than last scheduled int calculation then throw error
166          IF l_last_int_calc_till_date IS NULL
167 		 OR (trunc(l_last_int_calc_till_date) < trunc(l_last_sch_int_calc_date)) THEN --SECHAWLA 24-JAN-05 4970009
168 		   --OR (trunc(l_last_int_calc_till_date) < trunc(p_trn_date)  --SECHAWLA 24-JAN-05 4970009
169 		   --AND trunc(l_last_int_calc_till_date) < trunc(l_contract_end_date)) THEN -- rmunjulu BUG 5050158 Add condition to catch last calc
170 
171            -- If quote_number passed then give quote message
172            IF p_source = 'CREATE' THEN
173 
174               -- Termination quote cannot be created. Please process interest calculation
175               -- for contract CONTRACT_NUMBER up to the quote effective from date.
176               OKL_API.set_message (
177          			           p_app_name  	  => 'OKL',
178               		    	   p_msg_name  	  => 'OKL_AM_CREATE_TQ_RUN_INT_CALC',
179                                p_token1       => 'CONTRACT_NUMBER',
180                                p_token1_value => p_contract_number);
181 
182               RETURN 'N';
183 
184            ELSIF p_quote_number IS NOT NULL AND p_source = 'UPDATE' THEN
185 
186               -- Quote QUOTE_NUMBER can not be accepted. Please process interest calculation
187               -- for contract CONTRACT_NUMBER up to the quote effective from date.
188               OKL_API.set_message (
189          			           p_app_name  	  => 'OKL',
190               		    	   p_msg_name  	  => 'OKL_AM_UPD_TQ_RUN_INT_CALC',
191                                p_token1       => 'QUOTE_NUMBER',
192                                p_token1_value => p_quote_number,
193                                p_token2       => 'CONTRACT_NUMBER',
194                                p_token2_value => p_contract_number);
195 
196               RETURN 'N';
197 
198            ELSIF p_source = 'TERMINATE' THEN
199 
200               -- Contract CONTRACT_NUMBER can not be terminated. Please process Regular Stream Billing
201               -- for contract up to the termination date TERMINATION_DATE.
202               OKL_API.set_message (
203          			           p_app_name  	  => 'OKL',
204               		    	   p_msg_name  	  => 'OKL_AM_TERMT_RUN_INT_CALC',
205                                p_token1       => 'CONTRACT_NUMBER',
206                                p_token1_value => p_contract_number,
207                                p_token2       => 'TERMINATION_DATE',
208                                p_token2_value => p_trn_date);
209 
210               RETURN 'N';
211 
212            END IF;
213         END IF;
214 		  /*
215 		ELSE -- rmunjulu BUG 5050158 termination before contract end date (use old logic)
216 
217 	     -- if last int calc date is less than last scheduled int calculation then throw error
218          IF l_last_int_calc_till_date IS NULL
219 		 OR trunc(l_last_int_calc_till_date) < trunc(l_last_sch_int_calc_date) THEN
220 
221            -- If quote_number passed then give quote message
222            IF p_source = 'CREATE' THEN
223 
224               -- Termination quote cannot be created. Please process interest calculation
225               -- for contract CONTRACT_NUMBER up to the quote effective from date.
226               OKL_API.set_message (
227          			           p_app_name  	  => 'OKL',
228               		    	   p_msg_name  	  => 'OKL_AM_CREATE_TQ_RUN_INT_CALC',
229                                p_token1       => 'CONTRACT_NUMBER',
230                                p_token1_value => p_contract_number);
231 
232               RETURN 'N';
233 
234            ELSIF p_quote_number IS NOT NULL AND p_source = 'UPDATE' THEN
235 
236               -- Quote QUOTE_NUMBER can not be accepted. Please process interest calculation
237               -- for contract CONTRACT_NUMBER up to the quote effective from date.
238               OKL_API.set_message (
239          			           p_app_name  	  => 'OKL',
240               		    	   p_msg_name  	  => 'OKL_AM_UPD_TQ_RUN_INT_CALC',
241                                p_token1       => 'QUOTE_NUMBER',
242                                p_token1_value => p_quote_number,
243                                p_token2       => 'CONTRACT_NUMBER',
244                                p_token2_value => p_contract_number);
245 
246               RETURN 'N';
247 
248            ELSIF p_source = 'TERMINATE' THEN
249 
250               -- Contract CONTRACT_NUMBER can not be terminated. Please process Regular Stream Billing
251               -- for contract up to the termination date TERMINATION_DATE.
252               OKL_API.set_message (
253          			           p_app_name  	  => 'OKL',
254               		    	   p_msg_name  	  => 'OKL_AM_TERMT_RUN_INT_CALC',
255                                p_token1       => 'CONTRACT_NUMBER',
256                                p_token1_value => p_contract_number,
257                                p_token2       => 'TERMINATION_DATE',
258                                p_token2_value => p_trn_date);
259 
260               RETURN 'N';
261 
262            END IF;
263 
264 		 END IF;
265 
266 		 END IF;  -- rmunjulu BUG 5050158
267 		     */
268       END IF;
269      IF (is_debug_statement_on) THEN
270        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning Y');
271      END IF;
272      IF (is_debug_procedure_on) THEN
273        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
274      END IF;
275 
276       RETURN 'Y';
277 
278   EXCEPTION
279 
280       WHEN OKL_API.G_EXCEPTION_ERROR THEN
281         IF (is_debug_exception_on) THEN
282             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
283         END IF;
284         RETURN NULL;
285 
286       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
287         IF (is_debug_exception_on) THEN
288             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
289         END IF;
290         RETURN NULL;
291 
292       WHEN OTHERS THEN
293         IF (is_debug_exception_on) THEN
294             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
295 			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
296         END IF;
297 
298         OKL_API.set_message(
299                    p_app_name      => OKC_API.G_APP_NAME,
300                    p_msg_name      => G_UNEXPECTED_ERROR,
301                    p_token1        => G_SQLCODE_TOKEN,
302                    p_token1_value  => SQLCODE,
303                    p_token2        => G_SQLERRM_TOKEN,
304                    p_token2_value  => SQLERRM);
305 
306         RETURN NULL;
307 
308   END check_int_calc_done;
309 
310 -- Start of Commnets
311 -- Procedure Name       : get_last_run
312 -- Description          : Gets the last run of TRX_MSGS
313 -- Business Rules       :
314 -- Parameters           : P_Trx_Id
315 -- Version              : 1.0
316 -- History              : RMUNJULU 24-SEP-03 3018641 created
317 -- End of Commnets
318   PROCEDURE get_last_run(
319                          p_trx_id         IN  NUMBER,
320                          x_last_run       OUT NOCOPY NUMBER) IS
321 
322      -- Get the last run for TRX_MSGS
323      CURSOR get_last_run_csr ( p_trx_id IN NUMBER) IS
324          SELECT NVL(MAX(TMG.tmg_run),0) last_run
325          FROM   OKL_TRX_MSGS TMG
326          WHERE  TMG.trx_id = p_trx_id;
327 
328      l_last_run NUMBER := 0;
329       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_last_run';
330       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
331       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
332       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
333 
334 
335   BEGIN
336      IF (is_debug_procedure_on) THEN
337        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
338      END IF;
339      IF (is_debug_statement_on) THEN
340        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trx_id: '|| p_trx_id);
341      END IF;
342 
343      -- Get the last run
344      FOR get_last_run_rec IN get_last_run_csr(p_trx_id) LOOP
345 
346        l_last_run := get_last_run_rec.last_run;
347 
348      END LOOP;
349 
350     x_last_run := l_last_run;
351     IF (is_debug_procedure_on) THEN
352       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
353     END IF;
354 
355   EXCEPTION
356 
357     WHEN OTHERS THEN
358        IF (is_debug_exception_on) THEN
359            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
360 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
361        END IF;
362        -- Set the oracle error message
363        OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
364                            p_msg_name      => g_unexpected_error,
365                            p_token1        => g_sqlcode_token,
366                            p_token1_value  => SQLCODE,
367                            p_token2        => g_sqlerrm_token,
368                            p_token2_value  => SQLERRM);
369        x_last_run := NULL;
370 
371   END get_last_run;
372 
373 
374 -- Start of Commnets
375 -- Procedure Name       : get_set_tmg_run
376 -- Description          : Gets the last run of TRX_MSGS and increments by 1 and sets TMG_RUN
377 -- Business Rules       :
378 -- Parameters           : P_Trx_Id
379 -- Version              : 1.0
380 -- History              : RMUNJULU 24-SEP-03 3018641 created
381 -- End of Commnets
382   PROCEDURE get_set_tmg_run(
383                          p_trx_id         IN  NUMBER,
384                          x_return_status  OUT NOCOPY VARCHAR2) IS
385 
386 
387      -- Get the unfilled TMG_RUN rows for the trx_id
388      CURSOR get_empty_tmg_run_csr ( p_trx_id IN NUMBER) IS
389          SELECT TMG.id,
390                 TMG.object_version_number
391          FROM   OKL_TRX_MSGS TMG
392          WHERE  TMG.trx_id = p_trx_id
393          AND    TMG.tmg_run IS NULL;
394 
395      l_last_run         NUMBER;
396      lp_tmgv_tbl		OKL_TRX_MSGS_PUB.tmgv_tbl_type;
397 	 lx_tmgv_tbl		OKL_TRX_MSGS_PUB.tmgv_tbl_type;
398 
399 	 l_return_status    VARCHAR2(1)	:= OKL_API.G_RET_STS_SUCCESS;
400 
401 	 l_api_version		CONSTANT NUMBER	:= 1;
402 	 l_msg_count		NUMBER		:= OKL_API.G_MISS_NUM;
403 	 l_msg_data		    VARCHAR2(2000);
404      i NUMBER := 1;
405      l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_set_tmg_run';
406      is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
407      is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
408      is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
409 
410 
411   BEGIN
412      IF (is_debug_procedure_on) THEN
413        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
414      END IF;
415      IF (is_debug_statement_on) THEN
416        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trx_id: '|| p_trx_id);
417      END IF;
418 
419      -- Get the last run
420      get_last_run(
421                   p_trx_id        => p_trx_id,
422                   x_last_run      => l_last_run);
423       IF (is_debug_statement_on) THEN
424         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called get_last_run , l_last_run: ' || l_last_run);
425       END IF;
426 
427      -- increment the last run
428      l_last_run := l_last_run + 1;
429 
430      -- get the rows which needs to be update with last run
431      FOR get_empty_tmg_run_rec IN get_empty_tmg_run_csr(p_trx_id) LOOP
432 
433         lp_tmgv_tbl(i).id := get_empty_tmg_run_rec.id;
434         lp_tmgv_tbl(i).object_version_number := get_empty_tmg_run_rec.object_version_number;
435         lp_tmgv_tbl(i).tmg_run :=  l_last_run;
436 
437         i := i + 1;
438 
439      END LOOP;
440 
441      -- Update the TMG_RUN of OKL_TRX_MSGS with l_last_run+1 for the TRX_ID with null TMG_RUN
442 	IF (lp_tmgv_tbl.COUNT > 0) THEN
443 
444         IF (is_debug_statement_on) THEN
445           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TRX_MSGS_PUB.update_trx_msgs');
446         END IF;
447 		OKL_TRX_MSGS_PUB.update_trx_msgs (
448 			p_api_version	=> l_api_version,
449 			p_init_msg_list	=> OKL_API.G_FALSE,
450 			x_return_status	=> l_return_status,
451 			x_msg_count	    => l_msg_count,
452 			x_msg_data   	=> l_msg_data,
453 			p_tmgv_tbl	    => lp_tmgv_tbl,
454 			x_tmgv_tbl	    => lx_tmgv_tbl);
455         IF (is_debug_statement_on) THEN
456           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_TRX_MSGS_PUB.update_trx_msgs , return status: ' || l_return_status);
457         END IF;
458 
459 		IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
460 			RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
461 		ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
462 			RAISE OKL_API.G_EXCEPTION_ERROR;
463 		END IF;
464 
465 	END IF;
466 
467     x_return_status := l_return_status;
468     IF (is_debug_procedure_on) THEN
469       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
470     END IF;
471 
472   EXCEPTION
473 
474     WHEN OKL_API.G_EXCEPTION_ERROR THEN
475      IF (is_debug_exception_on) THEN
476        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
477      END IF;
478      x_return_status := OKL_API.G_RET_STS_ERROR;
479 
480     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
481      IF (is_debug_exception_on) THEN
482        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
483      END IF;
484      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
485 
486     WHEN OTHERS THEN
487        IF (is_debug_exception_on) THEN
488            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
489 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
490        END IF;
491        -- Set the oracle error message
492        OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
493                            p_msg_name      => g_unexpected_error,
494                            p_token1        => g_sqlcode_token,
495                            p_token1_value  => SQLCODE,
496                            p_token2        => g_sqlerrm_token,
497                            p_token2_value  => SQLERRM);
498        x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
499 
500   END get_set_tmg_run;
501 
502 
503   -- ++++++++++++++++++++  service contract integration begin ++++++++++++++++++
504 
505   -- Start of comments
506   --
507   -- Function Name	: check_service_link.
508   -- Description    : If a link exists, the service contract information is returned back.
509   --                  If no link exists, it returns NULL to service contract out variables.
510   -- Business Rules	:
511   -- Parameters	    :
512   -- Version		: 1.0
513   -- History        : RMUNJULU 3061751 27-AUG-2003 Created
514   --
515   -- End of comments
516   PROCEDURE check_service_link (
517                                 p_api_version             IN  NUMBER,
518                                 p_init_msg_list           IN  VARCHAR2,
519                                 x_return_status           OUT NOCOPY VARCHAR2,
520                                 x_msg_count               OUT NOCOPY NUMBER,
521                                 x_msg_data                OUT NOCOPY VARCHAR2,
522                                 p_lease_asset_id          IN  OKC_K_LINES_V.ID%TYPE,
523                                 x_service_contract_id     OUT NOCOPY OKC_K_HEADERS_V.ID%TYPE
524                                ) IS
525 
526   l_api_name    VARCHAR2(35)    := 'check_service_link';
527   l_proc_name   VARCHAR2(35)    := 'CHECK_SERVICE_LINK';
528   l_api_version CONSTANT NUMBER := 1;
529   l_okl_chr_id OKC_K_HEADERS_V.ID%TYPE;
530   l_oks_chr_id OKC_K_HEADERS_V.ID%TYPE;
531   l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_service_link';
532   is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
533   is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
534   is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
535 
536   G_API_TYPE VARCHAR2(20) := '_PVT';
537 
538 
539   -- Check if the Financial asset is serviced thru OKS - Will return the OKL Contract
540   CURSOR link_csr (p_kle_id OKC_K_LINES_V.ID%TYPE) IS
541       SELECT KREL.chr_id   okl_contract_id
542       FROM   OKC_K_HEADERS_B   OKS_CHRB,
543              OKC_LINE_STYLES_B OKS_COV_PD_LSE,
544              OKC_K_LINES_B     OKS_COV_PD_CLEB,
545              OKC_K_REL_OBJS    KREL,
546              OKC_LINE_STYLES_B LNK_SRV_LSE,
547              OKC_STATUSES_B    LNK_SRV_STS,
548              OKC_K_LINES_B     LNK_SRV_CLEB,
549              OKC_K_ITEMS       LNK_SRV_CIM
550       WHERE  OKS_CHRB.scs_code             = 'SERVICE'
551       AND    OKS_CHRB.id                   = OKS_COV_PD_CLEB.dnz_chr_id
552       AND    OKS_COV_PD_CLEB.lse_id        = OKS_COV_PD_LSE.id
553       AND    OKS_COV_PD_LSE.lty_code       = 'COVER_PROD'
554       AND    '#'                           = KREL.object1_id2
555       AND    OKS_COV_PD_CLEB.id            = KREL.object1_id1
556       AND    KREL.rty_code                 = 'OKLSRV'
557       AND    KREL.cle_id                   = LNK_SRV_CLEB.id
558       AND    LNK_SRV_CLEB.lse_id           = LNK_SRV_LSE.id
559       AND    LNK_SRV_LSE.lty_code          = 'LINK_SERV_ASSET'
560       AND    LNK_SRV_CLEB.sts_code         = LNK_SRV_STS.code
561       AND    LNK_SRV_CLEB.id               = LNK_SRV_CIM.cle_id
562       AND    LNK_SRV_CIM.jtot_object1_code = 'OKX_COVASST'
563       AND    LNK_SRV_CIM.object1_id2       = '#'
564       AND    LNK_SRV_CIM.object1_id1       = p_kle_id;
565 
566   BEGIN -- main process begins here
567      IF (is_debug_procedure_on) THEN
568        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
569      END IF;
570      IF (is_debug_statement_on) THEN
571        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_lease_asset_id: '|| p_lease_asset_id);
572      END IF;
573 
574       x_return_status := OKL_API.G_RET_STS_SUCCESS;
575 
576       -- call START_ACTIVITY to create savepoint, check compatibility
577       -- and initialize message list
578       x_return_status := OKL_API.START_ACTIVITY(
579 			p_api_name      => l_api_name,
580 			p_pkg_name      => G_PKG_NAME,
581 			p_init_msg_list => p_init_msg_list,
582 			l_api_version   => l_api_version,
583 			p_api_version   => p_api_version,
584 			p_api_type      => G_API_TYPE,
585 			x_return_status => x_return_status);
586 
587       -- check if activity started successfully
588       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
589          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
590       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
591          raise OKL_API.G_EXCEPTION_ERROR;
592       END IF;
593 
594       -- Check if the Financial Asset is Serviced thru OKS
595       FOR link_rec IN link_csr(p_lease_asset_id) LOOP
596         l_okl_chr_id := link_rec.okl_contract_id;
597       END LOOP;
598 
599       IF (is_debug_statement_on) THEN
600         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
601       END IF;
602       -- Get the Service Contract for the Leased Contract
603       OKL_SERVICE_INTEGRATION_PVT.check_service_link (
604                    p_api_version           => p_api_version,
605                    p_init_msg_list         => OKL_API.G_FALSE,
606                    x_return_status         => x_return_status,
607                    x_msg_count             => x_msg_count,
608                    x_msg_data              => x_msg_data,
609                    p_lease_contract_id     => l_okl_chr_id ,
610                    x_service_contract_id   => l_oks_chr_id);
611       IF (is_debug_statement_on) THEN
612         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || x_return_status);
613         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id: ' || l_oks_chr_id);
614       END IF;
615 
616       x_service_contract_id := l_oks_chr_id;
617 
618       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
619                            x_msg_data    => x_msg_data);
620       IF (is_debug_procedure_on) THEN
621         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
622       END IF;
623 
624   EXCEPTION
625       WHEN OKL_API.G_EXCEPTION_ERROR THEN
626          IF (is_debug_exception_on) THEN
627            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
628          END IF;
629          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
630 			p_api_name  => l_api_name,
631 			p_pkg_name  => G_PKG_NAME,
632 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
633 			x_msg_count => x_msg_count,
634 			x_msg_data  => x_msg_data,
635 			p_api_type  => G_API_TYPE);
636 
637       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
638          IF (is_debug_exception_on) THEN
639            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
640          END IF;
641          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
642 			p_api_name  => l_api_name,
643 			p_pkg_name  => G_PKG_NAME,
644 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
645 			x_msg_count => x_msg_count,
646 			x_msg_data  => x_msg_data,
647 			p_api_type  => G_API_TYPE);
648 
649       WHEN OTHERS THEN
650          IF (is_debug_exception_on) THEN
651              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
652 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
653          END IF;
654          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
655 			p_api_name  => l_api_name,
656 			p_pkg_name  => G_PKG_NAME,
657 			p_exc_name  => 'OTHERS',
658 			x_msg_count => x_msg_count,
659 			x_msg_data  => x_msg_data,
660 			p_api_type  => G_API_TYPE);
661 
662   END check_service_link;
663 
664   -- Start of comments
665   --
666   -- Function Name	: check_true_partial_quote.
667   -- Description    : Returns Y if TRUE partial quote(some more assets); else N or NULL
668   -- Business Rules	: CALLED FROM OKL_AM_LEASE_LOAN_TRMNT_PVT, OKL_AM_TERMNT_QUOTE_PVT
669   -- Parameters	    :
670   -- Version		: 1.0
671   -- History        : RMUNJULU 3061751 27-AUG-2003 Created
672   --
673   -- End of comments
674   FUNCTION check_true_partial_quote(
675                p_quote_id     IN NUMBER,
676                p_contract_id  IN NUMBER) RETURN VARCHAR2 IS
677 
678       -- Get the quote assets count
679       CURSOR get_quote_assets_no_csr (p_qte_id IN NUMBER) IS
680       SELECT COUNT(TQL.id) no_of_quote_assets
681       FROM   OKL_TXL_QUOTE_LINES_B TQL
682       WHERE  TQL.qlt_code = 'AMCFIA'
683       AND    TQL.qte_id = p_qte_id;
684 
685       -- Get the contract assets count - All NON Terminated Financial Assets
686       -- rmunjulu INVESTOR_DISB_ADJ
687       -- get assets with same status as contract
688       CURSOR get_contract_assets_no_csr (p_khr_id IN NUMBER) IS
689       SELECT COUNT(CLE.id) no_of_contract_assets
690       FROM   OKC_K_LINES_B CLE,
691              OKC_LINE_STYLES_B LSE,
692              --OKC_STATUSES_B STS,
693              OKC_K_HEADERS_B CHR
694       WHERE  CLE.lse_id = LSE.id
695       AND    LSE.lty_code = 'FREE_FORM1'
696       --AND    CLE.sts_code = STS.code
697       AND    CLE.sts_code = CHR.sts_code
698       AND    CHR.id = CLE.dnz_chr_id
699       --AND    STS.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED') --OKC STATUSES
700       AND    CLE.dnz_chr_id = p_khr_id;
701 
702       -- Get the quote assets details
703       CURSOR get_asset_qty_csr (p_qte_id IN NUMBER) IS
704       SELECT TQL.kle_id,
705              TQL.asset_quantity,
706              TQL.quote_quantity
707       FROM   OKL_TXL_QUOTE_LINES_B TQL
708       WHERE  TQL.qlt_code = 'AMCFIA'
709       AND    TQL.qte_id = p_qte_id;
710 
711       l_quote_assets_no NUMBER;
712       l_contract_assets_no NUMBER;
713       l_true_partial_quote VARCHAR2(1) := 'N';
714       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_true_partial_quote';
715       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
716       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
717       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
718 
719   BEGIN
720      IF (is_debug_procedure_on) THEN
721        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
722      END IF;
723      IF (is_debug_statement_on) THEN
724        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_id: '|| p_quote_id);
725        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
726      END IF;
727 
728       -- Get the no of assets in quote
729       FOR get_quote_assets_no_rec
730       IN  get_quote_assets_no_csr(p_quote_id) LOOP
731           l_quote_assets_no := get_quote_assets_no_rec.no_of_quote_assets;
732       END LOOP;
733 
734       -- Get the no of assets in contract - non terminated
735       FOR get_contract_assets_no_rec
736       IN  get_contract_assets_no_csr(p_contract_id) LOOP
737           l_contract_assets_no := get_contract_assets_no_rec.no_of_contract_assets;
738       END LOOP;
739 
740       -- If quoted assets no = contract assets no
741       IF l_quote_assets_no = l_contract_assets_no THEN
742 
743           -- For Each Quote Asset Check Corresponding contract asset quantity
744           -- If do not match then l_true_partial_quote = 'Y'
745           FOR get_asset_qty_rec
746           IN  get_asset_qty_csr(p_quote_id) LOOP
747 
748               -- Should not have any upgrade issues (when asset_qty
749               -- and quote_qty are not filled) In those cases its always
750               -- full_termination and wont get inside below IF
751 
752               -- If asset_qty > quote_qty then TRUE PARTIAL
753               IF get_asset_qty_rec.asset_quantity > get_asset_qty_rec.quote_quantity THEN
754 
755                   l_true_partial_quote := 'Y';
756 
757               END IF;
758 
759           END LOOP;
760 
761       ELSE -- assets number for quote and contract do not match -- so TRUE PARTIAL
762 
763           l_true_partial_quote := 'Y';
764 
765       END IF;
766       IF (is_debug_statement_on) THEN
767         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_true_partial_quote: '||l_true_partial_quote);
768       END IF;
769       IF (is_debug_procedure_on) THEN
770         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
771       END IF;
772 
773       RETURN l_true_partial_quote;
774 
775   EXCEPTION
776 
777       WHEN OTHERS THEN
778         IF (is_debug_exception_on) THEN
779             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
780 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
781         END IF;
782 
783         OKL_API.set_message(
784                    p_app_name      => OKC_API.G_APP_NAME,
785                    p_msg_name      => G_UNEXPECTED_ERROR,
786                    p_token1        => G_SQLCODE_TOKEN,
787                    p_token1_value  => SQLCODE,
788                    p_token2        => G_SQLERRM_TOKEN,
789                    p_token2_value  => SQLERRM);
790 
791 	    RETURN NULL;
792 
793   END check_true_partial_quote;
794 
795   -- Start of comments
796   --
797   -- Function Name	: check_true_partial_quote.
798   -- Description    : Returns Y if TRUE partial quote(some more assets); else N or NULL
799   -- Business Rules	: CALLED FROM OKL_AM_LEASE_LOAN_TRMNT_PVT
800   -- Parameters	    :
801   -- Version		: 1.0
802   -- History        : rmunjulu bug 4997075
803   --
804   -- End of comments
805   FUNCTION check_true_partial_quote_yn(
806                p_quote_id     IN NUMBER,
807                p_contract_id  IN NUMBER) RETURN VARCHAR2 IS
808 
809       -- Get the quote assets details
810       CURSOR get_asset_qty_csr (p_qte_id IN NUMBER) IS
811       SELECT TQL.kle_id,
812              TQL.asset_quantity,
813              TQL.quote_quantity
814       FROM   OKL_TXL_QUOTE_LINES_B TQL
815       WHERE  TQL.qlt_code = 'AMCFIA'
816       AND    TQL.qte_id = p_qte_id;
817 
818        -- get any additional assets on contract which are non terminated and not in quote
819       CURSOR get_additional_assets_csr (p_khr_id IN NUMBER, p_qte_id IN NUMBER) IS
820       SELECT 1
821       FROM   OKC_K_LINES_B CLE,
822              OKC_LINE_STYLES_B LSE,
823              OKC_K_HEADERS_B CHR
824       WHERE  CLE.lse_id = LSE.id
825       AND    LSE.lty_code = 'FREE_FORM1'
826       AND    CLE.sts_code = CHR.sts_code
827       AND    CHR.id = CLE.dnz_chr_id
828       AND    CLE.dnz_chr_id = p_khr_id
829       AND    CLE.id NOT IN
830                     (SELECT kle_id
831                      FROM   OKL_TXL_QUOTE_LINES_B
832                      WHERE  qte_id = p_qte_id
833                      AND    qlt_code = 'AMCFIA');
834 
835       l_quote_assets_no NUMBER;
836       l_contract_assets_no NUMBER;
837       l_true_partial_quote VARCHAR2(1) := 'N';
838       l_additional_assets_yn VARCHAR2(3);
839       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_true_partial_quote_yn';
840       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
841       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
842       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
843   BEGIN
844       IF (is_debug_procedure_on) THEN
845         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
846       END IF;
847      IF (is_debug_statement_on) THEN
848        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_id: '|| p_quote_id);
849        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
850      END IF;
851 
852       -- Check if any more assets exist in contract which have not been quoted
853       FOR get_additional_assets_rec IN get_additional_assets_csr (p_contract_id,p_quote_id) LOOP
854          l_additional_assets_yn := 'Y';
855       END LOOP;
856 
857       IF nvl(l_additional_assets_yn,'N')  = 'N' THEN -- no more assets exist in contract which has not been quoted
858 
859           -- For Each Quote Asset Check Corresponding contract asset quantity
860           -- If do not match then l_true_partial_quote = 'Y'
861           FOR get_asset_qty_rec
862           IN  get_asset_qty_csr(p_quote_id) LOOP
863 
864               -- Should not have any upgrade issues (when asset_qty
865               -- and quote_qty are not filled) In those cases its always
866               -- full_termination and wont get inside below IF
867 
868               -- If asset_qty > quote_qty then TRUE PARTIAL
869               IF get_asset_qty_rec.asset_quantity > get_asset_qty_rec.quote_quantity THEN
870 
871                   l_true_partial_quote := 'Y';
872 
873               END IF;
874 
875           END LOOP;
876 
877       ELSE -- some more assets exist for the contract which have not been quoted so - TRUE PARTIAL
878 
879           l_true_partial_quote := 'Y';
880 
881       END IF;
882       IF (is_debug_procedure_on) THEN
883         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
884       END IF;
885       IF (is_debug_statement_on) THEN
886         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_true_partial_quote: '||l_true_partial_quote);
887       END IF;
888 
889       RETURN l_true_partial_quote;
890 
891   EXCEPTION
892 
893       WHEN OTHERS THEN
894         IF (is_debug_exception_on) THEN
895             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
896 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
897         END IF;
898 
899         OKL_API.set_message(
900                    p_app_name      => OKC_API.G_APP_NAME,
901                    p_msg_name      => G_UNEXPECTED_ERROR,
902                    p_token1        => G_SQLCODE_TOKEN,
903                    p_token1_value  => SQLCODE,
904                    p_token2        => G_SQLERRM_TOKEN,
905                    p_token2_value  => SQLERRM);
906 
907 	    RETURN NULL;
908 
909   END check_true_partial_quote_yn;
910 
911 
912   -- Start of comments
913   --
914   -- Function Name	: check_service_k_int_needed.
915   -- Description    : Returns Y if Service Intergration needed; else N or NULL
916   -- Business Rules	: Called from OKL_AM_LEASE_LOAN_TRMNT_PVT
917   -- Parameters	    :
918   -- Version		: 1.0
919   -- History        : RMUNJULU 3061751 27-AUG-2003 Created
920   --                  RMUNJULU 05-JAN-04 SERVICE K UPDATES
921   --
922   -- End of comments
923   FUNCTION check_service_k_int_needed(
924                p_term_rec     IN term_rec_type DEFAULT G_TERM_REC_EMPTY,
925                p_tcnv_rec     IN tcnv_rec_type DEFAULT G_TCNV_REC_EMPTY,
926                p_partial_yn   IN VARCHAR2 DEFAULT NULL,
927                p_asset_id     IN NUMBER DEFAULT NULL,
928                p_source       IN VARCHAR2) RETURN VARCHAR2 IS
929 
930       l_service_integration_needed VARCHAR2(1) := 'N';
931       l_true_partial_quote VARCHAR2(1) := 'N';
932       l_oks_chr_id NUMBER;
933       l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
934 
935       l_api_version CONSTANT NUMBER := 1;
936       l_msg_count NUMBER := OKL_API.G_MISS_NUM;
937       l_msg_data VARCHAR2(2000);
938       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_service_k_int_needed';
939       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
940       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
941       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
942 
943   BEGIN
944      IF (is_debug_procedure_on) THEN
945        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
946      END IF;
947      IF (is_debug_statement_on) THEN
948        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_partial_yn: '|| p_partial_yn);
949        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_asset_id: '|| p_asset_id);
950        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_source: '|| p_source);
951        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
952        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
953        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.tmt_recycle_yn: '||p_tcnv_rec.tmt_recycle_yn);
954      END IF;
955 
956       -- IF SOURCE = 'TERMINATION'
957       --   If Recycle YN = 'N'  AND Linked Lease AND Full Termination THEN
958       --     RETURN Y
959       --   End if ;
960       -- IF SOURCE = 'DISPOSE'
961       --   If linked lease THEN
962       --     RETURN Y
963       -- IF SOURCE = 'RETURN'
964       --   If linked lease THEN
965       --     RETURN Y
966 
967       -- Check Source
968       IF p_source = 'TERMINATION' THEN -- Termination, so p_term_rec, p_tcnv_rec and p_partial_yn will be filled
969 
970 -- RMUNJULU 05-JAN-04 Removed condition to check only if non recycle as this can be done in recycle too
971 -- we now check that the contract is terminated to say that service int is needed
972 -- since this procedure is called before the termination we cannot check contract is terminated or not here
973 -- so we will check that in service_k_intergration procedure.
974           -- If Recycle_YN = N
975 --          IF NVL(p_tcnv_rec.tmt_recycle_yn,'N') = 'N'
976 --          OR p_tcnv_rec.tmt_recycle_yn = OKL_API.G_MISS_CHAR THEN
977 
978               -- Get the linked lease details
979               IF (is_debug_statement_on) THEN
980                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
981               END IF;
982               OKL_SERVICE_INTEGRATION_PVT.check_service_link (
983                                 p_api_version           => l_api_version,
984                                 p_init_msg_list         => OKL_API.G_FALSE,
985                                 x_return_status         => l_return_status,
986                                 x_msg_count             => l_msg_count,
987                                 x_msg_data              => l_msg_data,
988                                 p_lease_contract_id     => p_term_rec.p_contract_id ,
989                                 x_service_contract_id   => l_oks_chr_id);
990 
991               IF (is_debug_statement_on) THEN
992                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || l_return_status);
993                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id: ' || l_oks_chr_id);
994               END IF;
995               -- If linked Lease
996               IF  l_return_status = OKL_API.G_RET_STS_SUCCESS
997               AND l_oks_chr_id IS NOT NULL THEN
998 
999                   -- Find if Full Termination
1000                   IF p_partial_yn = 'Y' THEN
1001 
1002                       -- need to check if no more assets (This case p_quote_id is Always populated)
1003                       l_true_partial_quote := check_true_partial_quote_yn( -- rmunjulu 4997075
1004                                                  p_quote_id     => p_term_rec.p_quote_id,
1005                                                  p_contract_id  => p_term_rec.p_contract_id);
1006                       IF (is_debug_statement_on) THEN
1007                         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_true_partial_quote_yn , l_true_partial_quote: ' || l_true_partial_quote);
1008                       END IF;
1009 
1010                   ELSE -- Partial_YN = 'N'
1011 
1012                       l_true_partial_quote := 'N';
1013 
1014                   END IF;
1015 
1016                   -- If TRUE partial termination then
1017                   IF l_true_partial_quote = 'N' THEN
1018 
1019                      l_service_integration_needed := 'Y';
1020 
1021                   END IF;
1022               ELSE -- Not Linked Lease
1023 
1024                   l_service_integration_needed := 'N';
1025 
1026               END IF;
1027 --          ELSE -- Recycle YN = Y
1028 
1029 --              l_service_integration_needed := 'N';
1030 
1031 --          END IF;
1032       ELSIF p_source IN ('DISPOSE','RETURN') THEN -- DISPOSE or RETURN, so p_asset_id will be filled
1033 
1034           -- Get the linked lease details   -- ***
1035           --OKL_SERVICE_INTEGRATION_PVT.check_service_link (
1036           check_service_link(
1037                                 p_api_version           => l_api_version,
1038                                 p_init_msg_list         => OKL_API.G_FALSE,
1039                                 x_return_status         => l_return_status,
1040                                 x_msg_count             => l_msg_count,
1041                                 x_msg_data              => l_msg_data,
1042                                 p_lease_asset_id        => p_asset_id ,
1043                                 x_service_contract_id   => l_oks_chr_id);
1044            IF (is_debug_statement_on) THEN
1045              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_service_link , l_oks_chr_id: ' || l_oks_chr_id);
1046            END IF;
1047 
1048           -- If linked Lease
1049           IF  l_return_status = OKL_API.G_RET_STS_SUCCESS
1050           AND l_oks_chr_id IS NOT NULL THEN
1051 
1052               l_service_integration_needed := 'Y';
1053 
1054           ELSE -- Not linked lease -- no integration needed
1055 
1056               l_service_integration_needed := 'N';
1057 
1058           END IF;
1059 
1060       END IF;
1061       IF (is_debug_procedure_on) THEN
1062         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
1063       END IF;
1064 
1065       IF (is_debug_statement_on) THEN
1066         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_service_integration_needed: '||l_service_integration_needed);
1067       END IF;
1068       -- Set the RETURN value
1069       RETURN l_service_integration_needed;
1070 
1071   EXCEPTION
1072 
1073       WHEN OTHERS THEN
1074         IF (is_debug_exception_on) THEN
1075             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1076 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
1077         END IF;
1078 
1079         OKL_API.set_message(
1080                    p_app_name      => OKC_API.G_APP_NAME,
1081                    p_msg_name      => G_UNEXPECTED_ERROR,
1082                    p_token1        => G_SQLCODE_TOKEN,
1083                    p_token1_value  => SQLCODE,
1084                    p_token2        => G_SQLERRM_TOKEN,
1085                    p_token2_value  => SQLERRM);
1086 
1087 	    RETURN NULL;
1088 
1089   END check_service_k_int_needed;
1090 
1091   -- Start of comments
1092   --
1093   -- Procedure Name	: service_k_integration
1094   -- Desciption     : Do the service contract integration steps (checks + notifications)
1095   -- Business Rules	: Called from OKL_AM_LEASE_LOAN_TRMNT_PVT, OKL_AM_ASSET_DISPOSE_PVT, OKL_AM_ASSET_RETURN_PVT
1096   -- Parameters	    :
1097   -- Version		: 1.0
1098   -- History        : RMUNJULU 3061751 27-AUG-2003 Created
1099   --                : RMUNJULU 3061751 14-OCT-2003 Added code to get delink_yn from table
1100   --                : RMUNJULU 3061751 16-OCT-2003 Changed code to get delink_yn from OKL_SYSTEM_PARAMS_ALL_V
1101   --                : RMUNJULU 23-DEC-03 SERVICE K UPDATES
1102   --                : RMUNJULU 05-JAN-04 SERVICE K UPDATES
1103   --
1104   -- End of comments
1105   PROCEDURE service_k_integration(
1106                p_term_rec                   IN term_rec_type DEFAULT G_TERM_REC_EMPTY,
1107                p_transaction_id             IN NUMBER DEFAULT NULL,
1108                p_transaction_date           IN DATE DEFAULT NULL,
1109                p_source                     IN VARCHAR2,
1110                p_service_integration_needed IN VARCHAR2)  IS
1111 
1112       -- Get the quote acceptance date
1113       CURSOR get_quote_acc_dt_csr (p_qte_id IN NUMBER) IS
1114       SELECT QTE.date_accepted
1115       FROM   OKL_TRX_QUOTES_B QTE
1116       WHERE  QTE.id = p_qte_id;
1117 
1118       -- Get the delink_yn value set for the org
1119       CURSOR get_setup_values_csr IS
1120       SELECT SYP.delink_yn
1121       FROM   OKL_SYSTEM_PARAMS SYP;
1122 
1123       l_delink_needed VARCHAR2(1) := 'N';
1124       l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1125       l_wf_source VARCHAR2(20);
1126       l_termination_date DATE;
1127       l_quote_id NUMBER := NULL;
1128       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'service_k_integration';
1129       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1130       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1131       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1132 
1133       l_api_version CONSTANT NUMBER := 1;
1134       l_msg_count NUMBER := OKL_API.G_MISS_NUM;
1135       l_msg_data VARCHAR2(2000);
1136 
1137       -- RMUNJULU 23-DEC-03 SERVICE K UPDATES
1138       l_oks_chr_id NUMBER;
1139 
1140       -- RMUNJULU 05-JAN-04 new cursor to get the contract status
1141       -- Get the sts_code for the contract
1142       CURSOR get_k_sts_csr (p_chr_id IN NUMBER) IS
1143       SELECT CHR.sts_code
1144       FROM   OKC_K_HEADERS_B CHR
1145       WHERE  CHR.id = p_chr_id;
1146 
1147       -- RMUNJULU 05-JAN-04 Added variable
1148       l_sts_code OKC_K_HEADERS_B.sts_code%TYPE;
1149 
1150   BEGIN
1151      IF (is_debug_procedure_on) THEN
1152        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
1153      END IF;
1154      IF (is_debug_statement_on) THEN
1155        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_transaction_id: '|| p_transaction_id);
1156        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_transaction_date: '|| p_transaction_date);
1157        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_source: '|| p_source);
1158        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_service_integration_needed: '|| p_service_integration_needed);
1159        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
1160        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
1161      END IF;
1162 
1163       -- If Service Integration Needed
1164       IF NVL(p_service_integration_needed,'N') = 'Y' THEN
1165 
1166           -- Request from Termination
1167           IF  p_source = 'TERMINATION' THEN
1168 
1169               -- p_term_rec is passed in this case
1170 
1171               -- RMUNJULU 05-JAN-04 get contract status
1172               FOR get_k_sts_rec IN get_k_sts_csr (p_term_rec.p_contract_id) LOOP
1173                  l_sts_code := get_k_sts_rec.sts_code;
1174               END LOOP;
1175 
1176               -- RMUNJULU 05-JAN-04 added condition that contract is terminated/expired
1177               -- only then do delink (if needed) and notifications
1178               IF l_sts_code IN ('TERMINATED','EXPIRED' ) THEN
1179 
1180                  -- RMUNJULU 3061751 14-OCT-2003 Added code to get delink_yn value
1181                  -- Check from setup if de-link needed
1182                  FOR get_setup_values_rec IN get_setup_values_csr LOOP
1183                     l_delink_needed := get_setup_values_rec.delink_yn;
1184                  END LOOP;
1185 
1186                  -- If de-link needed
1187                  IF NVL(l_delink_needed,'N') = 'Y' THEN
1188 
1189                      -- RMUNJULU 23-DEC-03 SERVICE K UPDATES
1190                      -- Get the OKS contract ID before delink since after delink we loose that info
1191                      IF (is_debug_statement_on) THEN
1192                        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
1193                      END IF;
1194                      OKL_SERVICE_INTEGRATION_PVT.check_service_link (
1195                                 p_api_version           => l_api_version,
1196                                 p_init_msg_list         => OKL_API.G_FALSE,
1197                                 x_return_status         => l_return_status,
1198                                 x_msg_count             => l_msg_count,
1199                                 x_msg_data              => l_msg_data,
1200                                 p_lease_contract_id     => p_term_rec.p_contract_id ,
1201                                 x_service_contract_id   => l_oks_chr_id);
1202                      IF (is_debug_statement_on) THEN
1203                        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || l_return_status);
1204                        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id: ' || l_oks_chr_id);
1205                      END IF;
1206 
1207                      IF (is_debug_statement_on) THEN
1208                        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.delink_service_contract');
1209                      END IF;
1210                      -- De-link Lease from Service
1211                      OKL_SERVICE_INTEGRATION_PVT.delink_service_contract(
1212                                     p_api_version     => l_api_version,
1213                                     p_init_msg_list   => OKL_API.G_FALSE,
1214                                     x_return_status   => l_return_status,
1215                                     x_msg_count       => l_msg_count,
1216                                     x_msg_data        => l_msg_data,
1217                                     p_okl_chr_id      => p_term_rec.p_contract_id);
1218                      IF (is_debug_statement_on) THEN
1219                        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.delink_service_contract , return status: ' || l_return_status);
1220                      END IF;
1221                      -- If De-link successful
1222                      IF  l_return_status = OKL_API.G_RET_STS_SUCCESS THEN -- SUCCESS
1223                          l_wf_source := 'SUCCESS';
1224                      ELSE -- De-link error -- ERROR
1225                          l_wf_source := 'ERROR';
1226                      END IF;
1227                  ELSE -- de-link not needed -- TERMINATION
1228                      l_wf_source := 'TERMINATION';
1229                  END IF;
1230 
1231                  -- Set the termination date
1232                  -- If Quote Exists then Termination date = Acceptance Date
1233                  -- Else Termination date = Sysdate (ideal - do this after termination - get trn date)
1234                  IF  p_term_rec.p_quote_id IS NOT NULL
1235                  AND p_term_rec.p_quote_id <> OKL_API.G_MISS_NUM THEN
1236 
1237                      -- Get the quote acceptance date
1238                      FOR get_quote_acc_dt_rec
1239                      IN  get_quote_acc_dt_csr(p_term_rec.p_quote_id) LOOP
1240 
1241                          l_termination_date := get_quote_acc_dt_rec.date_accepted;
1242 
1243                      END LOOP;
1244                  ELSE -- No quote get trn date
1245 
1246                      -- Get the TRN DATE, FOR NOW TRN DATE IS NOT AVAILABLE, SO SYSDATE
1247                      l_termination_date := SYSDATE;
1248                  END IF;
1249 
1250                  -- Set the Quote Id if termination request is from Quote
1251                  IF  p_term_rec.p_quote_id IS NOT NULL
1252                  AND p_term_rec.p_quote_id <> OKL_API.G_MISS_NUM THEN
1253 
1254                      l_quote_id := p_term_rec.p_quote_id;
1255 
1256                  END IF;
1257 
1258                  -- Raise event to launch the service k integration workflow
1259                  IF (is_debug_statement_on) THEN
1260                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1261                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_term_rec.p_contract_id : ' || p_term_rec.p_contract_id);
1262                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_wf_source : ' || l_wf_source);
1263                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_quote_id : ' || l_quote_id);
1264                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id : ' || l_oks_chr_id);
1265                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_termination_date : ' || l_termination_date);
1266                  END IF;
1267                  OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event(
1268                                    p_transaction_id   => p_term_rec.p_contract_id,
1269                                    p_source           => l_wf_source,
1270                                    p_quote_id         => l_quote_id,
1271                                    p_oks_contract     => l_oks_chr_id, -- RMUNJULU 23-DEC-03 SERVICE K UPDATES Pass OKS contract to WF
1272                                    p_transaction_date => l_termination_date);
1273                  IF (is_debug_statement_on) THEN
1274                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1275                  END IF;
1276 
1277               END IF;
1278           ELSIF p_source = 'RETURN' THEN -- Request from Asset Return
1279 
1280               -- p_transaction_id and p_transaction_date will be passed
1281               -- p_transaction_id is ASSET_ID in this case
1282               -- p_transaction_date is RETURN DATE in this case
1283 
1284               l_wf_source := 'RETURN';
1285 
1286                  IF (is_debug_statement_on) THEN
1287                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1288                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_id : ' || p_transaction_id);
1289                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_wf_source : ' || l_wf_source);
1290                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_date : ' || p_transaction_date);
1291                  END IF;
1292               -- Raise event to launch the service k integration workflow
1293               OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event(
1294                                    p_transaction_id   => p_transaction_id,
1295                                    p_source           => l_wf_source,
1296                                    p_transaction_date => p_transaction_date);
1297                  IF (is_debug_statement_on) THEN
1298                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1299                  END IF;
1300 
1301 
1302           ELSIF p_source = 'DISPOSE_1' THEN -- Request from Asset Dispose_1
1303 
1304               -- DISPOSE_1 when request from Term_with_purchase_Qte/Scrapped/Repurchase_Qte
1305               -- procedure of Asset_Dispose API. Asset is Sold/Scrapped/Sold in these cases.
1306 
1307               -- p_transaction_id and p_transaction_date will be passed
1308               -- p_transaction_id is ASSET_ID in this case
1309               -- p_transaction_date is DISPOSE DATE in this case
1310 
1311               l_wf_source := 'DISPOSE';
1312 
1313                  IF (is_debug_statement_on) THEN
1314                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1315                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_id : ' || p_transaction_id);
1316                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_wf_source : ' || l_wf_source);
1317                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_date : ' || p_transaction_date);
1318                  END IF;
1319               -- Raise event to launch the service k integration workflow
1320               OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event(
1321                                    p_transaction_id   => p_transaction_id,
1322                                    p_source           => l_wf_source,
1323                                    p_transaction_date => p_transaction_date);
1324                  IF (is_debug_statement_on) THEN
1325                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1326                  END IF;
1327 
1328           ELSIF p_source = 'DISPOSE_2' THEN -- Request from Asset Dispose_2
1329 
1330               -- DISPOSE_2 when request from Remarketing Dispose procedure of
1331               -- Asset_Dispose API. Asset is Sold in this case.
1332 
1333               -- p_transaction_id and p_transaction_date will be passed
1334               -- p_transaction_id is ASSET_ID in this case
1335               -- p_transaction_date is DISPOSE DATE in this case
1336 
1337               l_wf_source := 'DISPOSE';
1338                  IF (is_debug_statement_on) THEN
1339                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1340                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_id : ' || p_transaction_id);
1341                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_wf_source : ' || l_wf_source);
1342                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_date : ' || p_transaction_date);
1343                  END IF;
1344               -- Raise event to launch the service k integration workflow
1345               OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event(
1346                                    p_transaction_id   => p_transaction_id,
1347                                    p_source           => l_wf_source,
1348                                    p_transaction_date => p_transaction_date);
1349                  IF (is_debug_statement_on) THEN
1350                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1351                  END IF;
1352           END IF;
1353       END IF;
1354      IF (is_debug_procedure_on) THEN
1355        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
1356      END IF;
1357 
1358   EXCEPTION
1359 
1360       WHEN OTHERS THEN
1361         IF (is_debug_exception_on) THEN
1362             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1363 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
1364         END IF;
1365 
1366         OKL_API.set_message(
1367                    p_app_name      => OKC_API.G_APP_NAME,
1368                    p_msg_name      => G_UNEXPECTED_ERROR,
1369                    p_token1        => G_SQLCODE_TOKEN,
1370                    p_token1_value  => SQLCODE,
1371                    p_token2        => G_SQLERRM_TOKEN,
1372                    p_token2_value  => SQLERRM);
1373 
1374   END service_k_integration;
1375 
1376   -- Start of comments
1377   --
1378   -- Function Name	: check_billing_done.
1379   -- Description    : Returns 'Y' if BILLING DONE, Else 'N' or NULL
1380   -- Business Rules	: Called from OKL_AM_TERMNT_QUOTE_PVT and OKL_AM_LEASE_TRMNT_PVT
1381   -- Parameters	    :
1382   -- Version		: 1.0
1383   -- History        : RMUNJULU 3061751 23-SEP-2003 Created
1384   --                  RMUNJULU 05-JAN-04 SERVICE K UPDATES
1385   --                  rmunjulu 6795295 modified the signature to pass
1386   --  p_rev_rec_method, p_int_cal_basis, p_oks_chr_id, p_sts_code
1387   --
1388   -- End of comments
1389   FUNCTION check_billing_done(
1390                p_contract_id         IN NUMBER DEFAULT NULL,
1391                p_contract_number     IN VARCHAR2 DEFAULT NULL,
1392                p_quote_number        IN NUMBER DEFAULT NULL,
1393                p_trn_date            IN DATE DEFAULT NULL,
1394                p_rev_rec_method      IN VARCHAR2 DEFAULT NULL, -- rmunjulu 6795295
1395                p_int_cal_basis       IN VARCHAR2 DEFAULT NULL, -- rmunjulu 6795295
1396                p_oks_chr_id          IN NUMBER DEFAULT NULL, -- rmunjulu 6795295
1397                p_sts_code            IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS -- rmunjulu 6795295
1398 
1399       l_service_contract VARCHAR2(300);
1400       l_oks_chr_id NUMBER;
1401       l_api_version NUMBER := 1;
1402       l_msg_count NUMBER := OKL_API.G_MISS_NUM;
1403       l_msg_data VARCHAR2(2000);
1404       l_bill_stat_tbl OKL_BILL_STATUS_PUB.bill_stat_tbl_type; -- RMUNJULU 05-JAN-04 BPD Changed the API name
1405       l_bill_counter NUMBER;
1406       l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1407       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_billing_done';
1408       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1409       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1410       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1411 
1412   BEGIN
1413      IF (is_debug_procedure_on) THEN
1414        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
1415      END IF;
1416      IF (is_debug_statement_on) THEN
1417        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
1418        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_number: '|| p_contract_number);
1419        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_number: '|| p_quote_number);
1420        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: '|| p_trn_date);
1421      END IF;
1422 
1423       -- Process Codes and Types decided on
1424       -- =================================================
1425       -- Process Type               Process Code
1426       -- =================================================
1427       --1. RENTAL                   RENTAL
1428       --2. SERVICE                  SERVICE
1429       --3. VARIABLE INTEREST        VARIABLE_INTEREST
1430       --4. UBB                      UBB
1431       --5. LATE CHARGES             LATE_CHARGES
1432       --6. LATE INTEREST            LATE_INTEREST
1433       --7. EVERGREEN                EVERGREEN
1434       --=================================================
1435       -- Limitations --
1436       -- For now coded for RENTAL and SERVICE billing. Will need to expand once
1437       -- other billing checks introduced
1438 
1439       -- BPD Now provides a API which tells till when the billing was done, use that
1440       -- RMUNJULU 05-JAN-04 BPD Changed the API name
1441       IF (is_debug_statement_on) THEN
1442         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_BILL_STATUS_PUB.billing_status');
1443       END IF;
1444       OKL_BILL_STATUS_PUB.billing_status(
1445                                 p_api_version           => l_api_version,
1446                                 p_init_msg_list         => OKL_API.G_FALSE,
1447                                 x_return_status         => l_return_status,
1448                                 x_msg_count             => l_msg_count,
1449                                 x_msg_data              => l_msg_data,
1450                                 x_bill_stat_tbl         => l_bill_stat_tbl,
1451                                 p_khr_id                => p_contract_id,
1452                                 p_transaction_date      => p_trn_date);
1453       IF (is_debug_statement_on) THEN
1454         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_BILL_STATUS_PUB.billing_status , return status: ' || l_return_status);
1455       END IF;
1456 
1457       IF l_bill_stat_tbl.COUNT > 0 THEN -- [1]
1458 
1459           -- loop thru the bill_statuses table
1460           FOR l_bill_counter IN l_bill_stat_tbl.FIRST..l_bill_stat_tbl.LAST LOOP
1461 
1462               -- For regular stream billing ie RENT billing
1463               IF l_bill_stat_tbl(l_bill_counter).transaction_type = 'RENTAL' THEN --[2]
1464 
1465                   -- Raise error if the last_bill_date is NULL
1466                   -- or if the last scheduled billing date > last billing run date
1467                   IF l_bill_stat_tbl(l_bill_counter).last_bill_date IS NULL
1468                   OR (TRUNC(l_bill_stat_tbl(l_bill_counter).last_schedule_bill_date) >
1469                       TRUNC(l_bill_stat_tbl(l_bill_counter).last_bill_date)) THEN --[3]
1470 
1471                       -- If quote_number passed then give quote message
1472                       IF p_quote_number IS NOT NULL THEN --[4]
1473 
1474                           IF  p_rev_rec_method = 'STREAMS'
1475                           AND p_int_cal_basis = 'FIXED'
1476                           AND p_oks_chr_id IS NULL
1477                           AND p_sts_code = 'BOOKED' THEN -- rmunjulu 6795295
1478 
1479                               -- message will be set in calling procedure
1480                               RETURN 'N';
1481 
1482                           ELSE   -- throw message and return N
1483 
1484                              -- Quote QUOTE_NUMBER can not be accepted. Please process Regular Stream billing
1485                              -- for contract CONTRACT_NUMBER up to the quote effective from date.
1486                              OKL_API.set_message (
1487                  			           p_app_name  	  => 'OKL',
1488                      		    	   p_msg_name  	  => 'OKL_AM_ACCEPT_TQ_RUN_BILLING',
1489                                p_token1       => 'QUOTE_NUMBER',
1490                                p_token1_value => p_quote_number,
1491                                p_token2       => 'CONTRACT_NUMBER',
1492                                p_token2_value => p_contract_number);
1493 
1494                              RETURN 'N';
1495                           END IF;
1496                       ELSE -- Give contract message
1497 
1498                           -- Contract CONTRACT_NUMBER can not be terminated. Please process Regular Stream Billing
1499                           -- for contract up to the termination date TERMINATION_DATE.
1500                           OKL_API.set_message (
1501          			           p_app_name  	  => 'OKL',
1502               		    	   p_msg_name  	  => 'OKL_AM_RUN_BILLING',
1503                                p_token1       => 'CONTRACT_NUMBER',
1504                                p_token1_value => p_contract_number,
1505                                p_token2       => 'TERMINATION_DATE',
1506                                p_token2_value => p_trn_date);
1507 
1508                           RETURN 'N';
1509 
1510                       END IF; --[-4]
1511                    END IF; --[-3]
1512               END IF; --[-2]
1513           END LOOP;
1514       END IF; --[-1]
1515 
1516       IF (is_debug_statement_on) THEN
1517         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
1518       END IF;
1519       -- Check if linked service contract exists for the quoted contract
1520       OKL_SERVICE_INTEGRATION_PVT.check_service_link (
1521                                 p_api_version           => l_api_version,
1522                                 p_init_msg_list         => OKL_API.G_FALSE,
1523                                 x_return_status         => l_return_status,
1524                                 x_msg_count             => l_msg_count,
1525                                 x_msg_data              => l_msg_data,
1526                                 p_lease_contract_id     => p_contract_id,
1527                                 x_service_contract_id   => l_oks_chr_id);
1528       IF (is_debug_statement_on) THEN
1529         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || l_return_status);
1530         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id : ' || l_oks_chr_id);
1531       END IF;
1532 
1533       -- If linked Lease
1534       IF  l_return_status = OKL_API.G_RET_STS_SUCCESS
1535       AND l_oks_chr_id IS NOT NULL THEN --[1]
1536 
1537           -- Check if OKS Billing Done
1538           IF l_bill_stat_tbl.COUNT > 0 THEN --[2]
1539 
1540               -- loop thru the bill_statuses table
1541               FOR l_bill_counter IN l_bill_stat_tbl.FIRST..l_bill_stat_tbl.LAST LOOP
1542 
1543                   -- For Service billing
1544                   IF l_bill_stat_tbl(l_bill_counter).transaction_type = 'SERVICE' THEN --[3]
1545 
1546                       -- Raise error if the last_bill_date is NULL
1547                       -- or if the last scheduled billing date > last billing run date
1548                       IF l_bill_stat_tbl(l_bill_counter).last_bill_date IS NULL
1549                       OR (TRUNC(l_bill_stat_tbl(l_bill_counter).last_schedule_bill_date) >
1550                           TRUNC(l_bill_stat_tbl(l_bill_counter).last_bill_date)) THEN --[4]
1551 
1552                           -- If quote_number passed then give quote message
1553                           IF p_quote_number IS NOT NULL THEN --[5]
1554 
1555                               -- Quote QUOTE_NUMBER can not be accepted. Please process service billing
1556                               -- for contract CONTRACT_NUMBER up to the quote effective from date.
1557                               OKL_API.set_message (
1558              			           p_app_name  	  => 'OKL',
1559                  		    	   p_msg_name  	  => 'OKL_AM_ACCEPT_TQ_RUN_SRV_BILL',
1560                                    p_token1       => 'QUOTE_NUMBER',
1561                                    p_token1_value => p_quote_number,
1562                                    p_token2       => 'CONTRACT_NUMBER',
1563                                    p_token2_value => p_contract_number);
1564 
1565                               RETURN 'N';
1566 
1567                           ELSE -- Give contract message
1568 
1569                               -- Contract CONTRACT_NUMBER can not be terminated. Please process
1570                               -- service billing for contract up to the termination date TERMINATION_DATE.
1571                               OKL_API.set_message (
1572          			               p_app_name  	  => 'OKL',
1573               		    	       p_msg_name  	  => 'OKL_AM_RUN_SRV_BILLING',
1574                                    p_token1       => 'CONTRACT_NUMBER',
1575                                    p_token1_value => p_contract_number,
1576                                    p_token2       => 'TERMINATION_DATE',
1577                                    p_token2_value => p_trn_date);
1578 
1579                               RETURN 'N';
1580 
1581                           END IF; --[-5]
1582                       END IF; --[-4]
1583                   END IF; --[-3]
1584               END LOOP;
1585           END IF; --[-2]
1586        END IF; --[-1]
1587       IF (is_debug_procedure_on) THEN
1588         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
1589       END IF;
1590       IF (is_debug_statement_on) THEN
1591         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning Y');
1592       END IF;
1593 
1594       RETURN 'Y';
1595 
1596   EXCEPTION
1597 
1598       WHEN OTHERS THEN
1599         IF (is_debug_exception_on) THEN
1600             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1601 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
1602         END IF;
1603 
1604         OKL_API.set_message(
1605                    p_app_name      => OKC_API.G_APP_NAME,
1606                    p_msg_name      => G_UNEXPECTED_ERROR,
1607                    p_token1        => G_SQLCODE_TOKEN,
1608                    p_token1_value  => SQLCODE,
1609                    p_token2        => G_SQLERRM_TOKEN,
1610                    p_token2_value  => SQLERRM);
1611 
1612         RETURN NULL;
1613 
1614   END check_billing_done;
1615 
1616 
1617   -- Start of comments
1618   --
1619   -- Function Name	: check_stream_billing_done.
1620   -- Description    : Returns 'Y' if STREAM BASED BILLING DONE, Else 'N' or NULL
1621   -- Business Rules	: Called from OKL_AM_TERMNT_QUOTE_PVT
1622   -- Parameters	    :
1623   -- Version		: 1.0
1624   -- History        : RMUNJULU bug 6736148  09-JAN-2008 Created
1625   --
1626   -- End of comments
1627   FUNCTION check_stream_billing_done(
1628                p_contract_id         IN NUMBER DEFAULT NULL,
1629                p_contract_number     IN VARCHAR2 DEFAULT NULL,
1630                p_quote_number        IN NUMBER DEFAULT NULL,
1631                p_trn_date            IN DATE DEFAULT NULL) RETURN VARCHAR2 IS
1632 
1633       l_service_contract VARCHAR2(300);
1634       l_oks_chr_id NUMBER;
1635       l_api_version NUMBER := 1;
1636       l_msg_count NUMBER := OKL_API.G_MISS_NUM;
1637       l_msg_data VARCHAR2(2000);
1638       l_bill_stat_tbl OKL_BILL_STATUS_PUB.bill_stat_tbl_type;
1639       l_bill_counter NUMBER;
1640       l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1641       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_stream_billing_done';
1642       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1643       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1644       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1645 
1646   BEGIN
1647      IF (is_debug_procedure_on) THEN
1648        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
1649      END IF;
1650      IF (is_debug_statement_on) THEN
1651        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
1652        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_number: '|| p_contract_number);
1653        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_number: '|| p_quote_number);
1654        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: '|| p_trn_date);
1655      END IF;
1656 
1657       IF (is_debug_statement_on) THEN
1658         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_BILL_STATUS_PUB.billing_status');
1659       END IF;
1660       OKL_BILL_STATUS_PUB.billing_status(
1661                                 p_api_version           => l_api_version,
1662                                 p_init_msg_list         => OKL_API.G_FALSE,
1663                                 x_return_status         => l_return_status,
1664                                 x_msg_count             => l_msg_count,
1665                                 x_msg_data              => l_msg_data,
1666                                 x_bill_stat_tbl         => l_bill_stat_tbl,
1667                                 p_khr_id                => p_contract_id,
1668                                 p_transaction_date      => p_trn_date);
1669       IF (is_debug_statement_on) THEN
1670         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_BILL_STATUS_PUB.billing_status , return status: ' || l_return_status);
1671       END IF;
1672 
1673       IF l_bill_stat_tbl.COUNT > 0 THEN -- [1]
1674 
1675           -- loop thru the bill_statuses table
1676           FOR l_bill_counter IN l_bill_stat_tbl.FIRST..l_bill_stat_tbl.LAST LOOP
1677 
1678               -- For regular stream billing ie RENT billing
1679               IF l_bill_stat_tbl(l_bill_counter).transaction_type = 'RENTAL' THEN --[2]
1680 
1681                   -- Raise error if the last_bill_date is NULL
1682                   -- or if the last scheduled billing date > last billing run date
1683                   IF l_bill_stat_tbl(l_bill_counter).last_bill_date IS NULL
1684                   OR (TRUNC(l_bill_stat_tbl(l_bill_counter).last_schedule_bill_date) >
1685                       TRUNC(l_bill_stat_tbl(l_bill_counter).last_bill_date)) THEN --[3]
1686 
1687                       -- If quote_number passed then give quote message
1688                       IF p_quote_number IS NOT NULL THEN --[4]
1689 
1690                           RETURN 'N';
1691 
1692                       ELSE -- Give contract message
1693 
1694                           RETURN 'N';
1695 
1696                       END IF; --[-4]
1697                    END IF; --[-3]
1698               END IF; --[-2]
1699           END LOOP;
1700       END IF; --[-1]
1701 
1702       IF (is_debug_procedure_on) THEN
1703         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
1704       END IF;
1705       IF (is_debug_statement_on) THEN
1706         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning Y');
1707       END IF;
1708 
1709       RETURN 'Y';
1710 
1711   EXCEPTION
1712 
1713       WHEN OTHERS THEN
1714         IF (is_debug_exception_on) THEN
1715             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1716 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
1717         END IF;
1718 
1719         OKL_API.set_message(
1720                    p_app_name      => OKC_API.G_APP_NAME,
1721                    p_msg_name      => G_UNEXPECTED_ERROR,
1722                    p_token1        => G_SQLCODE_TOKEN,
1723                    p_token1_value  => SQLCODE,
1724                    p_token2        => G_SQLERRM_TOKEN,
1725                    p_token2_value  => SQLERRM);
1726 
1727         RETURN NULL;
1728 
1729   END check_stream_billing_done;
1730 
1731   -- +++++++++++++++++++++ service contract integration end   ++++++++++++++++++
1732 
1733 -- Start of comments
1734 --
1735 -- Procedure Name	: validate_contract
1736 -- Description		: checks the validity of the contract
1737 --                  Throws the proper error message if the contract found to be
1738 --                  in the wrong status. p_control_flag decides which logic need
1739 --                  to be applied for checking contract status
1740 --                  The various controls this cater to are
1741 --                  ------------------------------------------------------------
1742 --                     P_Control_Flag value       When Checking from
1743 --                  ------------------------------------------------------------
1744 --                  1. CONTRACT_TERMINATE_SCRN -- Request termination screen
1745 --                  2. TRMNT_QUOTE_CREATE      -- Termination quote create
1746 --                  3. RESTR_QUOTE_CREATE      -- Resturcture quote create
1747 --                  4. REPUR_QUOTE_CREATE      -- Repurchase quote create
1748 --                  5. TRMNT_QUOTE_UPDATE      -- Termination quote update
1749 --                  6. RESTR_QUOTE_UPDATE      -- Resturcture quote update
1750 --                  7. REPUR_QUOTE_UPDATE      -- Repurchase quote update
1751 --                  8. BATCH_PROCESS           -- Batch process
1752 --                  9. ASSET_RETURN_CREATE     -- Asset return create
1753 --                  10.ASSET_RETURN_UPDATE     -- Asset return update
1754 --                  11.BATCH_PROCESS_CHR       -- Single request from batch
1755 -- Business Rules	:
1756 -- Parameters		  : api version, init msg list, return status, msg count,
1757 --                  msg data, contract id, control flag, status code
1758 -- Version		    : 1.0
1759 -- History        : RMUNJULU -- 11-DEC-02: Bug # 2484327 : Added code in
1760 --                  TRMNT_QUOTE_CREATE condition to check for termination trns
1761 --                : RMUNJULU 18-DEC-02 2484327. Added code in CONTRACT_TERMINATE_SCRN
1762 --                  condition to check for term trn and if no accepted qte
1763 --                : RMUNJULU 2724951 02-JAN-02 Changed the if for checks in
1764 --                  condition CONTRACT_TERMINATE_SCRN
1765 --                : RMUNJULU 25-FEB-03 2818866 Changed code for condition
1766 --                  BATCH_PROCESS removed contract status check
1767 --                : RMUNJULU 06-MAR-03 Performance Fix Replaced K_HDR_FULL
1768 -- End of comments
1769 
1770   PROCEDURE validate_contract(
1771            p_api_version                 IN  NUMBER,
1772            p_init_msg_list               IN  VARCHAR2,
1773            x_return_status               OUT NOCOPY VARCHAR2,
1774            x_msg_count                   OUT NOCOPY NUMBER,
1775            x_msg_data                    OUT NOCOPY VARCHAR2,
1776            p_contract_id                 IN  NUMBER,
1777            p_control_flag                IN  VARCHAR2,
1778            x_contract_status             OUT NOCOPY VARCHAR2)  IS
1779 
1780    -- Cursor to get the contract details
1781    -- RMUNJULU 06-MAR-03 Performance Fix Replaced K_HDR_FULL
1782    CURSOR  k_header_csr IS
1783     SELECT chr.id,
1784            chr.contract_number,
1785            chr.template_yn,
1786            chr.end_date,
1787            khr.deal_type,
1788            chr.scs_code,
1789            chr.sts_code,
1790            sts.meaning
1791     FROM   OKC_K_HEADERS_V  chr,
1792            OKC_STATUSES_V   sts,
1793            OKL_K_HEADERS_V  khr
1794     WHERE  chr.id       = p_contract_id
1795     AND    chr.sts_code   = sts.code
1796     AND    chr.id = khr.id;
1797 
1798     -- This cursor is used by the Create Asset Return process to make
1799     -- sure that the contract has a logical post
1800     -- booking status.
1801    CURSOR  k_contractstatus_csr IS
1802    SELECT  khr.contract_number, sts.ste_code, sts.meaning
1803    FROM    okc_k_headers_b khr, okc_statuses_v sts
1804    WHERE   khr.sts_code = sts.code
1805    AND     khr.id = p_contract_id;
1806 
1807    -- Cursor to check if contract locked
1808    CURSOR  k_locks_csr IS
1809     SELECT 'x'
1810     FROM   OKC_K_PROCESSES v
1811     WHERE  v.chr_id        = p_contract_id
1812     AND    v.in_process_yn = 'Y';
1813 
1814    -- Cursor to get the service requests of contract
1815    CURSOR  k_service_request_csr IS
1816     SELECT 'x'
1817     FROM   OKX_INCIDENT_STATUSES_V xis,
1818            OKC_K_LINES_B           cle
1819     WHERE  cle.id          = xis.contract_service_id
1820      AND   cle.dnz_chr_id  = p_contract_id
1821      AND   xis.status_code IN ('OPEN');
1822 
1823 
1824    -- Cursor to get accepted quotes for contract
1825    CURSOR    k_accepted_quote_csr IS
1826      SELECT  'x'
1827      FROM    OKL_TRX_QUOTES_V
1828      WHERE   khr_id      =  p_contract_id
1829      AND     qst_code    =  'ACCEPTED'
1830      AND     (qtp_code LIKE 'TER%' OR qtp_code LIKE 'RES%');
1831 
1832 
1833 
1834     k_header_rec             k_header_csr%ROWTYPE;
1835     l_return_status          VARCHAR2(1)  := OKL_API.G_RET_STS_SUCCESS;
1836     l_chg_request_in_process VARCHAR2(1)  := '?';
1837     l_service_request        VARCHAR2(1)  := '?';
1838     l_quotes_exist           VARCHAR2(1)  := '?';
1839     l_tsu_code               VARCHAR2(30) := '?';
1840     l_sys_date               DATE;
1841     l_invalid_contract       EXCEPTION;
1842     l_ste_code               VARCHAR2(30);
1843     l_contract_number        VARCHAR2(120);
1844     l_meaning                VARCHAR2(90);
1845     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'validate_contract';
1846     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1847     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1848     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1849 
1850 
1851     -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Added variables for checking
1852     -- related to asset level termination
1853     lx_trn_tbl  OKL_AM_UTIL_PVT.trn_tbl_type;
1854     i  NUMBER;
1855 
1856     -- RMUNJULU 18-DEC-02 2484327 -- Added variable for checking
1857     -- related to asset level termination
1858     lx_quote_tbl OKL_AM_UTIL_PVT.quote_tbl_type;
1859 
1860 
1861 
1862   BEGIN
1863     IF (is_debug_procedure_on) THEN
1864       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
1865     END IF;
1866     IF (is_debug_statement_on) THEN
1867       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
1868       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_control_flag: '|| p_control_flag);
1869     END IF;
1870 
1871     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1872 
1873     SELECT SYSDATE INTO l_sys_date FROM DUAL;
1874 
1875     OPEN  k_header_csr;
1876     FETCH k_header_csr INTO k_header_rec;
1877     CLOSE k_header_csr;
1878 
1879     OPEN  k_contractstatus_csr;
1880     FETCH k_contractstatus_csr INTO l_contract_number,l_ste_code, l_meaning;
1881     CLOSE k_contractstatus_csr;
1882 
1883     -- Check contract id passed is valid
1884     IF k_header_rec.id IS NULL OR k_header_rec.contract_number IS NULL THEN
1885 
1886       OKL_API.set_message( p_app_name     => OKC_API.G_APP_NAME,
1887                            p_msg_name     => OKC_API.G_INVALID_VALUE,
1888                            p_token1       => OKC_API.G_COL_NAME_TOKEN,
1889                            p_token1_value => 'contract id');
1890 
1891       RAISE l_invalid_contract;
1892     END IF;
1893 
1894     -- Check Lease or Loan
1895     IF NOT  (   (k_header_rec.scs_code = 'LOAN')          -- Loan
1896              OR (k_header_rec.scs_code = 'LEASE'
1897                  AND k_header_rec.deal_type LIKE 'LOAN%') -- Loan
1898              OR (k_header_rec.scs_code = 'LEASE'
1899                  AND k_header_rec.deal_type LIKE 'LEASE%')-- Lease
1900             ) THEN
1901       -- Contract CONTRACT_NUMBER is neither a Lease nor a Loan.
1902       OKL_API.set_message( p_app_name      => G_APP_NAME,
1903                           p_msg_name      => 'OKL_AM_K_TYPE_ERROR',
1904                           p_token1        => 'CONTRACT_NUMBER',
1905                           p_token1_value  => k_header_rec.contract_number);
1906       RAISE l_invalid_contract;
1907     END IF;
1908 
1909 
1910 /* -- rmunjulu PERF
1911     OPEN  k_locks_csr;
1912     FETCH k_locks_csr INTO l_chg_request_in_process;
1913     CLOSE k_locks_csr;
1914 
1915     OPEN  k_service_request_csr;
1916     FETCH k_service_request_csr INTO l_service_request;
1917     CLOSE k_service_request_csr;
1918 
1919     OPEN  k_accepted_quote_csr;
1920     FETCH k_accepted_quote_csr INTO l_quotes_exist;
1921     CLOSE k_accepted_quote_csr;
1922 */
1923 
1924 
1925     --******************************
1926     -- CONTRACT_TERMINATE_SCRN
1927     --******************************
1928 
1929     -- If from contract termination screen
1930     IF (p_control_flag = 'CONTRACT_TERMINATE_SCRN') THEN
1931 
1932 -- rmunjulu PERF -- start
1933     OPEN  k_locks_csr;
1934     FETCH k_locks_csr INTO l_chg_request_in_process;
1935     CLOSE k_locks_csr;
1936 
1937     OPEN  k_service_request_csr;
1938     FETCH k_service_request_csr INTO l_service_request;
1939     CLOSE k_service_request_csr;
1940 -- rmunjulu PERF -- End
1941 
1942       -- Check if template
1943       IF k_header_rec.template_yn = OKL_API.G_TRUE THEN
1944         -- Message: This operation is not allowed on contract template-(NUMBER).
1945         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
1946                             p_msg_name      => 'OKC_K_TEMPLATE',
1947                             p_token1        => 'NUMBER',
1948                             p_token1_value  => k_header_rec.contract_number);
1949         RAISE l_invalid_contract;
1950       END IF;
1951 
1952       -- Check if locked
1953       IF l_chg_request_in_process = 'x' THEN
1954         -- Message: You cannot modify this contract now because a
1955         -- change request is active. Please try later.
1956         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
1957                             p_msg_name      => 'OKC_K_LOCKED');
1958         RAISE l_invalid_contract;
1959       END IF;
1960 
1961       -- Check if service requests found
1962       IF l_service_request = 'x' THEN
1963         -- Message: You cannot terminate this contract/line because a service
1964         --request is pending against this contract/line. Please try again later.
1965         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
1966                             p_msg_name      => 'OKC_SR_PENDING');
1967         RAISE l_invalid_contract;
1968       END IF;
1969 
1970 
1971 
1972       --  Check user status
1973       IF (k_header_rec.sts_code NOT IN ('BOOKED', 'EVERGREEN')) THEN
1974         -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
1975         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
1976                             p_msg_name      => 'OKL_AM_CONTRACT_INACTIVE',
1977                             p_token1        => 'CONTRACT_NUMBER',
1978                             p_token1_value  => k_header_rec.contract_number,
1979                             p_token2        => 'STATUS',
1980                             p_token2_value  => k_header_rec.meaning);
1981         RAISE l_invalid_contract;
1982       END IF;
1983 
1984       -- RMUNJULU 18-DEC-02 2484327 -- START --
1985 
1986       -- *****************
1987       -- IF unprocessed termination trn exists for the contract then error
1988       -- *****************
1989 
1990 
1991       IF (is_debug_statement_on) THEN
1992         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_transactions');
1993       END IF;
1994       -- Get all the unprocessed transactions for the contract
1995       OKL_AM_UTIL_PVT.get_contract_transactions (
1996            p_khr_id        => k_header_rec.id,
1997            x_trn_tbl       => lx_trn_tbl,
1998            x_return_status => l_return_status);
1999       IF (is_debug_statement_on) THEN
2000         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_contract_transactions , return status: ' || l_return_status);
2001       END IF;
2002 
2003 
2004       -- Check the return status
2005       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2006 
2007          -- Error occured in util proc, message set by util proc raise exp
2008          RAISE l_invalid_contract;
2009 
2010       END IF;
2011 
2012 
2013       -- Check if termination transaction exists for the contract
2014       IF lx_trn_tbl.COUNT > 0 THEN
2015 
2016          -- A termination transaction for the contract CONTRACT_NUMBER
2017          -- is already in progress.
2018          OKL_API.set_message (
2019          			       p_app_name  	  => 'OKL',
2020               			 p_msg_name  	  => 'OKL_AM_K_PENDING_TRN_ERROR',
2021                      p_token1       => 'CONTRACT_NUMBER',
2022                      p_token1_value => k_header_rec.contract_number);
2023 
2024          RAISE l_invalid_contract;
2025 
2026       END IF;
2027 
2028 
2029       -- *****************
2030       -- IF NO accepted quote with no trn exists for contract then error
2031       -- *****************
2032 
2033       IF (is_debug_statement_on) THEN
2034         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_non_trn_contract_quotes');
2035       END IF;
2036       -- Get accepted quote for contract with no trn
2037       OKL_AM_UTIL_PVT.get_non_trn_contract_quotes (
2038            p_khr_id        => k_header_rec.id,
2039            x_quote_tbl     => lx_quote_tbl,
2040            x_return_status => l_return_status);
2041       IF (is_debug_statement_on) THEN
2042         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_non_trn_contract_quotes , return status: ' || l_return_status);
2043       END IF;
2044 
2045       -- Check the return status
2046       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2047 
2048           -- Error occured in util proc, message set by util proc raise exp
2049           RAISE l_invalid_contract;
2050 
2051       END IF;
2052 
2053       -- Check if accepted quote exists for the contract or contract reached end
2054       -- RMUNJULU 02-JAN-03 2724951 Changed OR to AND in the IF
2055       IF lx_quote_tbl.COUNT = 0
2056       AND k_header_rec.end_date > l_sys_date THEN
2057 
2058           -- Cannot terminate contract CONTRACT_NUMBER since no
2059           -- accepted quotes exists nor contract has reached its end date.
2060           OKL_API.set_message (
2061          			 p_app_name  	  => G_APP_NAME,
2062          			 p_msg_name  	  => 'OKL_AM_QTE_EXIST_NOT_REACH_END',
2063                p_token1       => 'CONTRACT_NUMBER',
2064                p_token1_value => k_header_rec.contract_number);
2065 
2066 
2067           RAISE l_invalid_contract;
2068 
2069       END IF;
2070 
2071       -- RMUNJULU 18-DEC-02 2484327 -- END --
2072 
2073     --******************************
2074     -- TRMNT_QUOTE_CREATE
2075     --******************************
2076 
2077     -- If from create termination quote
2078     ELSIF (p_control_flag = 'TRMNT_QUOTE_CREATE') THEN
2079 
2080       --  Check user status
2081       IF k_header_rec.sts_code NOT IN ('BOOKED', 'EVERGREEN', 'BANKRUPTCY_HOLD',
2082                                      'LITIGATION_HOLD', 'TERMINATION_HOLD') THEN
2083         -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2084         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2085                             p_msg_name      => 'OKL_AM_CONTRACT_INACTIVE',
2086                             p_token1        => 'CONTRACT_NUMBER',
2087                             p_token1_value  => k_header_rec.contract_number,
2088                             p_token2        => 'STATUS',
2089                             p_token2_value  => k_header_rec.meaning);
2090         RAISE l_invalid_contract;
2091       END IF;
2092 
2093 
2094       -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Added code to check based on
2095       -- asset level termination changes
2096 
2097       -- *****************
2098       -- IF unprocessed FULL termination trn exists for the contract then error
2099       -- *****************
2100 
2101       IF (is_debug_statement_on) THEN
2102         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_transactions');
2103       END IF;
2104       -- Get all the unprocessed transactions for the contract
2105       OKL_AM_UTIL_PVT.get_contract_transactions (
2106            p_khr_id        => k_header_rec.id,
2107            x_trn_tbl       => lx_trn_tbl,
2108            x_return_status => l_return_status);
2109       IF (is_debug_statement_on) THEN
2110         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_contract_transactions , return status: ' || l_return_status);
2111       END IF;
2112 
2113       -- Check the return status
2114       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2115 
2116          -- Error occured in util proc, message set by util proc raise exp
2117          RAISE l_invalid_contract;
2118 
2119       END IF;
2120 
2121       -- Check if termination transaction exists for the contract
2122       IF lx_trn_tbl.COUNT > 0 THEN
2123 
2124           -- Check if unprocessed FULL termination trn exists
2125           i := lx_trn_tbl.FIRST;
2126 
2127           LOOP
2128 
2129              --IF lx_trn_tbl(i).tcn_type = 'TMT' THEN -- FULL termination
2130                IF lx_trn_tbl(i).tcn_type in ('TMT', 'EVG') THEN -- akrangan bug 5354501 fix added 'EVG'
2131                 -- A termination transaction for the contract CONTRACT_NUMBER
2132                 -- is already in progress.
2133                 OKL_API.set_message (
2134          			       p_app_name  	  => 'OKL',
2135               			 p_msg_name  	  => 'OKL_AM_K_PENDING_TRN_ERROR',
2136                      p_token1       => 'CONTRACT_NUMBER',
2137                      p_token1_value => k_header_rec.contract_number);
2138 
2139                 RAISE l_invalid_contract;
2140 
2141              END IF;
2142 
2143              EXIT WHEN (i = lx_trn_tbl.LAST);
2144              i := lx_trn_tbl.NEXT(i);
2145 
2146           END LOOP;
2147 
2148       END IF;
2149 
2150 
2151     --******************************
2152     -- RESTR_QUOTE_CREATE
2153     --******************************
2154 
2155     -- If from create restructure quote
2156     ELSIF (p_control_flag = 'RESTR_QUOTE_CREATE') THEN
2157 
2158       --  Check user status
2159       IF k_header_rec.sts_code NOT IN ( 'BOOKED', 'BANKRUPTCY_HOLD',
2160                                         'LITIGATION_HOLD') THEN
2161         -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2162         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2163                             p_msg_name      => 'OKL_AM_CONTRACT_INACTIVE',
2164                             p_token1        => 'CONTRACT_NUMBER',
2165                             p_token1_value  => k_header_rec.contract_number,
2166                             p_token2        => 'STATUS',
2167                             p_token2_value  => k_header_rec.meaning);
2168         RAISE l_invalid_contract;
2169       END IF;
2170 
2171     --******************************
2172     -- REPUR_QUOTE_CREATE
2173     --******************************
2174 
2175     -- If from create repurchase quote
2176     ELSIF (p_control_flag = 'REPUR_QUOTE_CREATE') THEN
2177 
2178       --  Check user status
2179       IF k_header_rec.sts_code NOT IN ( 'TERMINATED','EXPIRED') THEN
2180         -- Message: Contract CONTRACT_NUMBER is still STATUS.
2181         -- Unable to generate the quote until the contract
2182         -- has been terminated or expired.
2183         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2184                             p_msg_name      => 'OKL_AM_CONTRACT_STILL_ACTIVE',
2185                             p_token1        => 'CONTRACT_NUMBER',
2186                             p_token1_value  => k_header_rec.contract_number,
2187                             p_token2        => 'STATUS',
2188                             p_token2_value  => k_header_rec.meaning);
2189         RAISE l_invalid_contract;
2190       END IF;
2191 
2192     --******************************
2193     -- TRMNT_QUOTE_UPDATE
2194     --******************************
2195 
2196     -- If from update termination quote
2197     ELSIF (p_control_flag = 'TRMNT_QUOTE_UPDATE') THEN
2198 
2199       --  Check user status
2200       IF k_header_rec.sts_code NOT IN ('BOOKED', 'EVERGREEN', 'BANKRUPTCY_HOLD',
2201                                      'LITIGATION_HOLD', 'TERMINATION_HOLD') THEN
2202         -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2203         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2204                             p_msg_name      => 'OKL_AM_CONTRACT_INACTIVE',
2205                             p_token1        => 'CONTRACT_NUMBER',
2206                             p_token1_value  => k_header_rec.contract_number,
2207                             p_token2        => 'STATUS',
2208                             p_token2_value  => k_header_rec.meaning);
2209         RAISE l_invalid_contract;
2210       END IF;
2211 
2212     --******************************
2213     -- RESTR_QUOTE_UPDATE
2214     --******************************
2215 
2216     -- If from update restructure quote
2217     ELSIF (p_control_flag = 'RESTR_QUOTE_UPDATE') THEN
2218 
2219       --  Check user status
2220       IF k_header_rec.sts_code NOT IN ( 'BOOKED',
2221                                         'BANKRUPTCY_HOLD',
2222                                         'LITIGATION_HOLD') THEN
2223         -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2224         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2225                             p_msg_name      => 'OKL_AM_CONTRACT_INACTIVE',
2226                             p_token1        => 'CONTRACT_NUMBER',
2227                             p_token1_value  => k_header_rec.contract_number,
2228                             p_token2        => 'STATUS',
2229                             p_token2_value  => k_header_rec.meaning);
2230         RAISE l_invalid_contract;
2231       END IF;
2232 
2233     --******************************
2234     -- REPUR_QUOTE_UPDATE
2235     --******************************
2236 
2237     -- If from update repurchase quote
2238     ELSIF (p_control_flag = 'REPUR_QUOTE_UPDATE') THEN
2239 
2240       --  Check user status
2241       IF k_header_rec.sts_code NOT IN ( 'TERMINATED','EXPIRED') THEN
2242         -- Message: Contract CONTRACT_NUMBER is still STATUS.
2243         -- Unable to generate the quote until the contract
2244         -- has been terminated or expired.
2245         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2246                             p_msg_name      => 'OKL_AM_CONTRACT_STILL_ACTIVE',
2247                             p_token1        => 'CONTRACT_NUMBER',
2248                             p_token1_value  => k_header_rec.contract_number,
2249                             p_token2        => 'STATUS',
2250                             p_token2_value  => k_header_rec.meaning);
2251         RAISE l_invalid_contract;
2252       END IF;
2253 
2254     --******************************
2255     -- BATCH_PROCESS
2256     --******************************
2257 
2258     -- If from batch process
2259     ELSIF (p_control_flag = 'BATCH_PROCESS') THEN
2260 
2261       -- Check if template
2262       IF k_header_rec.template_yn = OKL_API.G_TRUE THEN
2263         -- Message: This operation is not allowed on contract template-(NUMBER).
2264         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
2265                             p_msg_name      => 'OKC_K_TEMPLATE',
2266                             p_token1        => 'NUMBER',
2267                             p_token1_value  => k_header_rec.contract_number);
2268         RAISE l_invalid_contract;
2269       END IF;
2270 
2271 /*-- rmunjulu PERF -- Not required
2272       -- Check if locked
2273       IF l_chg_request_in_process = 'x' THEN
2274         -- Message: You cannot modify this contract now because a
2275         -- change request is active. Please try later.
2276         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
2277                             p_msg_name      => 'OKC_K_LOCKED');
2278         RAISE l_invalid_contract;
2279       END IF;
2280 
2281       --Check if service requests found
2282       IF l_service_request = 'x' THEN
2283         -- Message: You cannot terminate this contract/line because a service
2284         --request is pending against this contract/line. Please try again later.
2285         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
2286                             p_msg_name      => 'OKC_SR_PENDING');
2287         RAISE l_invalid_contract;
2288       END IF;
2289 */
2290 
2291 
2292     --******************************
2293     -- BATCH_PROCESS_CHR
2294     --******************************
2295 
2296     -- If from batch process for single contract request
2297     ELSIF (p_control_flag = 'BATCH_PROCESS_CHR') THEN
2298 
2299       -- Check if template
2300       IF k_header_rec.template_yn = OKL_API.G_TRUE THEN
2301         -- Message: This operation is not allowed on contract template-(NUMBER).
2302         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
2303                             p_msg_name      => 'OKC_K_TEMPLATE',
2304                             p_token1        => 'NUMBER',
2305                             p_token1_value  => k_header_rec.contract_number);
2306         RAISE l_invalid_contract;
2307       END IF;
2308 
2309 /*-- rmunjulu PERF -- Not required
2310       -- Check if locked
2311       IF l_chg_request_in_process = 'x' THEN
2312         -- Message: You cannot modify this contract now because a
2313         -- change request is active. Please try later.
2314         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
2315                             p_msg_name      => 'OKC_K_LOCKED');
2316         RAISE l_invalid_contract;
2317       END IF;
2318 
2319       --Check if service requests found
2320       IF l_service_request = 'x' THEN
2321         -- Message: You cannot terminate this contract/line because a service
2322         --request is pending against this contract/line. Please try again later.
2323         OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
2324                             p_msg_name      => 'OKC_SR_PENDING');
2325         RAISE l_invalid_contract;
2326       END IF;
2327 */
2328 
2329 /*
2330       --  Check user status
2331       IF k_header_rec.sts_code <> 'BOOKED' THEN
2332         -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2333         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2334                             p_msg_name      => 'OKL_AM_CONTRACT_INACTIVE',
2335                             p_token1        => 'CONTRACT_NUMBER',
2336                             p_token1_value  => k_header_rec.contract_number,
2337                             p_token2        => 'STATUS',
2338                             p_token2_value  => k_header_rec.meaning);
2339         RAISE l_invalid_contract;
2340       END IF;
2341 */
2342 
2343 -- rmunjulu PERF -- Moved cursor open here
2344     OPEN  k_accepted_quote_csr;
2345     FETCH k_accepted_quote_csr INTO l_quotes_exist;
2346     CLOSE k_accepted_quote_csr;
2347 
2348       --   Check if accepted quote exists
2349       IF (l_quotes_exist = 'x')  THEN
2350         -- Message: Cannot terminate contract (CONTRACT_NUMBER) since
2351         -- accepted quote exists.
2352         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2353                             p_msg_name      => 'OKL_AM_QUOTES_EXIST',
2354                             p_token1        => 'CONTRACT_NUMBER',
2355                             p_token1_value  => k_header_rec.contract_number);
2356         RAISE l_invalid_contract;
2357       END IF;
2358 
2359     --******************************
2360     -- ASSET_RETURN_CREATE
2361     --******************************
2362 
2363     -- If from create asset return
2364     ELSIF (p_control_flag = 'ASSET_RETURN_CREATE') THEN
2365 
2366       --  Check contract status
2367       IF l_ste_code IS NOT NULL AND l_ste_code IN ('ENTERED','SIGNED','CANCELLED') THEN
2368         -- Message: Contract CONTRACT_NUMBER has invalid post-booking status - STATUS.
2369         -- Unable to create asset return for this contract.
2370 
2371         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2372                             p_msg_name      => 'OKL_AM_K_INVALID_STATUS',
2373                             p_token1        => 'CONTRACT_NUMBER',
2374                             p_token1_value  => l_contract_number,
2375                             p_token2        => 'STATUS',
2376                             p_token2_value  => l_meaning);
2377         RAISE l_invalid_contract;
2378       END IF;
2379 
2380     --******************************
2381     -- ASSET_RETURN_UPDATE
2382     --******************************
2383 
2384     -- If from update asset return
2385     ELSIF (p_control_flag = 'ASSET_RETURN_UPDATE') THEN
2386 
2387       --  Check user status
2388       IF k_header_rec.sts_code NOT IN ( 'TERMINATED','EXPIRED') THEN
2389         --Message: Contract CONTRACT_NUMBER is still STATUS.
2390         -- Unable to return assets for this contract.
2391         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2392                             p_msg_name      => 'OKL_AM_K_INVALID_FOR_ART_ERR',
2393                             p_token1        => 'CONTRACT_NUMBER',
2394                             p_token1_value  => k_header_rec.contract_number,
2395                             p_token2        => 'STATUS',
2396                             p_token2_value  => k_header_rec.meaning);
2397         RAISE l_invalid_contract;
2398       END IF;
2399 
2400     --******************************
2401     -- Default checking (Control flag is null)
2402     --******************************
2403 
2404     ELSE -- Default checking (Control flag is null)
2405 
2406       --  Check user status
2407       IF k_header_rec.sts_code <> 'BOOKED' THEN
2408         -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2409         OKL_API.set_message(p_app_name      => OKL_API.G_APP_NAME,
2410                             p_msg_name      => 'OKL_AM_CONTRACT_INACTIVE',
2411                             p_token1        => 'CONTRACT_NUMBER',
2412                             p_token1_value  => k_header_rec.contract_number,
2413                             p_token2        => 'STATUS',
2414                             p_token2_value  => k_header_rec.meaning);
2415         RAISE l_invalid_contract;
2416       END IF;
2417     END IF;
2418 
2419     -- Set the current contract status
2420     x_contract_status := k_header_rec.sts_code;
2421 
2422     -- Set the return status
2423     x_return_status   :=  l_return_status;
2424     IF (is_debug_procedure_on) THEN
2425       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
2426     END IF;
2427   EXCEPTION
2428     WHEN l_invalid_contract THEN
2429       IF (is_debug_exception_on) THEN
2430         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'l_invalid_contract');
2431       END IF;
2432       IF k_header_csr%ISOPEN THEN
2433          CLOSE k_header_csr;
2434       END IF;
2435       IF k_contractstatus_csr%ISOPEN THEN
2436          CLOSE k_contractstatus_csr;
2437       END IF;
2438       IF k_locks_csr%ISOPEN THEN
2439          CLOSE k_locks_csr;
2440       END IF;
2441       IF k_service_request_csr%ISOPEN THEN
2442          CLOSE k_service_request_csr;
2443       END IF;
2444       IF k_accepted_quote_csr%ISOPEN THEN
2445          CLOSE k_accepted_quote_csr;
2446       END IF;
2447 
2448 
2449    	  -- notify caller of EXPECTED error
2450 	    x_return_status := OKL_API.G_RET_STS_ERROR;
2451 
2452     WHEN OTHERS THEN
2453       IF (is_debug_exception_on) THEN
2454           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2455 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
2456       END IF;
2457       IF k_header_csr%ISOPEN THEN
2458          CLOSE k_header_csr;
2459       END IF;
2460       IF k_contractstatus_csr%ISOPEN THEN
2461          CLOSE k_contractstatus_csr;
2462       END IF;
2463       IF k_locks_csr%ISOPEN THEN
2464          CLOSE k_locks_csr;
2465       END IF;
2466       IF k_service_request_csr%ISOPEN THEN
2467          CLOSE k_service_request_csr;
2468       END IF;
2469       IF k_accepted_quote_csr%ISOPEN THEN
2470          CLOSE k_accepted_quote_csr;
2471       END IF;
2472 
2473       -- store SQL error message on message stack for caller
2474   	  OKL_API.SET_MESSAGE (
2475 			 p_app_name	        => OKC_API.G_APP_NAME
2476 			,p_msg_name	        => G_UNEXPECTED_ERROR
2477 			,p_token1	          => G_SQLCODE_TOKEN
2478 			,p_token1_value	    => sqlcode
2479 			,p_token2	          => G_SQLERRM_TOKEN
2480 			,p_token2_value	    => sqlerrm);
2481 
2482    	  -- notify caller of an UNEXPECTED error
2483 	    x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2484    END validate_contract;
2485 
2486 
2487   -- Start of comments
2488   --
2489   -- Procedure Name	: check_lease_loan_type
2490   -- Desciption     : Checks if contract is lease or loan
2491   -- Business Rules	:
2492   -- Parameters	    :
2493   -- Version		: 1.0
2494   -- History        : RMUNJULU 06-MAR-03 Performance Fix Replaced K_HDR_FULL
2495   --
2496   -- End of comments
2497   PROCEDURE check_lease_loan_type(
2498            p_api_version                 IN  NUMBER,
2499            p_init_msg_list               IN  VARCHAR2,
2500            x_return_status               OUT NOCOPY VARCHAR2,
2501            x_msg_count                   OUT NOCOPY NUMBER,
2502            x_msg_data                    OUT NOCOPY VARCHAR2,
2503            p_term_rec                    IN term_rec_type,
2504            x_lease_loan_type             OUT NOCOPY VARCHAR2)  IS
2505 
2506    -- Get the K details
2507    CURSOR k_header_csr is
2508    SELECT  id,
2509            object_version_number,
2510 		   sts_code,
2511            scs_code
2512     FROM   OKC_K_HEADERS_B
2513     WHERE  id = p_term_rec.p_contract_id;
2514 
2515    -- Get the K deal_type
2516    -- RMUNJULU 06-MAR-03 Performance Fix Replaced K_HDR_FULL
2517    CURSOR k_deal_type_csr is
2518    SELECT  deal_type
2519     FROM   OKL_K_HEADERS_V
2520     WHERE  id = p_term_rec.p_contract_id;
2521 
2522     k_header_rec         k_header_csr%ROWTYPE;
2523     l_lease_loan_type    VARCHAR2(30) := '$';
2524     l_api_name           VARCHAR2(30) := 'check_lease_loan_type';
2525     l_deal_type          VARCHAR2(30) := '$';
2526     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_lease_loan_type';
2527     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2528     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2529     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2530 
2531   BEGIN
2532     IF (is_debug_procedure_on) THEN
2533       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
2534     END IF;
2535     IF (is_debug_statement_on) THEN
2536       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
2537       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2538       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
2539       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
2540       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2541     END IF;
2542     x_return_status   := OKL_API.G_RET_STS_SUCCESS;
2543     x_lease_loan_type := l_lease_loan_type;
2544 
2545     OPEN k_header_csr;
2546     FETCH k_header_csr INTO k_header_rec;
2547     IF k_header_csr%NOTFOUND THEN
2548       OKL_API.set_message(p_app_name      => OKC_API.G_APP_NAME,
2549                           p_msg_name      => 'OKC_K_CHANGED',
2550                           p_token1        => 'NUMBER',
2551                           p_token1_value  =>  p_term_rec.p_contract_number,
2552                           p_token2        => 'MODIFIER',
2553                           p_token2_value  =>  p_term_rec.p_contract_modifier);
2554       CLOSE k_header_csr;
2555       RAISE OKL_API.G_EXCEPTION_ERROR;
2556     END IF;
2557 
2558     OPEN k_deal_type_csr;
2559     FETCH k_deal_type_csr INTO l_deal_type;
2560     CLOSE k_deal_type_csr;
2561 
2562     -- Set the lease or loan type
2563     -- (If scs_code = Lease and deal_type = Loan then Loan)
2564     IF k_header_rec.scs_code = 'LEASE'
2565     AND NVL(l_deal_type,'?') LIKE 'LOAN%' THEN
2566       l_lease_loan_type := 'LOAN';
2567     ELSIF k_header_rec.scs_code = 'LEASE'
2568     AND NVL(l_deal_type,'?') LIKE 'LEASE%' THEN
2569       l_lease_loan_type := 'LEASE';
2570     ELSIF k_header_rec.scs_code = 'LOAN' THEN
2571       l_lease_loan_type := 'LOAN';
2572     END IF;
2573     CLOSE k_header_csr;
2574 
2575     x_lease_loan_type := l_lease_loan_type;
2576     IF (is_debug_procedure_on) THEN
2577       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
2578     END IF;
2579   EXCEPTION
2580     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2581       IF (is_debug_exception_on) THEN
2582         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
2583       END IF;
2584       IF k_header_csr%ISOPEN THEN
2585         CLOSE k_header_csr;
2586       END IF;
2587       IF k_deal_type_csr%ISOPEN THEN
2588         CLOSE k_deal_type_csr;
2589       END IF;
2590       x_lease_loan_type := '$';
2591       x_return_status := OKL_API.G_RET_STS_ERROR;
2592 
2593     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2594       IF (is_debug_exception_on) THEN
2595         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
2596       END IF;
2597       IF k_header_csr%ISOPEN THEN
2598         CLOSE k_header_csr;
2599       END IF;
2600       IF k_deal_type_csr%ISOPEN THEN
2601         CLOSE k_deal_type_csr;
2602       END IF;
2603       x_lease_loan_type := '$';
2604       x_return_status :=OKL_API.G_RET_STS_UNEXP_ERROR;
2605 
2606     WHEN OTHERS THEN
2607       IF (is_debug_exception_on) THEN
2608           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2609 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
2610       END IF;
2611       IF k_header_csr%ISOPEN THEN
2612         CLOSE k_header_csr;
2613       END IF;
2614       IF k_deal_type_csr%ISOPEN THEN
2615         CLOSE k_deal_type_csr;
2616       END IF;
2617       x_lease_loan_type := '$';
2618       OKL_API.set_message(p_app_name      => okc_api.g_app_name,
2619                           p_msg_name      => g_unexpected_error,
2620                           p_token1        => g_sqlcode_token,
2621                           p_token1_value  => sqlcode,
2622                           p_token2        => g_sqlerrm_token,
2623                           p_token2_value  => sqlerrm);
2624       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2625   END check_lease_loan_type;
2626 
2627   ----------------------------------------------------------------------------
2628   -- PROCEDURE : process_non_batch
2629   ----------------------------------------------------------------------------
2630   PROCEDURE process_non_batch(
2631            p_api_version                 IN  NUMBER,
2632            p_init_msg_list               IN  VARCHAR2,
2633            x_return_status               OUT NOCOPY VARCHAR2,
2634            x_msg_count                   OUT NOCOPY NUMBER,
2635            x_msg_data                    OUT NOCOPY VARCHAR2,
2636            p_term_rec                    IN term_rec_type,
2637            x_tcnv_rec                    OUT NOCOPY tcnv_rec_type,
2638            x_can_terminate               OUT NOCOPY VARCHAR2) IS
2639 
2640       l_quote_found         VARCHAR2(1) := 'N';
2641       l_trn_exists          VARCHAR2(1) := 'N';
2642       l_can_terminate       VARCHAR2(1) := 'Y';
2643       lp_tcnv_rec           tcnv_rec_type;
2644       lx_tcnv_rec           tcnv_rec_type;
2645       lx_contract_status      VARCHAR2(200);
2646       l_return_status       VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2647       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'process_non_batch';
2648       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2649       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2650       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2651 
2652   BEGIN
2653      IF (is_debug_procedure_on) THEN
2654        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
2655      END IF;
2656      IF (is_debug_statement_on) THEN
2657        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
2658        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2659        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
2660        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
2661        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2662        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
2663      END IF;
2664 
2665      -- Validate the contract
2666      validate_contract(
2667            p_api_version                 =>   p_api_version,
2668            p_init_msg_list               =>   p_init_msg_list,
2669            x_return_status               =>   l_return_status,
2670            x_msg_count                   =>   x_msg_count,
2671            x_msg_data                    =>   x_msg_data,
2672            p_contract_id                 =>   p_term_rec.p_contract_id,
2673            p_control_flag                =>   p_term_rec.p_control_flag,
2674            x_contract_status             =>   lx_contract_status);
2675       IF (is_debug_statement_on) THEN
2676         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called validate_contract , return status: ' || l_return_status);
2677         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'lx_contract_status : ' || lx_contract_status);
2678       END IF;
2679 
2680      -- If error abort this contract
2681      IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2682        RAISE G_EXCEPTION_HALT;
2683      END IF;
2684 
2685      -- get transaction if exists
2686      IF (is_debug_statement_on) THEN
2687        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_BTCH_EXP_LEASE_LOAN_PVT.get_trn_rec');
2688      END IF;
2689      OKL_AM_BTCH_EXP_LEASE_LOAN_PVT.get_trn_rec(
2690            p_contract_id                => p_term_rec.p_contract_id,
2691            x_return_status              => l_return_status,
2692            x_trn_exists                 => l_trn_exists,
2693            x_tcnv_rec                   => lp_tcnv_rec);
2694       IF (is_debug_statement_on) THEN
2695         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_BTCH_EXP_LEASE_LOAN_PVT.get_trn_rec , return status: ' || l_return_status);
2696         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_trn_exists : ' || l_trn_exists);
2697       END IF;
2698 
2699      -- if error then abort this contract
2700      IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2701        RAISE G_EXCEPTION_HALT;
2702      END IF;
2703 
2704      -- If trn exists then set the out tcnv_rec
2705      -- (have to do this or else tcnv_rec set wrong)
2706      IF (l_trn_exists = 'Y' ) THEN
2707         lx_tcnv_rec  :=    lp_tcnv_rec;
2708         x_tcnv_rec   :=    lx_tcnv_rec;
2709      END IF;
2710 
2711     x_return_status       :=   l_return_status;
2712     x_can_terminate       :=   l_can_terminate;
2713     IF (is_debug_procedure_on) THEN
2714       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
2715     END IF;
2716   EXCEPTION
2717 
2718     WHEN G_EXCEPTION_HALT THEN
2719         IF (is_debug_exception_on) THEN
2720           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_HALT');
2721         END IF;
2722         x_return_status       :=   OKL_API.G_RET_STS_ERROR;
2723         x_can_terminate       :=   'N';
2724 
2725     WHEN OTHERS THEN
2726         IF (is_debug_exception_on) THEN
2727             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2728 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
2729         END IF;
2730         x_return_status       :=   OKL_API.G_RET_STS_ERROR;
2731         x_can_terminate       :=   'N';
2732   END process_non_batch;
2733 
2734 
2735 
2736 
2737 
2738   -- Start of comments
2739   --
2740   -- Procedure Name	: lease_loan_termination
2741   -- Desciption     : method to terminate the lease or loan
2742   -- Business Rules	:
2743   -- Parameters		  :
2744   -- Version		    : 1.0
2745   -- History        : RMUNJULU -- 26-NOV-02: Bug # 2484327 : Added call to
2746   --                  OKL_AM_CNTRCT_LN_TRMNT_PVT if partial quote, Changed
2747   --                  l_accepted_qte_csr cursor.
2748   --                  RMUNJULU 18-DEC-02 2484327 Changed IF to get qte_id properly
2749   --                : RMUNJULU 02-JAN-03 2699412 Set the okc context
2750   --
2751   -- End of comments
2752   PROCEDURE lease_loan_termination(
2753            p_api_version                 IN  NUMBER,
2754            p_init_msg_list               IN  VARCHAR2,
2755            x_return_status               OUT NOCOPY VARCHAR2,
2756            x_msg_count                   OUT NOCOPY NUMBER,
2757            x_msg_data                    OUT NOCOPY VARCHAR2,
2758            p_term_rec                    IN  term_rec_type,
2759            p_tcnv_rec                    IN  tcnv_rec_type) IS
2760 
2761 
2762    -- Get the accepted quote if exists for the contract
2763    -- RMUNJULU Bug # 2484327 : Added partial_yn to cursor to get the value
2764    -- of the quote whether partial yn
2765    -- RMUNJULU 18-DEC-02 2484327 commented --
2766 
2767 
2768    -- RMUNJULU 18-DEC-02 2484327 added cursor
2769    -- Get the quote details
2770    CURSOR l_qte_csr ( p_qte_id IN NUMBER) IS
2771      SELECT QTE.id,
2772             QTE.partial_yn
2773      FROM   OKL_TRX_QUOTES_V QTE
2774      WHERE  QTE.id = p_qte_id;
2775 
2776 
2777    l_return_status         VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
2778    l_api_name              CONSTANT VARCHAR2(30) := 'lease_loan_termination';
2779    l_lease_or_loan         VARCHAR2(200);
2780    l_tcnv_rec              tcnv_rec_type := p_tcnv_rec;
2781    l_trn_exists            VARCHAR2(1) := 'N';
2782    l_can_terminate         VARCHAR2(1) := 'Y';
2783    lp_term_rec             term_rec_type := p_term_rec;
2784    --l_accepted_qte_rec      l_accepted_qte_csr%ROWTYPE;
2785    l_module_name VARCHAR2(500) := G_MODULE_NAME || 'lease_loan_termination';
2786    is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2787    is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2788    is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2789 
2790    -- RMUNJULU Bug # 2484327 : To get the value of the quote whether partial yn
2791    l_partial_yn            VARCHAR2(1) := 'N';
2792 
2793    -- RMUNJULU 18-DEC-02 2484327
2794    l_qte_rec l_qte_csr%ROWTYPE;
2795    lx_quote_tbl OKL_AM_UTIL_PVT.quote_tbl_type;
2796 
2797    -- RMUNJULU 3061751 27-AUG-2003
2798    l_service_integration_needed   VARCHAR2(3) := 'N';
2799 
2800   BEGIN
2801    IF (is_debug_procedure_on) THEN
2802      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
2803    END IF;
2804    IF (is_debug_statement_on) THEN
2805      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
2806      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2807      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
2808      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
2809      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2810      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
2811      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.tmt_recycle_yn: '||p_tcnv_rec.tmt_recycle_yn);
2812      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.qte_id: '||p_tcnv_rec.qte_id);
2813    END IF;
2814 
2815    x_return_status := OKL_API.G_RET_STS_SUCCESS;
2816 
2817    -- if not batch process then check if can be terminated
2818    IF NVL(lp_term_rec.p_control_flag,'?') NOT IN ('BATCH_PROCESS','BATCH_PROCESS_CHR') THEN
2819 
2820 
2821      process_non_batch(
2822            p_api_version                 =>   p_api_version,
2823            p_init_msg_list               =>   p_init_msg_list,
2824            x_return_status               =>   l_return_status,
2825            x_msg_count                   =>   x_msg_count,
2826            x_msg_data                    =>   x_msg_data,
2827            p_term_rec                    =>   lp_term_rec,
2828            x_tcnv_rec                    =>   l_tcnv_rec,
2829            x_can_terminate               =>   l_can_terminate);
2830       IF (is_debug_statement_on) THEN
2831         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called process_non_batch , return status: ' || l_return_status);
2832         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_can_terminate : ' || l_can_terminate);
2833       END IF;
2834 
2835 
2836      -- If error abort this contract
2837      IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2838         RAISE OKL_API.G_EXCEPTION_ERROR;
2839      END IF;
2840      IF (l_can_terminate <> 'Y') THEN
2841         RAISE OKL_API.G_EXCEPTION_ERROR;
2842      END IF;
2843 
2844    END IF;
2845 
2846 
2847 
2848    -- check if lease/loan exists and type
2849    check_lease_loan_type(
2850            p_api_version                 =>   p_api_version,
2851            p_init_msg_list               =>   p_init_msg_list,
2852            x_return_status               =>   l_return_status,
2853            x_msg_count                   =>   x_msg_count,
2854            x_msg_data                    =>   x_msg_data,
2855            p_term_rec                    =>   lp_term_rec,
2856            x_lease_loan_type             =>   l_lease_or_loan);
2857       IF (is_debug_statement_on) THEN
2858         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_lease_loan_type , return status: ' || l_return_status);
2859         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_lease_or_loan : ' || l_lease_or_loan);
2860       END IF;
2861 
2862 
2863 
2864    -- If error abort this contract
2865    IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2866      RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2867    ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2868      RAISE OKL_API.G_EXCEPTION_ERROR;
2869    END IF;
2870 
2871 
2872 
2873    -- Set the quote parameter if accepted quote exists and not already populated
2874    -- RMUNJULU Bug # 2484327 : cannot have the below if since if quote id
2875    -- passed then will not set partial_yn
2876 
2877 
2878 
2879    -- RMUNJULU 18-DEC-02 2484327 -- START --
2880    -- Changed the if logic to get the correct qte_id
2881 
2882    -- NOTE: If this IF does not return any quote then the partial_yn is not set to 'Y'
2883    -- and it is a full termination
2884 
2885    -- Check if quote id passed to p_term_rec get partial_yn if yes
2886    IF  lp_term_rec.p_quote_id IS NOT NULL
2887    AND lp_term_rec.p_quote_id <> OKL_API.G_MISS_NUM THEN
2888 
2889 
2890      -- This condition is from termination quotes
2891      OPEN  l_qte_csr ( lp_term_rec.p_quote_id);
2892      FETCH l_qte_csr INTO l_qte_rec;
2893      IF l_qte_csr%FOUND THEN
2894        l_partial_yn := l_qte_rec.partial_yn;
2895      END IF;
2896      CLOSE l_qte_csr;
2897 
2898 
2899    -- else check if quote id passed to p_tcnv_rec get partial_yn if yes
2900    ELSIF  l_tcnv_rec.qte_id IS NOT NULL
2901    AND l_tcnv_rec.qte_id <> OKL_API.G_MISS_NUM THEN
2902 
2903      -- This condition is from batch recycled trns which originated from qte
2904      OPEN  l_qte_csr ( l_tcnv_rec.qte_id);
2905      FETCH l_qte_csr INTO l_qte_rec;
2906      IF l_qte_csr%FOUND THEN
2907        l_partial_yn := l_qte_rec.partial_yn;
2908        lp_term_rec.p_quote_id := l_tcnv_rec.qte_id;
2909      END IF;
2910      CLOSE l_qte_csr;
2911 
2912 
2913    -- else get the accepted quote for contract and get partial_yn
2914    ELSE
2915 
2916      -- This condition is from contract term. scrn when quote exists with no trn
2917 
2918      -- *****************
2919      -- Get accepted quote with no trn if exists for contract
2920      -- *****************
2921 
2922      IF (is_debug_statement_on) THEN
2923        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_non_trn_contract_quotes');
2924      END IF;
2925      -- Get accepted quote for contract with no trn
2926      OKL_AM_UTIL_PVT.get_non_trn_contract_quotes (
2927            p_khr_id        => lp_term_rec.p_contract_id,
2928            x_quote_tbl     => lx_quote_tbl,
2929            x_return_status => l_return_status);
2930      IF (is_debug_statement_on) THEN
2931        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_non_trn_contract_quotes , return status: ' || l_return_status);
2932      END IF;
2933 
2934      -- Check the return status
2935      IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2936 
2937          -- Error occured in util proc, message set by util proc raise exp
2938          RAISE OKL_API.G_EXCEPTION_ERROR;
2939 
2940      END IF;
2941 
2942      -- Check if accepted quote with no trn exists for the contract
2943      IF lx_quote_tbl.COUNT > 0 THEN
2944 
2945         lp_term_rec.p_quote_id := lx_quote_tbl(lx_quote_tbl.FIRST).id;
2946         l_partial_yn := lx_quote_tbl(lx_quote_tbl.FIRST).partial_yn;
2947 
2948      END IF;
2949 
2950    END IF;
2951 
2952    -- RMUNJULU 18-DEC-02 2484327 -- END --
2953 
2954 
2955    IF (is_debug_statement_on) THEN
2956      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'setting okc org context');
2957    END IF;
2958    -- RMUNJULU 02-JAN-03 2699412 Set the okc context
2959    OKL_CONTEXT.set_okc_org_context(p_chr_id => lp_term_rec.p_contract_id);
2960 
2961   -- ++++++++++++++++++++  service contract integration begin ++++++++++++++++++
2962 
2963    IF (is_debug_statement_on) THEN
2964      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling check_service_k_int_needed');
2965    END IF;
2966    -- RMUNJULU 3061751 27-AUG-2003
2967    -- Checks and sets service_integration_needed flag
2968    -- Need to do this before lines terminated else will not know
2969    -- if TRUE FULL termination or not (FULL Termination or PARTIAL Termination
2970    -- but no more assets)
2971    l_service_integration_needed := check_service_k_int_needed(
2972                                        p_term_rec     => lp_term_rec,
2973                                        p_tcnv_rec     => l_tcnv_rec,
2974                                        p_partial_yn   => l_partial_yn,
2975                                        p_source       => 'TERMINATION');
2976    IF (is_debug_statement_on) THEN
2977      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_service_k_int_needed');
2978      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_service_integration_needed : ' || l_service_integration_needed);
2979    END IF;
2980 
2981   -- +++++++++++++++++++++ service contract integration end   ++++++++++++++++++
2982 
2983 
2984    -- RMUNJULU Bug # 2484327 -- Will first check if partial termination and call
2985    -- OKL_AM_CONTRACT_LINE_TRMNT_PVT API or else check for lease or loan and
2986    -- call appropriate API.
2987 
2988    -- rmunjulu Added condition to check if truely partial
2989    IF (l_partial_yn = 'Y') THEN
2990 
2991       -- need to check if no more assets (This case p_quote_id is Always populated)
2992       l_partial_yn := check_true_partial_quote_yn( -- rmunjulu 4997075
2993                                  p_quote_id     => lp_term_rec.p_quote_id,
2994                                  p_contract_id  => lp_term_rec.p_contract_id);
2995       IF (is_debug_statement_on) THEN
2996         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_true_partial_quote_yn');
2997         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_partial_yn : ' || l_partial_yn);
2998       END IF;
2999    END IF;
3000 
3001    -- Call the lease/loan termination api
3002    IF (l_partial_yn = 'Y') THEN
3003 
3004      IF (is_debug_statement_on) THEN
3005        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_CNTRCT_LN_TRMNT_PVT.asset_level_termination');
3006      END IF;
3007 
3008      OKL_AM_CNTRCT_LN_TRMNT_PVT.asset_level_termination(
3009            p_api_version       =>   p_api_version,
3010            p_init_msg_list     =>   p_init_msg_list,
3011            p_term_rec          =>   lp_term_rec,
3012            p_tcnv_rec          =>   l_tcnv_rec,
3013            x_msg_count         =>   x_msg_count,
3014            x_msg_data          =>   x_msg_data,
3015            x_return_status     =>   l_return_status);
3016      IF (is_debug_statement_on) THEN
3017        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_CNTRCT_LN_TRMNT_PVT.asset_level_termination , return status: ' || l_return_status);
3018      END IF;
3019 
3020      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3021        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3022      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3023        RAISE OKL_API.G_EXCEPTION_ERROR;
3024      END IF;
3025 
3026    ELSIF (l_lease_or_loan = 'LEASE') THEN
3027 
3028      IF (is_debug_statement_on) THEN
3029        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_TRMNT_PVT.lease_termination');
3030      END IF;
3031      OKL_AM_LEASE_TRMNT_PVT.lease_termination(
3032            p_api_version                 =>   p_api_version,
3033            p_init_msg_list               =>   p_init_msg_list,
3034            x_return_status               =>   l_return_status,
3035            x_msg_count                   =>   x_msg_count,
3036            x_msg_data                    =>   x_msg_data,
3037            p_term_rec                    =>   lp_term_rec,
3038            p_tcnv_rec                    =>   l_tcnv_rec);
3039      IF (is_debug_statement_on) THEN
3040        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_TRMNT_PVT.lease_termination , return status: ' || l_return_status);
3041      END IF;
3042 
3043      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3044        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3045      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3046        RAISE OKL_API.G_EXCEPTION_ERROR;
3047      END IF;
3048 
3049    ELSIF (l_lease_or_loan = 'LOAN') THEN
3050 
3051      IF (is_debug_statement_on) THEN
3052        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LOAN_TRMNT_PVT.loan_termination');
3053      END IF;
3054      OKL_AM_LOAN_TRMNT_PVT.loan_termination(
3055            p_api_version                 =>   p_api_version,
3056            p_init_msg_list               =>   p_init_msg_list,
3057            x_return_status               =>   l_return_status,
3058            x_msg_count                   =>   x_msg_count,
3059            x_msg_data                    =>   x_msg_data,
3060            p_term_rec                    =>   lp_term_rec,
3061            p_tcnv_rec                    =>   l_tcnv_rec);
3062      IF (is_debug_statement_on) THEN
3063        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LOAN_TRMNT_PVT.loan_termination , return status: ' || l_return_status);
3064      END IF;
3065 
3066      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3067        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3068      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3069        RAISE OKL_API.G_EXCEPTION_ERROR;
3070      END IF;
3071 
3072    ELSIF (l_lease_or_loan = '$') THEN
3073 
3074      -- type not found
3075      -- set message and raise exception
3076      -- Contract type, whether Lease or Loan could not be
3077      -- determined for Contract CONTRACT_NUMBER.
3078      OKL_API.set_message(p_app_name       => G_APP_NAME,
3079                           p_msg_name      => 'OKL_AM_K_TYPE_NOT_FOUND',
3080                           p_token1        => 'CONTRACT_NUMBER',
3081                           p_token1_value  => lp_term_rec.p_contract_number);
3082 
3083      RAISE OKL_API.G_EXCEPTION_ERROR;
3084 
3085    ELSE
3086 
3087      -- neither lease or loan
3088      -- set message and raise exception
3089      -- Contract CONTRACT_NUMBER is neither a Lease nor a Loan.
3090      OKL_API.set_message( p_app_name      => G_APP_NAME,
3091                           p_msg_name      => 'OKL_AM_K_TYPE_ERROR',
3092                           p_token1        => 'CONTRACT_NUMBER',
3093                           p_token1_value  => lp_term_rec.p_contract_number);
3094 
3095      RAISE OKL_API.G_EXCEPTION_ERROR;
3096 
3097    END IF;
3098 
3099 
3100   -- ++++++++++++++++++++  service contract integration begin ++++++++++++++++++
3101 
3102    -- RMUNJULU 3061751 27-AUG-2003 Do the Service_Integration Steps, Launches SERVICE INT WF if needed
3103    service_k_integration(
3104                p_term_rec                   => lp_term_rec,
3105                p_source                     => 'TERMINATION',
3106                p_service_integration_needed => l_service_integration_needed);
3107    IF (is_debug_statement_on) THEN
3108      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called service_k_integration');
3109    END IF;
3110 
3111   -- +++++++++++++++++++++ service contract integration end   ++++++++++++++++++
3112 
3113    x_return_status := l_return_status;
3114    IF (is_debug_procedure_on) THEN
3115      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
3116    END IF;
3117 
3118   EXCEPTION
3119 
3120     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3121       IF (is_debug_exception_on) THEN
3122         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
3123       END IF;
3124 
3125       -- RMUNJULU 18-DEC-02 2484327
3126       IF l_qte_csr%ISOPEN THEN
3127         CLOSE l_qte_csr;
3128       END IF;
3129 
3130       x_return_status := OKL_API.G_RET_STS_ERROR;
3131 
3132     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3133       IF (is_debug_exception_on) THEN
3134         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
3135       END IF;
3136 
3137       -- RMUNJULU 18-DEC-02 2484327
3138       IF l_qte_csr%ISOPEN THEN
3139         CLOSE l_qte_csr;
3140       END IF;
3141 
3142 
3143       x_return_status :=OKL_API.G_RET_STS_UNEXP_ERROR;
3144 
3145     WHEN OTHERS THEN
3146       IF (is_debug_exception_on) THEN
3147           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3148 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
3149       END IF;
3150 
3151       -- RMUNJULU 18-DEC-02 2484327
3152       IF l_qte_csr%ISOPEN THEN
3153         CLOSE l_qte_csr;
3154       END IF;
3155 
3156 
3157       OKL_API.set_message(p_app_name      => okc_api.g_app_name,
3158                           p_msg_name      => g_unexpected_error,
3159                           p_token1        => g_sqlcode_token,
3160                           p_token1_value  => sqlcode,
3161                           p_token2        => g_sqlerrm_token,
3162                           p_token2_value  => sqlerrm);
3163 
3164       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3165 
3166   END lease_loan_termination;
3167 
3168   ----------------------------------------------------------------------------
3169   -- PROCEDURE : lease_loan_termination
3170   -- method to terminate multiple leases and loans
3171   -- Call this method from the Contract Termination Screen
3172   ----------------------------------------------------------------------------
3173   PROCEDURE lease_loan_termination(
3174            p_api_version                 IN  NUMBER,
3175            p_init_msg_list               IN  VARCHAR2,
3176            x_return_status               OUT NOCOPY VARCHAR2,
3177            x_msg_count                   OUT NOCOPY NUMBER,
3178            x_msg_data                    OUT NOCOPY VARCHAR2,
3179            p_term_tbl                    IN  term_tbl_type,
3180            p_tcnv_tbl                    IN  tcnv_tbl_type) IS
3181 
3182     l_return_status          VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3183     i                        NUMBER := 0;
3184     l_overall_status         VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3185     l_api_version            CONSTANT NUMBER := 1;
3186     l_api_name               CONSTANT VARCHAR2(30) := 'lease_loan_termination';
3187     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'lease_loan_termination';
3188     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3189     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3190     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3191   BEGIN
3192     IF (is_debug_procedure_on) THEN
3193       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
3194     END IF;
3195 
3196     --Check API version, initialize message list and create savepoint.
3197     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
3198                                               G_PKG_NAME,
3199                                               p_init_msg_list,
3200                                               l_api_version,
3201                                               p_api_version,
3202                                               '_PVT',
3203                                               x_return_status);
3204     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3205       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3206     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3207       RAISE OKL_API.G_EXCEPTION_ERROR;
3208     END IF;
3209 
3210     --OKL_API.init_msg_list(p_init_msg_list);
3211     -- Initialize return_status
3212     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3213     -- Initialize p_init_msg_list to True so that every time the message stack
3214     -- is set or else the messages for the successfull terminated contracts
3215     -- will come here which is not desired
3216     -- This method is called from Contract Termination screen
3217     -- The screen will rollback if even one of the contracts failed to terminate
3218     -- Skip out of the loop as soon as the first contract is failed
3219     IF (p_term_tbl.COUNT > 0) THEN
3220       i := p_term_tbl.FIRST;
3221       LOOP
3222         lease_loan_termination (
3223           p_api_version                  => p_api_version,
3224           p_init_msg_list                => OKL_API.G_TRUE,
3225           x_return_status                => l_return_status,
3226           x_msg_count                    => x_msg_count,
3227           x_msg_data                     => x_msg_data,
3228           p_term_rec                     => p_term_tbl(i),
3229           p_tcnv_rec                     => p_tcnv_tbl(i));
3230       IF (is_debug_statement_on) THEN
3231         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called lease_loan_termination , return status: ' || l_return_status);
3232       END IF;
3233 
3234         -- rollback if terminating contract failed
3235         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3236           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3237         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3238           RAISE OKL_API.G_EXCEPTION_ERROR;
3239         END IF;
3240         EXIT WHEN (i = p_term_tbl.LAST);
3241         i := p_term_tbl.NEXT(i);
3242       END LOOP;
3243 
3244     END IF;
3245 
3246 
3247     x_return_status := l_return_status;
3248 
3249     -- end the transaction
3250     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3251     IF (is_debug_procedure_on) THEN
3252       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
3253     END IF;
3254   EXCEPTION
3255     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3256       IF (is_debug_exception_on) THEN
3257         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
3258       END IF;
3259 
3260       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3261       (
3262         l_api_name,
3263         G_PKG_NAME,
3264         'OKL_API.G_RET_STS_ERROR',
3265         x_msg_count,
3266         x_msg_data,
3267         '_PVT'
3268       );
3269     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3270       IF (is_debug_exception_on) THEN
3271         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
3272       END IF;
3273 
3274       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3275       (
3276         l_api_name,
3277         G_PKG_NAME,
3278         'OKL_API.G_RET_STS_UNEXP_ERROR',
3279         x_msg_count,
3280         x_msg_data,
3281         '_PVT'
3282       );
3283     WHEN OTHERS THEN
3284       IF (is_debug_exception_on) THEN
3285           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3286 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
3287       END IF;
3288 
3289       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3290       (
3291         l_api_name,
3292         G_PKG_NAME,
3293         'OTHERS',
3294         x_msg_count,
3295         x_msg_data,
3296         '_PVT'
3297       );
3298   END lease_loan_termination;
3299 
3300     -- Start of comments
3301     --
3302     -- Procedure Name : get_set_quote_dates
3303     -- Desciption     : gets the quote eff dates and sets global variables with those
3304     -- Business Rules :
3305     -- Parameters	  :
3306     -- Version		  : 1.0
3307     -- History        : RMUNJULU EDAT created
3308     --
3309     -- End of comments
3310    PROCEDURE get_set_quote_dates(
3311           p_qte_id              IN NUMBER,
3312           p_trn_date            IN DATE DEFAULT NULL,
3313           x_return_status       OUT NOCOPY VARCHAR2) IS
3314 
3315       -- get the quote dates
3316       CURSOR quote_dates_csr (p_quote_id IN NUMBER) IS
3317       SELECT trunc(qte.date_effective_from),
3318              trunc(qte.date_accepted)
3319       FROM   okl_trx_quotes_b qte
3320       WHERE  qte.id = p_quote_id;
3321 
3322       l_eff_from DATE;
3323       l_accpt DATE;
3324 
3325       l_trn_date DATE;
3326       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_set_quote_dates';
3327       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3328       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3329       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3330 
3331    BEGIN
3332       IF (is_debug_procedure_on) THEN
3333         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
3334       END IF;
3335       IF (is_debug_statement_on) THEN
3336         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qte_id: '|| p_qte_id);
3337         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: '|| p_trn_date);
3338       END IF;
3339 
3340       x_return_status := OKL_API.g_ret_sts_success;
3341 
3342       SELECT SYSDATE INTO l_trn_date FROM DUAL;
3343 
3344       -- if quote_id exists then
3345       IF  p_qte_id IS NOT NULL
3346       AND p_qte_id <> OKL_API.G_MISS_NUM THEN
3347 
3348          -- get quote dates
3349          OPEN  quote_dates_csr (p_qte_id);
3350          FETCH quote_dates_csr INTO l_eff_from, l_accpt;
3351          CLOSE quote_dates_csr;
3352 
3353          -- set global variables
3354          g_quote_eff_from_date := l_eff_from;
3355          g_quote_accept_date   := l_accpt;
3356          g_quote_exists        := 'Y';
3357 
3358       ELSE -- quote does not exist
3359 
3360          g_quote_exists        := 'N';
3361 
3362          IF p_trn_date IS NOT NULL THEN
3363             g_transaction_date    := p_trn_date;
3364          ELSE
3365             g_transaction_date    := l_trn_date;
3366          END IF;
3367 
3368       END IF;
3369      IF (is_debug_procedure_on) THEN
3370        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
3371      END IF;
3372 
3373    EXCEPTION
3374 
3375       WHEN OTHERS THEN
3376          IF (is_debug_exception_on) THEN
3377              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3378 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
3379          END IF;
3380 
3381          x_return_status := OKL_API.g_ret_sts_error;
3382 
3383          -- Set the oracle error message
3384          OKL_API.set_message(
3385                          p_app_name      => OKC_API.G_APP_NAME,
3386                          p_msg_name      => g_unexpected_error,
3387                          p_token1        => g_sqlcode_token,
3388                          p_token1_value  => SQLCODE,
3389                          p_token2        => g_sqlerrm_token,
3390                          p_token2_value  => SQLERRM);
3391 
3392    END  get_set_quote_dates;
3393 
3394   -- Start of comments
3395   --
3396   -- Procedure Name	: process_discount_subsidy
3397   -- Desciption     : method to handle subsidy and discount refund
3398   -- Business Rules	:
3399   -- Parameters	    :
3400   -- Version	    : 1.0
3401   -- History        : RMUNJULU 26-NOV-03 2484327 Added code to get accrual_stream_type_id and pass to accrual_api
3402   --                  Added Code to pass set_of_books_id to create AP invoice
3403   --                : RMUNJULU 08-DEC-03 3280473 Changed code to get the subsidy subline amount
3404   --                  used for refund, instead of subsidy amount for the whole financial
3405   --                  line
3406   --                : rmunjulu EDAT Added code to get the quote eff date and quote accpt date
3407   --                  and set the dates accordingly
3408   --                : rmunjulu EDAT Changed code to set quote_eff dates using termination date if no quote
3409   --                : rmunjulu 4399352 changed to get subsidy income accrual sty id from stream generation template
3410   --                :sosharma build R12 replaced the procedure calls to create AP header,lines and accounting with
3411   --                 a single call to disbursement API OKL_CREATE_DISB_TRANS_PVT.create_disb_trx
3412   -- End of comments
3413   PROCEDURE process_discount_subsidy(
3414            p_api_version                 IN  NUMBER,
3415            p_init_msg_list               IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
3416            x_return_status               OUT NOCOPY VARCHAR2,
3417            x_msg_count                   OUT NOCOPY NUMBER,
3418            x_msg_data                    OUT NOCOPY VARCHAR2,
3419            p_term_rec                    IN  term_rec_type,
3420            p_call_origin                 IN  VARCHAR2 DEFAULT NULL,
3421            p_termination_date            IN DATE) IS
3422 
3423             p_asset_tbl_k   OKL_AM_LEASE_TRMNT_PVT.klev_tbl_type;
3424             l_asset_tbl_l   OKL_AM_CNTRCT_LN_TRMNT_PVT.klev_tbl_type;
3425             l_asset_tbl     OKL_AM_LEASE_TRMNT_PVT.klev_tbl_type;
3426             l_asbv_tbl    okl_subsidy_process_pvt.asbv_tbl_type;
3427             l_sty_id      NUMBER;
3428             l_parent_line_id      NUMBER;
3429             l_date_accepted       DATE;
3430             l_subsidy_end_date    DATE;
3431             l_contract_end_date   DATE;
3432             l_module_name VARCHAR2(500) := G_MODULE_NAME || 'process_discount_subsidy';
3433             is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3434             is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3435             is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3436             /* sosharma 12-jan-2007
3437              Build: R12
3438              declared table of type okl_tpl_pvt.tplv_tbl_type to be passed as an input to the
3439              OKL_CREATE_DISB_TRANS_PVT. create_disb_trx
3440              Start changes
3441              */
3442              l_tplv_tbl   okl_tpl_pvt.tplv_tbl_type;
3443              x_tplv_tbl   okl_tpl_pvt.tplv_tbl_type;
3444              /*
3445              sosharma End changes
3446              */
3447             l_sub_sty_id         NUMBER;    -- SMODUGA for subsidy stream type id
3448              --**SMODUGA added for ap_invoice lines
3449             l_currency_conversion_type  okl_k_headers.currency_conversion_type%TYPE;
3450             l_currency_conversion_date okl_k_headers.currency_conversion_date%TYPE;
3451             l_currency_conversion_rate okl_k_headers.currency_conversion_rate%TYPE;
3452              --**SMODUGA added for ap_invoice lines
3453             l_quote_number        NUMBER;
3454             l_api_name CONSTANT VARCHAR2(30) := 'process_discount_subsidy';
3455             l_api_version         CONSTANT NUMBER := 1;
3456             l_acceleration_rec   OKL_GENERATE_ACCRUALS_PVT.acceleration_rec_type;
3457             l_tapv_rec           okl_tap_pvt.tapv_rec_type ;
3458             x_tapv_rec           okl_tap_pvt.tapv_rec_type ;
3459             --**SMODUGA added for ap_invoice lines
3460             l_tplv_rec              okl_tpl_pvt.tplv_rec_type;
3461             x_tplv_rec             okl_tpl_pvt.tplv_rec_type;
3462             -- ** END SMODUGA added for ap_invoice lines
3463             lx_subsidy_amount   NUMBER;
3464             l_app_id            NUMBER;
3465             l_trx_type_ID       NUMBER;
3466             l_document_category VARCHAR2(100):= 'OKL Lease Pay Invoices';
3467             lx_dbseqnm          VARCHAR2(2000):= '';
3468             lx_dbseqid          NUMBER(38):= NULL;
3469             l_formula_name      VARCHAR2(150);
3470             l_return_status      VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3471             l_msg_count NUMBER := OKL_API.G_MISS_NUM;
3472             l_msg_data VARCHAR2(2000);
3473 
3474         --akrangan for Bug 5669097 Fix Start
3475         v_flag              varchar2(1) :='N';
3476         indx                 number :=1;
3477         TYPE l_acceleration_tbl_type IS TABLE OF
3478 	OKL_GENERATE_ACCRUALS_PVT.acceleration_rec_type
3479 	INDEX BY BINARY_INTEGER;
3480         l_acceleration_tbl l_acceleration_tbl_type;
3481         --akrangan for Bug 5669097 Fix End
3482     -- Get all active subsidies for this contract
3483     -- RMUNJULU *** Added code to get accrual_stream_type_id
3484     -- SMODUGA *** Added code to get subsidy_line_id
3485     CURSOR c_active_subsidies(c_parent_line_id NUMBER,c_contract_id NUMBER)IS
3486     select KLE1.amount,sub.stream_type_id, sub.refund_formula_id,
3487            sub.subsidy_calc_basis, sub.recourse_yn,
3488            sub.termination_refund_basis, sub.receipt_method_code,
3489            sub.accounting_method_code accounting_method_code,sub.effective_to_date,
3490            sub.vendor_id,sub.currency_code,
3491            -- to_number(sgn.VALUE) accrual_stream_type_id,  --RMUNJULU *** --rmunjulu bug 4399352
3492            cle1.id subsidy_line_id, -- smoduga ***
3493            nvl(kle1.subsidy_override_amount,nvl(kle1.amount,0)) subsidy_amount  -- RMUNJULU 3280473
3494     from OKL_K_LINES KLE1,
3495          OKC_K_LINES_B CLE1,
3496          OKC_LINE_STYLES_B LS1,
3497          okl_subsidies_b SUB,
3498          okl_subsidies_tl  subt,
3499          OKC_STATUSES_V STS1
3500          -- ,okl_sgn_translations sgn --RMUNJULU *** --rmunjulu bug 4399352
3501     where KLE1.ID = CLE1.ID
3502       AND CLE1.LSE_ID = LS1.ID
3503       AND LS1.LTY_CODE ='SUBSIDY'
3504       AND cle1.dnz_chr_id = c_contract_id
3505       AND CLE1.STS_CODE = STS1.CODE
3506       AND CLE1.STS_CODE <> 'ABANDONED'
3507       AND cle1.cle_id= c_parent_line_id
3508       AND SUB.ID = KLE1.SUBSIDY_ID
3509       AND SUBT.ID = SUB.ID
3510       And subt.language  =   userenv('LANG') ;
3511       --AND sgn.jtot_object1_code = 'OKL_STRMTYP'  --RMUNJULU *** --rmunjulu bug 4399352
3512       --AND sgn.object1_id1 = to_char(sub.stream_type_id); --RMUNJULU *** --rmunjulu bug 4399352
3513 
3514 
3515     -- get accepted date for the termination quote
3516    cursor c_term_quote(c_quote_id number) is
3517    select quote_number
3518    from okl_trx_quotes_v
3519    where id = c_quote_id
3520          AND accepted_yn ='Y';
3521 
3522     -- get contract_end_date
3523    cursor c_contract_eff_to(c_contract_id number) is
3524    select end_date
3525    from okc_k_headers_b
3526    where id = c_contract_id;
3527 
3528     --**SMODUGA added for currency conversion info
3529     -- get currency conversion info
3530     cursor c_currency_conversion (c_contract_id number) is
3531     select CURRENCY_CONVERSION_TYPE,CURRENCY_CONVERSION_RATE,
3532            CURRENCY_CONVERSION_DATE
3533     from okl_k_headers
3534     where id = c_contract_id;
3535     --**END SMODUGA added for currency conversion info
3536 
3537     -- getting App ID
3538    CURSOR c_app_info  IS
3539       SELECT APPLICATION_ID
3540       FROM FND_APPLICATION
3541       WHERE APPLICATION_SHORT_NAME = 'OKL' ;
3542 
3543     -- ***SMODUGA***--
3544     --changed to get vendor_id and vendor site id for generating AP invoice
3545     -- getting vendor site id
3546     CURSOR c_vendor_info (p_subsidy_line_id NUMBER) IS
3547     SELECT pay.vendor_id,
3548        pay.pay_site_id
3549     FROM   okl_party_payment_dtls_v pay,
3550        okc_k_party_roles_v  party
3551     WHERE  pay.cpl_id = party.id
3552     AND    party.cle_id = p_subsidy_line_id ;
3553 
3554     -- *** END SMODUGA***--
3555 
3556     --**SMODUGA added for contract product
3557     --getting contract product id
3558     CURSOR pdt_id_csr ( p_khr_id NUMBER ) IS
3559          SELECT khr.pdt_id
3560          FROM okl_k_headers khr
3561          WHERE khr.id =  p_khr_id;
3562    --**END SMODUGA added for contract product
3563 
3564     --    Transaction type
3565     CURSOR c_trx_type (c_name VARCHAR2, c_language VARCHAR2) IS
3566         SELECT  id
3567         FROM    okl_trx_types_tl
3568         WHERE   name      = c_name
3569         AND     language  = c_language;
3570 
3571     -- GET formula name
3572     CURSOR c_formula (c_refund_formula_id   NUMBER) IS
3573         SELECT NAME
3574         FROM OKL_FORMULAE_V
3575         WHERE ID = c_refund_formula_id;
3576 
3577     -- SMODUGA added for getting acceleration till date
3578     -- get acceleration till date
3579 
3580     CURSOR get_accel_till_csr (c_khr_id IN NUMBER, c_accrual_sty_id IN NUMBER) IS
3581      SELECT max(stream_element_date) accelerate_till_date
3582      FROM   okl_strm_elements_v sel,
3583             okl_streams         stm
3584      where  SEL.STM_ID = STM.ID
3585      and    STM.STY_ID = c_accrual_sty_id
3586      and    STM.khr_id = c_khr_id
3587      AND    STM.active_yn   = 'Y'
3588      AND    STM.say_code = 'CURR';
3589 
3590     -- END SMODUGA --
3591     l_sub_rec   c_active_subsidies%ROWTYPE;
3592     l_sob_id number; -- RMUNJULU *** Added
3593 
3594     -- rmunjulu EDAT
3595     l_quote_accpt_date DATE;
3596     l_quote_eff_date DATE;
3597     l_valid_gl_date DATE;
3598     --Bug# 3999921: pagarg +++ T and A ++++
3599     l_release_basis VARCHAR2(30);
3600 
3601     l_accrual_sty_id NUMBER;  -- rmunjulu 4399352
3602     l_accrual_sty_id_rep NUMBER;  -- MGAAP 7263041
3603     l_trx_number OKL_TRX_CONTRACTS.TRX_NUMBER%TYPE;  -- MGAAP 7263041
3604 
3605     -- rmunjulu 4622198
3606     CURSOR khr_dtls_csr ( p_khr_id NUMBER ) IS
3607          SELECT chr.scs_code
3608          FROM okc_k_headers_b chr
3609          WHERE chr.id =  p_khr_id;
3610 
3611       -- rmunjulu 4622198
3612       l_scs_code OKC_K_HEADERS_B.scs_code%TYPE;
3613       l_fact_synd_code FND_LOOKUPS.lookup_code%TYPE;
3614       l_inv_acct_code OKC_RULES_B.rule_information1%TYPE;
3615      --akrangan Bug 5526955 fix start
3616       CURSOR check_accrual_previous_csr IS
3617       SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
3618       FROM OKL_SYSTEM_PARAMS;
3619 
3620       l_accrual_previous_mnth_yn VARCHAR2(3);
3621      --akrangan Bug 5526955 fix start
3622     FUNCTION get_invoice_number(
3623                             p_app_id IN NUMBER,
3624                             p_cat_code IN VARCHAR2,
3625                             p_sob_id IN NUMBER,
3626                             p_met_code IN VARCHAR2,
3627                             p_trx_date IN DATE,
3628                             p_dbseqnum IN OUT NOCOPY VARCHAR2,
3629                             p_dbseqid IN OUT NOCOPY NUMBER
3630                              ) RETURN NUMBER IS
3631                     l_row_notfound                 BOOLEAN := TRUE;
3632                     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_invoice_number';
3633                     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3634                     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3635                     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3636                     BEGIN
3637                            IF (is_debug_procedure_on) THEN
3638                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
3639                            END IF;
3640                            IF (is_debug_statement_on) THEN
3641                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_app_id: '|| p_app_id);
3642                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_cat_code: '|| p_cat_code);
3643                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_sob_id: '|| p_sob_id);
3644                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_met_code: '|| p_met_code);
3645                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trx_date: '|| p_trx_date);
3646                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_dbseqnum: '|| p_dbseqnum);
3647                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_dbseqid: '|| p_dbseqid);
3648                            END IF;
3649                             l_tapv_rec.Invoice_Number := fnd_seqnum.get_next_sequence
3650                                                         (appid      =>  p_app_id,
3651                                                          cat_code    =>  p_cat_code,
3652                                                          sobid       =>  p_sob_id,
3653                                                          met_code    =>  p_met_code,
3654                                                          trx_date    =>  p_trx_date,
3655                                                          dbseqnm     =>  p_dbseqnum,
3656                                                          dbseqid     =>  p_dbseqid);
3657                             IF (is_debug_procedure_on) THEN
3658                               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
3659                             END IF;
3660                             IF (is_debug_statement_on) THEN
3661                               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_tapv_rec.Invoice_Number: '||l_tapv_rec.Invoice_Number);
3662                             END IF;
3663                             RETURN  l_tapv_rec.Invoice_Number;
3664 
3665                       EXCEPTION
3666                        WHEN OTHERS THEN
3667                             IF (is_debug_exception_on) THEN
3668                               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3669 		                                                       || sqlcode || ' , SQLERRM : ' || sqlerrm);
3670                             END IF;
3671                             OKL_API.Set_Message(p_app_name      => OKL_API.G_APP_NAME,
3672                                                 p_msg_name      => 'OKL_UNEXPECTED_ERROR',
3673                                                 p_token1        => 'OKL_SQLCODE',
3674                                                 p_token1_value  => SQLCODE,
3675                                                 p_token2        => 'OKL_SQLERRM',
3676                                                 p_token2_value  => SQLERRM);
3677                      END get_invoice_number;
3678   BEGIN
3679     IF (is_debug_procedure_on) THEN
3680       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
3681     END IF;
3682     IF (is_debug_statement_on) THEN
3683       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_call_origin: '|| p_call_origin);
3684       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_termination_date: '|| p_termination_date);
3685       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
3686       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
3687       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
3688       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
3689       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
3690       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
3691       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_type: '|| p_term_rec.p_quote_type);
3692     END IF;
3693      --Check API version, initialize message list and create savepoint.
3694     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
3695                                               G_PKG_NAME,
3696                                               p_init_msg_list,
3697                                               l_api_version,
3698                                               p_api_version,
3699                                               '_PVT',
3700                                               x_return_status);
3701     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3702       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3703     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3704       RAISE OKL_API.G_EXCEPTION_ERROR;
3705     END IF;
3706 
3707 
3708     -- Initialize return_status
3709     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3710 
3711     -- rmunjulu +++++++++ Effective Dated Termination -- start  ++++++++++++++++
3712 
3713       -- rmunjulu EDAT
3714       -- If quote exists then accnting date is quote accept date else sysdate
3715       IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists,'N') = 'Y' THEN
3716 
3717           l_quote_accpt_date := okl_am_lease_loan_trmnt_pvt.g_quote_accept_date;
3718           l_quote_eff_date := okl_am_lease_loan_trmnt_pvt.g_quote_eff_from_date;
3719 
3720       ELSE
3721 
3722           l_quote_accpt_date := p_termination_date;
3723           l_quote_eff_date :=  p_termination_date;
3724 
3725       END IF;
3726 
3727       -- rmunjulu EDAT
3728       -- get valid GL Date for acceptance date
3729       l_valid_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date( p_gl_date => l_quote_accpt_date);
3730 
3731 
3732     -- rmunjulu +++++++++ Effective Dated Termination -- end    ++++++++++++++++
3733 
3734 
3735     -- Determine call origin
3736     IF p_call_origin = 'PARTIAL' THEN -- [1]
3737 
3738       IF (is_debug_statement_on) THEN
3739         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_CNTRCT_LN_TRMNT_PVT.get_lines');
3740       END IF;
3741         -- get line details from OKL_AM_CNTRCT_LN_TRMNT
3742         OKL_AM_CNTRCT_LN_TRMNT_PVT.get_lines(
3743                               p_term_rec     => p_term_rec,
3744                               x_klev_tbl        => l_asset_tbl_l,
3745                               x_return_status   => l_return_status);
3746       IF (is_debug_statement_on) THEN
3747         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_CNTRCT_LN_TRMNT_PVT.get_lines , return status: ' || l_return_status);
3748       END IF;
3749 
3750         IF  l_asset_tbl_l.count > 0 THEN --[2]
3751             -- populate local table
3752             FOR i in l_asset_tbl_l.first..l_asset_tbl_l.last LOOP --[ L1 ]
3753                 l_asset_tbl(i).p_kle_id     := l_asset_tbl_l(i).p_kle_id;
3754                 l_asset_tbl(i).p_asset_name := l_asset_tbl_l(i).p_asset_name;
3755             END LOOP; -- [ L1 ]
3756 
3757         END IF; -- [2]
3758 
3759 
3760        ELSE  -- Full Termination
3761 
3762       IF (is_debug_statement_on) THEN
3763         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_TRMNT_PVT.get_contract_lines');
3764       END IF;
3765         -- get line details from OKL_AM_LEASE_TRMNT_PVT
3766         OKL_AM_LEASE_TRMNT_PVT.get_contract_lines(
3767                                            p_api_version      => p_api_version,
3768                                            p_init_msg_list    => OKL_API.G_FALSE,
3769                                            x_return_status    => l_return_status,
3770                                            x_msg_count        => l_msg_count,
3771                                            x_msg_data         => l_msg_data,
3772                                            p_term_rec         => p_term_rec,
3773                                            x_klev_tbl         => l_asset_tbl);
3774       IF (is_debug_statement_on) THEN
3775         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_TRMNT_PVT.get_contract_lines , return status: ' || l_return_status);
3776       END IF;
3777 
3778         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3779          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3780         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3781          RAISE OKL_API.G_EXCEPTION_ERROR;
3782         END IF;
3783 
3784     END IF;   -- [1]
3785 
3786     -- rmunjulu 4622198 SPECIAL_ACCNT Get contract details
3787     OPEN khr_dtls_csr (p_term_rec.p_contract_id);
3788     FETCH khr_dtls_csr INTO l_scs_code;
3789     CLOSE khr_dtls_csr;
3790 
3791       IF (is_debug_statement_on) THEN
3792         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SECURITIZATION_PVT.check_khr_ia_associated');
3793       END IF;
3794     -- rmunjulu 4622198 SPECIAL_ACCNT Get special accounting details
3795     OKL_SECURITIZATION_PVT.check_khr_ia_associated(
3796         p_api_version                  => l_api_version
3797        ,p_init_msg_list                => OKL_API.G_FALSE
3798        ,x_return_status                => l_return_status
3799        ,x_msg_count                    => l_msg_count
3800        ,x_msg_data                     => l_msg_data
3801        ,p_khr_id                       => p_term_rec.p_contract_id
3802        ,p_scs_code                     => l_scs_code
3803        ,p_trx_date                     => l_quote_accpt_date
3804        ,x_fact_synd_code               => l_fact_synd_code
3805        ,x_inv_acct_code                => l_inv_acct_code
3806        );
3807       IF (is_debug_statement_on) THEN
3808         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SECURITIZATION_PVT.check_khr_ia_associated , return status: ' || l_return_status);
3809         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_fact_synd_code : ' || l_fact_synd_code);
3810         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_inv_acct_code : ' || l_inv_acct_code);
3811       END IF;
3812 
3813         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3814          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3815         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3816          RAISE OKL_API.G_EXCEPTION_ERROR;
3817         END IF;
3818 
3819     -- Loop through each asset and process
3820     IF l_asset_tbl.count > 0 THEN
3821         FOR i in l_asset_tbl.FIRST..l_asset_tbl.LAST LOOP --[ L2 ]
3822 
3823            -- Get the subsidy lines for the financial asset line sent
3824            -- Check all active subsidies for the asset
3825            FOR l_sub_rec in c_active_subsidies(l_asset_tbl(i).p_kle_id,p_term_rec.p_contract_id) LOOP --[L3]
3826 
3827             --Bug# 3999921: pagarg +++ T and A +++++++ Start ++++++++++
3828             --Check for release basis to either accelerate accruals or create AP invoice
3829             --for TER_RELEASE_WO_PURCHASE
3830             IF p_term_rec.p_quote_type = 'TER_RELEASE_WO_PURCHASE'
3831             THEN
3832                IF (is_debug_statement_on) THEN
3833                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SUBSIDY_PROCESS_PVT.GET_RELK_TERMN_BASIS');
3834                END IF;
3835                OKL_SUBSIDY_PROCESS_PVT.GET_RELK_TERMN_BASIS(
3836                          p_api_version    => p_api_version,
3837                          p_init_msg_list  => OKL_API.G_FALSE,
3838                          x_return_status  => l_return_status,
3839                          x_msg_count      => l_msg_count,
3840                          x_msg_data       => l_msg_data,
3841                          p_chr_id         => p_term_rec.p_contract_id,
3842                          p_subsidy_id     => l_sub_rec.subsidy_line_id,
3843                          x_release_basis  => l_release_basis);
3844                IF (is_debug_statement_on) THEN
3845                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SUBSIDY_PROCESS_PVT.GET_RELK_TERMN_BASIS , return status: ' || l_return_status);
3846                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_release_basis : ' || l_release_basis);
3847                END IF;
3848 
3849                IF l_sub_rec.accounting_method_code = 'AMORTIZE'
3850                THEN
3851                  IF l_release_basis = 'ACCELERATE'
3852                  THEN
3853 
3854                     IF (is_debug_statement_on) THEN
3855                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_STREAMS_UTIL.get_dependent_stream_type');
3856                     END IF;
3857                     -- SECHAWLA 29-DEC-05 4911502 : moved from above : begin
3858                     -- rmunjulu 4399352 Added the following for bug  4399352 - start
3859                     OKL_STREAMS_UTIL.get_dependent_stream_type(
3860                     p_khr_id                => p_term_rec.p_contract_id,
3861                     p_primary_sty_id        => l_sub_rec.stream_type_id,
3862                     p_dependent_sty_purpose => 'SUBSIDY_INCOME',
3863                     x_return_status         => l_return_status,
3864                     x_dependent_sty_id      => l_accrual_sty_id);
3865                     IF (is_debug_statement_on) THEN
3866                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
3867                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_accrual_sty_id : ' || l_accrual_sty_id);
3868                     END IF;
3869 
3870               		IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3871                  		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3872               		ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3873                  		RAISE OKL_API.G_EXCEPTION_ERROR;
3874               		END IF;
3875            			-- rmunjulu 4399352 Added the following for bug  4399352 - end
3876                     -- SECHAWLA 29-DEC-05 4911502 : moved from above : end
3877 
3878                     -- Fetch stream type id for subsidy and accrual streams
3879                     l_sty_id := l_accrual_sty_id; -- rmunjulu 4399352
3880                     --akrangan for bug 5669097 fix start
3881                     IF l_acceleration_tbl.COUNT>0 THEN
3882 	              FOR c IN l_acceleration_tbl.first .. l_acceleration_tbl.last
3883 	              LOOP
3884 		        IF (l_acceleration_tbl(c).khr_id = p_term_rec.p_contract_id
3885                         AND l_acceleration_tbl(c).sty_id =l_sty_id
3886                         AND l_acceleration_tbl(c).kle_id =l_asset_tbl(i).p_kle_id )
3887 			THEN
3888 		          v_flag                  :='Y';
3889 			  EXIT;
3890 		        ELSE
3891 			  v_flag :='N';
3892  	                END IF;
3893                       END LOOP;
3894                     END IF;
3895                     l_acceleration_tbl(indx).khr_id :=p_term_rec.p_contract_id;
3896                     l_acceleration_tbl(indx).sty_id :=l_sty_id;
3897                     l_acceleration_tbl(indx).kle_id :=l_asset_tbl(i).p_kle_id ;
3898                     indx := indx + 1;
3899                     -- akrangan for bug 5669097 fix end
3900                     OPEN get_accel_till_csr(p_term_rec.p_contract_id, l_sty_id);
3901                     FETCH get_accel_till_csr INTO l_acceleration_rec.accelerate_till_date;
3902                     CLOSE get_accel_till_csr ;
3903 		  --Bug 5852720 by srsreeni starts
3904  	          -- fix for bug -- 5610960 -- added below condition
3905  	          -- If quote exists then cancelation date is quote eff from date else sysdate
3906  	                IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists,'N') = 'Y' THEN
3907  	           --Bug 5852720 by srsreeni ends
3908                    --akrangan Bug 5526955 fix start
3909                    --Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup
3910 		   --check accruals till quote eff date OR previous month last date
3911                    OPEN  check_accrual_previous_csr;
3912                    FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
3913                    CLOSE check_accrual_previous_csr;
3914 
3915                    IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
3916                      l_acceleration_rec.accelerate_from_date := TRUNC(LAST_DAY(l_quote_eff_date) + 1);
3917                    ELSE
3918                      l_acceleration_rec.accelerate_from_date := LAST_DAY(TRUNC(l_quote_eff_date, 'MONTH')-1)+1;
3919                    END IF;
3920                    --akrangan Bug 5526955 fix end
3921 		   --Bug 5852720 by srsreeni starts
3922  	           ELSE
3923  	            l_acceleration_rec.accelerate_from_date := TRUNC(LAST_DAY(l_quote_eff_date) + 1);
3924  	           END IF;
3925  	            --Bug 5852720 by srsreeni ends
3926                     --pre populate the accrual rec
3927                     l_acceleration_rec.khr_id := p_term_rec.p_contract_id; -- Id of the contract whose stream type needs to be accelerated
3928                     l_acceleration_rec.sty_id := l_sty_id;-- Id of the stream type which needs to be accelerated
3929                     l_acceleration_rec.acceleration_date := l_valid_gl_date; -- Date of acceleration (Transaction date)
3930                     l_acceleration_rec.kle_id := l_asset_tbl(i).p_kle_id; --added for handling partial terminations.
3931 
3932                     -- Termination quote number
3933                     OPEN c_term_quote(p_term_rec.p_quote_id);
3934                     FETCH c_term_quote INTO l_quote_number;
3935                       IF c_term_quote%FOUND
3936                       THEN
3937                         l_acceleration_rec.description := 'Accrual acceleration for Asset number '
3938                                                         ||l_asset_tbl(i).p_asset_name||
3939                                                         'and Contract number '||p_term_rec.p_contract_number ||
3940                                                         'upon acceptance of ' || l_quote_number;
3941                       ELSE
3942                         l_acceleration_rec.description := 'Accrual acceleration for Asset number '
3943                                                         ||l_asset_tbl(i).p_asset_name||
3944                                                         'and Contract number '||p_term_rec.p_contract_number;
3945                       END IF;
3946                     CLOSE c_term_quote;
3947 
3948                     l_acceleration_rec.accrual_rule_yn := 'N';
3949 
3950                     --Accelerate Income Recognization
3951 		    -- akrangan for bug 5669097 start
3952  	            IF  v_flag ='N' THEN
3953                     IF (is_debug_statement_on) THEN
3954                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals');
3955                     END IF;
3956  	            -- akrangan for bug 5669097 End
3957                     OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
3958                                                     p_api_version       => p_api_version,
3959                                                     p_init_msg_list     => OKL_API.G_FALSE,
3960                                                     x_return_status     => l_return_status,
3961                                                     x_msg_count         => l_msg_count,
3962                                                     x_msg_data          => l_msg_data,
3963                                                     p_acceleration_rec  => l_acceleration_rec,
3964                                                     x_trx_number  => l_trx_number);
3965                     IF (is_debug_statement_on) THEN
3966                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
3967                     END IF;
3968 
3969                     IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3970                        OKL_API.set_message(
3971                              p_app_name      => G_APP_NAME,
3972                              p_msg_name      => 'OKL_AM_SUBSIDY_INC_RECOG',
3973                              p_token1        => 'ASSET_NUMBER',
3974                              p_token1_value  => l_asset_tbl(i).p_asset_name,
3975                              p_token2        => 'CONTRACT_NUMBER',
3976                              p_token2_value  => p_term_rec.p_contract_number);
3977                     END IF;
3978 
3979                     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3980                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3981                     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3982                       RAISE OKL_API.G_EXCEPTION_ERROR;
3983                     END IF;
3984 
3985                     -- Start MGAAP 7263041
3986                     OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
3987                     OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
3988                     p_khr_id                => p_term_rec.p_contract_id,
3989                     p_primary_sty_id        => l_sub_rec.stream_type_id,
3990                     p_dependent_sty_purpose => 'SUBSIDY_INCOME',
3991                     x_return_status         => l_return_status,
3992                     x_dependent_sty_id      => l_accrual_sty_id_rep);
3993                     IF (is_debug_statement_on) THEN
3994                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
3995                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_accrual_sty_id_rep : ' || l_accrual_sty_id_rep);
3996                     END IF;
3997 
3998               	    IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
3999                       l_acceleration_rec.sty_id := l_accrual_sty_id_rep;
4000                       l_acceleration_rec.trx_number := l_trx_number;
4001 
4002                       OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
4003                                                     p_api_version       => p_api_version,
4004                                                     p_init_msg_list     => OKL_API.G_FALSE,
4005                                                     x_return_status     => l_return_status,
4006                                                     x_msg_count         => l_msg_count,
4007                                                     x_msg_data          => l_msg_data,
4008                                                     p_acceleration_rec  => l_acceleration_rec,
4009                                                     p_representation_type  => 'SECONDARY',
4010                                                     x_trx_number  => l_trx_number);
4011                       OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4012 
4013                       IF (is_debug_statement_on) THEN
4014                         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
4015                       END IF;
4016 
4017                       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4018                          OKL_API.set_message(
4019                              p_app_name      => G_APP_NAME,
4020                              p_msg_name      => 'OKL_AM_SUBSIDY_INC_RECOG',
4021                              p_token1        => 'ASSET_NUMBER',
4022                              p_token1_value  => l_asset_tbl(i).p_asset_name,
4023                              p_token2        => 'CONTRACT_NUMBER',
4024                              p_token2_value  => p_term_rec.p_contract_number);
4025                       END IF;
4026 
4027                       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4028                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4029                       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4030                         RAISE OKL_API.G_EXCEPTION_ERROR;
4031                       END IF;
4032 
4033               	    END IF;
4034                     -- end MGAAP 7263041
4035 
4036                   -- akrangan for bug 5669097 start
4037  	            END IF;
4038  	          -- akrangan for bug 5669097 End
4039                  ELSE -- l_release_basis = 'ACCELERATE'
4040                   -------------------------------------------------
4041                   --Gathering data for creating Invoice
4042                   -------------------------------------------------
4043                   l_sub_sty_id := l_sub_rec.stream_type_id;
4044                   l_sob_id := okl_accounting_util.get_set_of_books_id;
4045                   -- get  currency conversion information
4046                   OPEN c_currency_conversion(p_term_rec.p_contract_id);
4047                   FETCH c_currency_conversion INTO l_currency_conversion_type,
4048                                                    l_currency_conversion_rate,
4049                                                    l_currency_conversion_date;
4050                   CLOSE c_currency_conversion ;
4051 
4052                   -- Get Application Info
4053                   OPEN c_app_info ;
4054                   FETCH c_app_info INTO l_app_id;
4055                     IF(c_app_info%NOTFOUND)
4056                     THEN
4057                       -- Change Message
4058                       Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
4059                                           G_COL_NAME_TOKEN,'Billing');
4060                       x_return_status := OKC_API.G_RET_STS_ERROR ;
4061                     CLOSE c_app_info ;
4062                     RAISE OKC_API.G_EXCEPTION_ERROR;
4063                     END if ;
4064                   CLOSE c_app_info;
4065 
4066                   -- get Vendor site Id
4067                   OPEN c_vendor_info (l_sub_rec.subsidy_line_id);
4068                   FETCH c_vendor_info INTO l_tapv_rec.vendor_id, l_tapv_rec.IPVS_ID;
4069                     IF(c_vendor_info%NOTFOUND) THEN
4070                       -- Change Message
4071                       Okc_Api.set_message(G_APP_NAME, 'OKL_NO_VENDOR_SITE');
4072                       x_return_status := OKC_API.G_RET_STS_ERROR ;
4073                       CLOSE c_vendor_info ;
4074                       RAISE OKC_API.G_EXCEPTION_ERROR;
4075                     END if ;
4076                   CLOSE c_vendor_info;
4077 
4078                   l_tapv_rec.sfwt_flag := 'N' ;
4079                   l_tapv_rec.TRX_STATUS_CODE  := 'ENTERED' ;
4080                   l_tapv_rec.currency_code := l_sub_rec.currency_code;
4081 
4082                   l_tapv_rec.CURRENCY_CONVERSION_TYPE := l_currency_conversion_type;
4083                   l_tapv_rec.CURRENCY_CONVERSION_RATE := l_currency_conversion_rate;
4084                   l_tapv_rec.CURRENCY_CONVERSION_DATE := l_currency_conversion_date;
4085                   l_tapv_rec.SET_OF_BOOKS_ID := l_sob_id;
4086 
4087                   -- GET TRANSACTION TYPE
4088                   OPEN c_trx_type ('Disbursement', 'US');
4089                   FETCH c_trx_type INTO l_trx_type_ID;
4090                     IF(c_trx_type%NOTFOUND)
4091                     THEN
4092                       Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
4093                                           G_COL_NAME_TOKEN,'Disbursement');
4094                       x_return_status := OKC_API.G_RET_STS_ERROR ;
4095                       CLOSE c_trx_type ;
4096                       RAISE OKC_API.G_EXCEPTION_ERROR;
4097                     END if ;
4098                   CLOSE c_trx_type ;
4099                   l_tapv_rec.TRY_ID :=  l_trx_type_ID;
4100                   l_tapv_rec.AMOUNT :=  lx_subsidy_amount;
4101                   l_tapv_rec.invoice_type := 'STANDARD';
4102                   IF (is_debug_statement_on) THEN
4103                     OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Getting invoice number');
4104                   END IF;
4105                   l_tapv_rec.Invoice_number := get_invoice_number(
4106                                                         p_app_id => l_app_id,
4107                                                         p_cat_code =>l_document_category,
4108                                                         p_sob_id =>l_tapv_rec.SET_OF_BOOKS_ID,
4109                                                         p_met_code => 'A',
4110                                                         p_trx_date => SYSDATE,
4111                                                         p_dbseqnum => lx_dbseqnm,
4112                                                         p_dbseqid => lx_dbseqid);
4113 
4114                   l_tapv_rec.WORKFLOW_YN := 'N';
4115                   l_tapv_rec.CONSOLIDATE_YN  := 'N';
4116                   l_tapv_rec.WAIT_VENDOR_INVOICE_YN := 'N';
4117 
4118                   -- setting all three dates to termination date instead of SYSDATE
4119                   l_tapv_rec.DATE_INVOICED := l_quote_accpt_date;
4120                   l_tapv_rec.DATE_GL :=  l_quote_accpt_date;
4121                   l_tapv_rec.DATE_ENTERED := l_quote_accpt_date;
4122                   l_tapv_rec.object_version_number := 1;
4123 --20-NOV-2006 ANSETHUR R12B - LEGAL ENTITY UPTAKE PROJECT
4124                   l_tapv_rec.legal_entity_id :=OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_term_rec.p_contract_id);
4125 
4126                   SELECT DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_REQUEST_ID),
4127                          DECODE(FND_GLOBAL.PROG_APPL_ID,-1,NULL,FND_GLOBAL.PROG_APPL_ID),
4128                          DECODE(FND_GLOBAL.CONC_PROGRAM_ID,-1,NULL,FND_GLOBAL.CONC_PROGRAM_ID),
4129                          DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,SYSDATE),
4130                          mo_global.get_current_org_id() INTO l_tapv_rec.REQUEST_ID,
4131                                                           l_tapv_rec.PROGRAM_APPLICATION_ID,
4132                                                           l_tapv_rec.PROGRAM_ID,
4133                                                           l_tapv_rec.PROGRAM_UPDATE_DATE,
4134                                                           l_tapv_rec.ORG_ID
4135                   FROM dual;
4136 
4137 
4138                   ----------------------------------------------------
4139                   -- Populate internal AP invoice Lines Record
4140                   ----------------------------------------------------
4141 
4142                    /* sosharma 17-01-2007,added assignment of khr_id to l_tapv_rec
4143                    Start Changes
4144                    */
4145                   l_tplv_rec.KHR_ID :=  p_term_rec.p_contract_id;
4146                   /* End changes */
4147                   l_tplv_rec.amount := l_tapv_rec.amount;
4148                   l_tplv_rec.sty_id := l_sub_sty_id;
4149                   l_tplv_rec.inv_distr_line_code := 'MANUAL';
4150                   l_tplv_rec.line_number := 1;
4151                   l_tplv_rec.org_id := l_tapv_rec.org_id;
4152                   l_tplv_rec.disbursement_basis_code := 'BILL_DATE';
4153                   /* sosharma 16-01-2007
4154                   Assigned the record l_tplv_rec to table
4155                   Start Changes */
4156                   l_tplv_tbl(0):=l_tplv_rec;
4157                   /* sosharma
4158                   End changes
4159                   */
4160                   /*sosharma 12-jan-07
4161                    Build:R12
4162                    Added the call to disbursement procedure ,which is having the consolidated functionality of creating AP lines,header and AP accounting
4163                    */
4164                    IF (is_debug_statement_on) THEN
4165                      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_CREATE_DISB_TRANS_PVT.create_disb_trx');
4166                    END IF;
4167                    OKL_CREATE_DISB_TRANS_PVT.create_disb_trx(p_api_version   =>    l_api_version
4168                             ,p_init_msg_list      =>      OKL_API.G_FALSE
4169                             ,x_return_status      =>      l_return_status
4170                             ,x_msg_count          =>      x_msg_count
4171                             ,x_msg_data           =>      x_msg_data
4172                             ,p_tapv_rec           =>      l_tapv_rec
4173                             ,p_tplv_tbl           =>      l_tplv_tbl
4174                             ,x_tapv_rec           =>      x_tapv_rec
4175                             ,x_tplv_tbl           =>      x_tplv_tbl
4176                             );
4177                    IF (is_debug_statement_on) THEN
4178                      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_CREATE_DISB_TRANS_PVT.create_disb_trx , return status : ' || l_return_status);
4179                    END IF;
4180                          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4181                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4182                          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4183                            RAISE OKL_API.G_EXCEPTION_ERROR;
4184                          END IF;
4185 
4186       x_tplv_rec := x_tplv_tbl(x_tplv_tbl.FIRST);
4187 
4188                    /*End Changes sosharma */
4189 
4190                  END IF; -- l_release_basis = 'ACCELERATE'
4191                END IF ; -- Accounting method
4192             ELSE -- quote type condition for TER_RELEASE_WO_PURCHASE
4193             --Bug# 3999921: pagarg +++ T and A +++++++ End ++++++++++
4194             --Current processing for quote type other than TER_RELEASE_WO_PURCHASE
4195               -- Fetch stream type id for subsidy and accrual streams
4196               l_sub_sty_id := l_sub_rec.stream_type_id; -- ***SMODUGA  Subsidy stream type for invoice generation***
4197 
4198               --SECHAWLA 29-DEC-05 4911502 : commenetd out
4199               --l_sty_id := l_accrual_sty_id;  --RMUNJULU *** Changed to pass accrual_stream_type_id -- rmunjulu 4399352
4200 
4201               l_sob_id := okl_accounting_util.get_set_of_books_id; --RMUNJULU *** Added code to get set of books id
4202 
4203               --check accounting method
4204               IF l_sub_rec.accounting_method_code = 'NET' THEN --[3]
4205 
4206                  null;   -- close sub line
4207 
4208               ELSIF l_sub_rec.accounting_method_code = 'AMORTIZE'THEN
4209 
4210                    IF (is_debug_statement_on) THEN
4211                      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_STREAMS_UTIL.get_dependent_stream_type');
4212                    END IF;
4213 					 -- SECHAWLA 29-DEC-05 4911502 : added begin
4214                      OKL_STREAMS_UTIL.get_dependent_stream_type(
4215                       p_khr_id                => p_term_rec.p_contract_id,
4216                       p_primary_sty_id        => l_sub_rec.stream_type_id,
4217                       p_dependent_sty_purpose => 'SUBSIDY_INCOME', -- ***** confirm
4218                       x_return_status         => l_return_status,
4219                       x_dependent_sty_id      => l_accrual_sty_id);
4220                    IF (is_debug_statement_on) THEN
4221                      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
4222                    END IF;
4223 
4224                      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4225                          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4226                      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4227                          RAISE OKL_API.G_EXCEPTION_ERROR;
4228                      END IF;
4229 
4230                      l_sty_id := l_accrual_sty_id; --l_sub_rec.accrual_stream_type_id;  --RMUNJULU *** Changed to pass accrual_stream_type_id
4231                     -- SECHAWLA 29-DEC-05 4911502 : added end
4232 
4233 
4234                     --Accelerate Income Recognization
4235                     -- get contract_end_date
4236                     OPEN c_contract_eff_to(p_term_rec.p_contract_id);
4237                     FETCH c_contract_eff_to INTO l_contract_end_date ;
4238                     CLOSE c_contract_eff_to ;
4239 
4240                      -- **SMODUGA added
4241                      -- get  currency conversion information
4242                     OPEN c_currency_conversion(p_term_rec.p_contract_id);
4243                     FETCH c_currency_conversion INTO l_currency_conversion_type,
4244                                                      l_currency_conversion_rate,
4245                                                      l_currency_conversion_date;
4246                     CLOSE c_currency_conversion ;
4247 
4248                     -- akrangan for bug 5669097 start
4249  	            IF l_acceleration_tbl.COUNT>0 THEN
4250  	              FOR c IN l_acceleration_tbl.first .. l_acceleration_tbl.last
4251  	              LOOP
4252  	                IF (l_acceleration_tbl(c).khr_id = p_term_rec.p_contract_id
4253 			    AND l_acceleration_tbl(c).sty_id =l_sty_id
4254 			    AND l_acceleration_tbl(c).kle_id =l_asset_tbl(i).p_kle_id )
4255 			THEN
4256  	                  v_flag :='Y';
4257  	                  EXIT;
4258  	                ELSE
4259  	                  v_flag :='N';
4260  	                END IF;
4261  	              END LOOP;
4262  	            END IF;
4263  	            l_acceleration_tbl(indx).khr_id :=p_term_rec.p_contract_id;
4264  	            l_acceleration_tbl(indx).sty_id :=l_sty_id;
4265  	            l_acceleration_tbl(indx).kle_id :=l_asset_tbl(i).p_kle_id ;
4266  	            indx := indx + 1;
4267  	            -- akrangan for bug 5669097 End
4268                     OPEN get_accel_till_csr(p_term_rec.p_contract_id,l_sty_id);
4269                     FETCH get_accel_till_csr INTO l_acceleration_rec.accelerate_till_date;
4270                     CLOSE get_accel_till_csr ;
4271 
4272                     -- **END SMODUGA added
4273 	            --akrangan Bug 5526955 fix start
4274  	            --Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup check accruals till quote eff date OR previous month last date
4275  	            OPEN  check_accrual_previous_csr;
4276  	            FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
4277  	            CLOSE check_accrual_previous_csr;
4278                     --Bug 5852720 by akrangan starts
4279  	            -- fix for bug -- 5610960 -- added below condition
4280  	             -- If quote exists then cancelation date is quote eff from date else sysdate
4281  	                 IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists,'N') = 'Y' THEN
4282  	             --Bug 5852720 by akrangan  ends
4283  	            IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
4284                       l_acceleration_rec.accelerate_from_date := TRUNC(LAST_DAY(l_quote_eff_date) + 1);
4285  	            ELSE
4286                       l_acceleration_rec.accelerate_from_date := LAST_DAY(TRUNC(l_quote_eff_date, 'MONTH')-1)+1;
4287  	            END IF;
4288  	            --akrangan Bug 5526955 fix end
4289                     --Bug 5852720 by srsreeni starts
4290  	            ELSE
4291  	              l_acceleration_rec.accelerate_from_date := TRUNC(LAST_DAY(l_quote_eff_date) + 1);
4292  	            END IF;
4293  	            --Bug 5852720 by srsreeni ends
4294                     --pre populate the accraual rec
4295                     l_acceleration_rec.khr_id           := p_term_rec.p_contract_id; -- Id of the contract whose stream type needs to be accelerated
4296                     l_acceleration_rec.sty_id           := l_sty_id;-- Id of the stream type which needs to be accelerated
4297                     l_acceleration_rec.acceleration_date := l_valid_gl_date; -- Date of acceleration (Transaction date) - -rmunjulu EDAT
4298 
4299                     l_acceleration_rec.kle_id := l_asset_tbl(i).p_kle_id; --Smoduga added for handling partial terminations.
4300                     -- Termination quote number
4301                     OPEN c_term_quote(p_term_rec.p_quote_id);
4302                     FETCH c_term_quote INTO l_quote_number;
4303                     IF c_term_quote%FOUND THEN
4304                     l_acceleration_rec.description := 'Accrual acceleration for Asset number '
4305                                                         ||l_asset_tbl(i).p_asset_name||
4306                                                         'and Contract number '||p_term_rec.p_contract_number ||
4307                                                         'upon acceptance of ' || l_quote_number;
4308                     ELSE
4309                      l_acceleration_rec.description := 'Accrual acceleration for Asset number '
4310                                                         ||l_asset_tbl(i).p_asset_name||
4311                                                         'and Contract number '||p_term_rec.p_contract_number;
4312                     END IF;
4313                     CLOSE c_term_quote;
4314 
4315                     l_acceleration_rec.accrual_rule_yn := 'N';
4316 
4317                     -- check for recourse
4318                     IF l_sub_rec.recourse_yn <> 'Y' THEN --[7]
4319 	              -- akrangan for bug 5669097 start
4320  	              IF  v_flag ='N' THEN
4321  	              -- akrangan for bug 5669097 End
4322                        -- accelerate income recognition
4323                         IF (is_debug_statement_on) THEN
4324                           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals');
4325                         END IF;
4326                          OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
4327                                                     p_api_version       => p_api_version,
4328                                                     p_init_msg_list     => OKL_API.G_FALSE,
4329                                                     x_return_status     => l_return_status,
4330                                                     x_msg_count         => l_msg_count,
4331                                                     x_msg_data          => l_msg_data,
4332                                                     p_acceleration_rec  => l_acceleration_rec,
4333                                                     x_trx_number  => l_trx_number);
4334                         IF (is_debug_statement_on) THEN
4335                           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
4336                         END IF;
4337 
4338                          IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4339 
4340                            OKL_API.set_message(
4341                              p_app_name      => G_APP_NAME,
4342                              p_msg_name      => 'OKL_AM_SUBSIDY_INC_RECOG',
4343                              p_token1        => 'ASSET_NUMBER',
4344                              p_token1_value  => l_asset_tbl(i).p_asset_name,
4345                              p_token2        => 'CONTRACT_NUMBER',
4346                              p_token2_value  => p_term_rec.p_contract_number);
4347 
4348                          END IF;
4349 
4350                          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4351                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4352                          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4353                            RAISE OKL_API.G_EXCEPTION_ERROR;
4354                          END IF;
4355 		      -- akrangan for bug 5669097 start
4356                     -- Start MGAAP 7263041
4357                     OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4358                     OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
4359                     p_khr_id                => p_term_rec.p_contract_id,
4360                     p_primary_sty_id        => l_sub_rec.stream_type_id,
4361                     p_dependent_sty_purpose => 'SUBSIDY_INCOME',
4362                     x_return_status         => l_return_status,
4363                     x_dependent_sty_id      => l_accrual_sty_id_rep);
4364                     IF (is_debug_statement_on) THEN
4365                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
4366                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_accrual_sty_id_rep : ' || l_accrual_sty_id_rep);
4367                     END IF;
4368 
4369               	    IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
4370                       l_acceleration_rec.sty_id := l_accrual_sty_id_rep;
4371                       l_acceleration_rec.trx_number := l_trx_number;
4372 
4373                       OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
4374                                                     p_api_version       => p_api_version,
4375                                                     p_init_msg_list     => OKL_API.G_FALSE,
4376                                                     x_return_status     => l_return_status,
4377                                                     x_msg_count         => l_msg_count,
4378                                                     x_msg_data          => l_msg_data,
4379                                                     p_acceleration_rec  => l_acceleration_rec,
4380                                                     p_representation_type  => 'SECONDARY',
4381                                                     x_trx_number  => l_trx_number);
4382                       OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4383 
4384                       IF (is_debug_statement_on) THEN
4385                         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
4386                       END IF;
4387 
4388                       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4389                          OKL_API.set_message(
4390                              p_app_name      => G_APP_NAME,
4391                              p_msg_name      => 'OKL_AM_SUBSIDY_INC_RECOG',
4392                              p_token1        => 'ASSET_NUMBER',
4393                              p_token1_value  => l_asset_tbl(i).p_asset_name,
4394                              p_token2        => 'CONTRACT_NUMBER',
4395                              p_token2_value  => p_term_rec.p_contract_number);
4396                       END IF;
4397 
4398                       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4399                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4400                       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4401                         RAISE OKL_API.G_EXCEPTION_ERROR;
4402                       END IF;
4403 
4404               	    END IF;
4405                     -- end MGAAP 7263041
4406  	               END IF;
4407  	              -- akrangan for bug 5669097 End
4408 
4409                     ELSE -- Recourse
4410 
4411                        -- calculation basis FULL
4412                        IF l_sub_rec.TERMINATION_REFUND_BASIS = 'ALL' THEN  --[9]
4413 
4414                           -- AMORTIZE = Y ,RECOURSE =Y ,CALC basis = FULL,Billing Method = Invoice
4415                           IF l_sub_rec.receipt_method_code = 'BILL'
4416                           OR l_sub_rec.receipt_method_code = 'FUND' THEN  --[10]
4417 
4418                              -- RMUNJULU 3280473 Get the subsidy subline amount which should be refunded
4419                              lx_subsidy_amount := l_sub_rec.subsidy_amount;
4420 
4421                           END IF;   --[10]
4422                           -- adagur for bug 5669097 start
4423  	                  IF    v_flag ='N' THEN
4424  	                  -- adagur for bug 5669097 End
4425                            IF (is_debug_statement_on) THEN
4426                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.ACCELERATE_ACCRUALS');
4427                            END IF;
4428                           -- accelerate income recognition
4429                             OKL_GENERATE_ACCRUALS_PVT.ACCELERATE_ACCRUALS(
4430                                                     p_api_version       => p_api_version,
4431                                                     p_init_msg_list     => OKL_API.G_FALSE,
4432                                                     x_return_status     => l_return_status,
4433                                                     x_msg_count         => l_msg_count,
4434                                                     x_msg_data          => l_msg_data,
4435                                                     p_acceleration_rec  => l_acceleration_rec,
4436                                                     x_trx_number  => l_trx_number);
4437                            IF (is_debug_statement_on) THEN
4438                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.ACCELERATE_ACCRUALS , return status : ' || l_return_status);
4439                            END IF;
4440 
4441                             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4442 
4443                            	OKL_API.set_message(
4444                          		p_app_name      => G_APP_NAME,
4445                          		p_msg_name      => 'OKL_AM_SUBSIDY_INC_RECOG',
4446                          		p_token1        => 'ASSET_NUMBER',
4447                          		p_token1_value  => l_asset_tbl(i).p_asset_name,
4448                          		p_token2        => 'CONTRACT_NUMBER',
4449                          		p_token2_value  => p_term_rec.p_contract_number);
4450 
4451                             END IF;
4452 
4453                             IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4454                               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4455                             ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4456                               RAISE OKL_API.G_EXCEPTION_ERROR;
4457                             END IF;
4458                           -- akrangan for bug 5669097 start
4459                     -- Start MGAAP 7263041
4460                     OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4461                     OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
4462                     p_khr_id                => p_term_rec.p_contract_id,
4463                     p_primary_sty_id        => l_sub_rec.stream_type_id,
4464                     p_dependent_sty_purpose => 'SUBSIDY_INCOME',
4465                     x_return_status         => l_return_status,
4466                     x_dependent_sty_id      => l_accrual_sty_id_rep);
4467                     IF (is_debug_statement_on) THEN
4468                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
4469                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_accrual_sty_id_rep : ' || l_accrual_sty_id_rep);
4470                     END IF;
4471 
4472               	    IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
4473                       l_acceleration_rec.sty_id := l_accrual_sty_id_rep;
4474                       l_acceleration_rec.trx_number := l_trx_number;
4475 
4476                       OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
4477                                                     p_api_version       => p_api_version,
4478                                                     p_init_msg_list     => OKL_API.G_FALSE,
4479                                                     x_return_status     => l_return_status,
4480                                                     x_msg_count         => l_msg_count,
4481                                                     x_msg_data          => l_msg_data,
4482                                                     p_acceleration_rec  => l_acceleration_rec,
4483                                                     p_representation_type  => 'SECONDARY',
4484                                                     x_trx_number  => l_trx_number);
4485                       OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4486 
4487                       IF (is_debug_statement_on) THEN
4488                         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
4489                       END IF;
4490 
4491                       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4492                          OKL_API.set_message(
4493                              p_app_name      => G_APP_NAME,
4494                              p_msg_name      => 'OKL_AM_SUBSIDY_INC_RECOG',
4495                              p_token1        => 'ASSET_NUMBER',
4496                              p_token1_value  => l_asset_tbl(i).p_asset_name,
4497                              p_token2        => 'CONTRACT_NUMBER',
4498                              p_token2_value  => p_term_rec.p_contract_number);
4499                       END IF;
4500 
4501                       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4502                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4503                       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4504                         RAISE OKL_API.G_EXCEPTION_ERROR;
4505                       END IF;
4506 
4507               	    END IF;
4508                     -- end MGAAP 7263041
4509  	                  END IF;
4510  	                  -- akrangan for bug 5669097 End
4511                       ELSIF l_sub_rec.TERMINATION_REFUND_BASIS = 'FORMULA' THEN
4512 
4513                          -- get Formula name
4514                          OPEN c_formula(l_sub_rec.refund_formula_id);
4515                          FETCH c_formula INTO l_formula_name ;
4516                          CLOSE c_formula ;
4517 
4518                          IF l_sub_rec.receipt_method_code = 'BILL'
4519                          OR l_sub_rec.receipt_method_code = 'FUND' THEN --A/P invoice --[13]
4520 
4521                            IF (is_debug_statement_on) THEN
4522                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_EXECUTE_FORMULA_PUB.execute');
4523                            END IF;
4524                            -- get subsidy amount
4525                            OKL_EXECUTE_FORMULA_PUB.execute(
4526                                              p_api_version       => p_api_version,
4527                                              p_init_msg_list     => OKL_API.G_FALSE,
4528                                              x_return_status     => l_return_status,
4529                                              x_msg_count         => l_msg_count,
4530                                              x_msg_data          => l_msg_data,
4531                                              p_formula_name      => l_formula_name,
4532                                              p_contract_id       => p_term_rec.p_contract_id,
4533                                              p_line_id           => l_asset_tbl(i).p_kle_id,
4534                                              p_additional_parameters => okl_execute_formula_pub.G_ADDITIONAL_PARAMETERS_NULL,
4535                                              x_value             =>lx_subsidy_amount);
4536                            IF (is_debug_statement_on) THEN
4537                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_EXECUTE_FORMULA_PUB.execute , return status : ' || l_return_status);
4538                            END IF;
4539 
4540                            IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4541                              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4542                            ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4543                              RAISE OKL_API.G_EXCEPTION_ERROR;
4544                            END IF;
4545                          END IF; -- [13]
4546                       END IF; --[9]
4547                          -------------------------------------------------
4548                          --Gathering data for creating Invoice
4549                          -------------------------------------------------
4550                          -- Get Application Info
4551                             OPEN c_app_info ;
4552                                 FETCH c_app_info INTO l_app_id;
4553                                 IF(c_app_info%NOTFOUND) THEN
4554                                 -- Change Message
4555                                 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
4556                                                     G_COL_NAME_TOKEN,'Billing');
4557                                 x_return_status := OKC_API.G_RET_STS_ERROR ;
4558                             CLOSE c_app_info ;
4559                                 RAISE OKC_API.G_EXCEPTION_ERROR;
4560                                 END if ;
4561 
4562                             CLOSE c_app_info;
4563 
4564                             -- **SMODUGA added for AP  invoice creation
4565                             --l_tapv_rec.vendor_id := l_sub_rec.vendor_id;
4566                             -- ** END SMODUGA added for AP  invoice creation
4567 
4568                             -- get Vendor site Id
4569                             OPEN c_vendor_info (l_sub_rec.subsidy_line_id);
4570                             FETCH c_vendor_info INTO l_tapv_rec.vendor_id,l_tapv_rec.IPVS_ID;
4571                                 IF(c_vendor_info%NOTFOUND) THEN
4572                                 -- Change Message
4573                                 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_VENDOR_SITE');
4574                                 x_return_status := OKC_API.G_RET_STS_ERROR ;
4575                             CLOSE c_vendor_info ;
4576                                 RAISE OKC_API.G_EXCEPTION_ERROR;
4577                                 END if ;
4578 
4579                             CLOSE c_vendor_info;
4580 
4581                             l_tapv_rec.sfwt_flag := 'N' ;
4582                             l_tapv_rec.TRX_STATUS_CODE  := 'ENTERED' ;
4583                             l_tapv_rec.currency_code := l_sub_rec.currency_code;
4584 
4585                             -- **SMODUGA added for creation of  AP invoice
4586                             l_tapv_rec.CURRENCY_CONVERSION_TYPE := l_currency_conversion_type;
4587                             l_tapv_rec.CURRENCY_CONVERSION_RATE := l_currency_conversion_rate;
4588                             l_tapv_rec.CURRENCY_CONVERSION_DATE := l_currency_conversion_date;
4589                             -- ** END SMODUGA added for AP  invoice creation
4590 
4591                             l_tapv_rec.SET_OF_BOOKS_ID := l_sob_id; --RMUNJULU *** Set the set_of_books_id
4592 
4593                              -- GET TRANSACTION TYPE
4594                              OPEN c_trx_type ('Disbursement', 'US');
4595                              FETCH c_trx_type INTO l_trx_type_ID;
4596                                 IF(c_trx_type%NOTFOUND) THEN
4597                                     Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
4598                                                         G_COL_NAME_TOKEN,'Disbursement');
4599                                                         x_return_status := OKC_API.G_RET_STS_ERROR ;
4600                             CLOSE c_trx_type ;
4601                                 RAISE OKC_API.G_EXCEPTION_ERROR;
4602                                 END if ;
4603                             CLOSE c_trx_type ;
4604 
4605                             l_tapv_rec.TRY_ID :=  l_trx_type_ID;
4606                             l_tapv_rec.AMOUNT :=  lx_subsidy_amount;
4607                             --20-NOV-2006 ANSETHUR R12B - LEGAL ENTITY UPTAKE PROJECT
4608                             l_tapv_rec.legal_entity_id :=OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_term_rec.p_contract_id);
4609                             --** SMODUGA Added for invoice generation
4610                             l_tapv_rec.invoice_type           := 'STANDARD';
4611                             --** END SMODUGA Added for invoice generation
4612                            IF (is_debug_statement_on) THEN
4613                              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Getting invoice number');
4614                            END IF;
4615 
4616                             l_tapv_rec.Invoice_number := get_invoice_number(
4617                                                         p_app_id => l_app_id,
4618                                                         p_cat_code =>l_document_category,
4619                                                         p_sob_id =>l_tapv_rec.SET_OF_BOOKS_ID,
4620                                                         p_met_code => 'A',
4621                                                         p_trx_date => SYSDATE,
4622                                                         p_dbseqnum => lx_dbseqnm,
4623                                                         p_dbseqid => lx_dbseqid
4624                                                         );
4625 
4626 
4627                             l_tapv_rec.WORKFLOW_YN := 'N';
4628                             l_tapv_rec.CONSOLIDATE_YN  := 'N';
4629                             l_tapv_rec.WAIT_VENDOR_INVOICE_YN := 'N';
4630 
4631                             -- SMODUGA
4632                             -- setting all three dates to termination date
4633                             -- instead of SYSDATE
4634 
4635                             l_tapv_rec.DATE_INVOICED := l_quote_accpt_date; -- rmunjulu EDAT
4636                             l_tapv_rec.DATE_GL :=  l_quote_accpt_date; -- rmunjulu EDAT
4637                             l_tapv_rec.DATE_ENTERED := l_quote_accpt_date; -- rmunjulu EDAT
4638 
4639                             -- END SMODUGA
4640 
4641                             l_tapv_rec.object_version_number := 1;
4642 
4643                             SELECT DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_REQUEST_ID),
4644                                            DECODE(FND_GLOBAL.PROG_APPL_ID,-1,NULL,FND_GLOBAL.PROG_APPL_ID),
4645                                            DECODE(FND_GLOBAL.CONC_PROGRAM_ID,-1,NULL,FND_GLOBAL.CONC_PROGRAM_ID),
4646                                            DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,SYSDATE),
4647                                            mo_global.get_current_org_id()  INTO l_tapv_rec.REQUEST_ID,
4648                                                                        l_tapv_rec.PROGRAM_APPLICATION_ID,
4649                                                                        l_tapv_rec.PROGRAM_ID,
4650                                                                        l_tapv_rec.PROGRAM_UPDATE_DATE,
4651                                                                        l_tapv_rec.ORG_ID FROM dual;
4652 
4653                              --**SMODUGA Added for invoice lines ** --
4654                              ----------------------------------------------------
4655                              -- Populate internal AP invoice Lines Record
4656                              ------------------------------------------------------
4657                              /* sosharma 17-01-2007,added assignment of khr_id to l_tapv_rec
4658                              Start Changes
4659                              */
4660                              l_tplv_rec.KHR_ID :=  p_term_rec.p_contract_id;
4661                              /* End Changes */
4662                              l_tplv_rec.amount  :=  l_tapv_rec.amount;
4663                              l_tplv_rec.sty_id  :=  l_sub_sty_id; --smoduga changed to subsidy stream type
4664                              l_tplv_rec.inv_distr_line_code :=  'MANUAL';
4665                              l_tplv_rec.line_number  :=  1;
4666                              l_tplv_rec.org_id  :=  l_tapv_rec.org_id;
4667                              l_tplv_rec.disbursement_basis_code :=  'BILL_DATE';
4668 
4669                                 /*sosharma 12-jan-07
4670                                   Build:R12
4671                                   Added the call to disbursement procedure ,which is having the consolidated functionality of creating AP lines,header and AP accounting
4672                                   */
4673                                   l_tplv_tbl(0):=l_tplv_rec;
4674                                   IF (is_debug_statement_on) THEN
4675                                     OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_CREATE_DISB_TRANS_PVT.create_disb_trx');
4676                                   END IF;
4677                                   OKL_CREATE_DISB_TRANS_PVT.create_disb_trx(p_api_version   =>    l_api_version
4678                                            ,p_init_msg_list     =>       OKL_API.G_FALSE
4679                                            ,x_return_status     =>       l_return_status
4680                                            ,x_msg_count         =>       x_msg_count
4681                                            ,x_msg_data          =>       x_msg_data
4682                                            ,p_tapv_rec          =>       l_tapv_rec
4683                                            ,p_tplv_tbl          =>       l_tplv_tbl
4684                                            ,x_tapv_rec          =>       x_tapv_rec
4685                                            ,x_tplv_tbl          =>       x_tplv_tbl
4686                                            );
4687                                   IF (is_debug_statement_on) THEN
4688                                     OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_CREATE_DISB_TRANS_PVT.create_disb_trx , return status : ' || l_return_status);
4689                                   END IF;
4690                                         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4691                                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4692                                         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4693                                           RAISE OKL_API.G_EXCEPTION_ERROR;
4694                                         END IF;
4695 
4696                      x_tplv_rec := x_tplv_tbl(x_tplv_tbl.FIRST);
4697 
4698                                   /*End Changes sosharma */
4699 
4700 
4701                 END IF; -- recourse --[7]
4702             END IF ; -- Accounting method  --[3]
4703                  -- close sub line
4704           END IF; -- quote type checking for TER_RELEASE_WO_PURCHASE
4705         END LOOP; -- subsidies --[L3]
4706     END LOOP; -- Main --[L2]
4707     END IF;
4708 
4709     -- end the transaction
4710     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
4711     IF (is_debug_procedure_on) THEN
4712       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
4713     END IF;
4714   EXCEPTION
4715     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4716       IF (is_debug_exception_on) THEN
4717         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
4718       END IF;
4719 
4720       x_return_status := OKL_API.HANDLE_EXCEPTIONS
4721       (
4722         l_api_name,
4723         G_PKG_NAME,
4724         'OKL_API.G_RET_STS_ERROR',
4725         x_msg_count,
4726         x_msg_data,
4727         '_PVT'
4728       );
4729     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4730       IF (is_debug_exception_on) THEN
4731         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
4732       END IF;
4733 
4734       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
4735       (
4736         l_api_name,
4737         G_PKG_NAME,
4738         'OKL_API.G_RET_STS_UNEXP_ERROR',
4739         x_msg_count,
4740         x_msg_data,
4741         '_PVT'
4742       );
4743     WHEN OTHERS THEN
4744       IF (is_debug_exception_on) THEN
4745           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4746 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
4747       END IF;
4748 
4749       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
4750       (
4751         l_api_name,
4752         G_PKG_NAME,
4753         'OTHERS',
4754         x_msg_count,
4755         x_msg_data,
4756         '_PVT'
4757       );
4758 
4759  END process_discount_subsidy;
4760 
4761   -- Start of comments
4762   -- Procedure Name	: process_adjustments
4763   -- Desciption     : method to handle accrual adjustments
4764   -- Business Rules	:
4765   -- Parameters	    :
4766   -- Version	    : 1.0
4767   -- History        : 08 Nov 2004 PAGARG Bug# 3999921 (T and A)created
4768   --                : 14-Dec-04 rmunjulu TNA Modified to set return status properly and other changes
4769   --                : 14-Dec-04 rmunjulu TNA Additional changes as called API signature has changed
4770   --                : 14-Dec-04 rmunjulu TNA Close cursors in exception block
4771   --                : 20-Dec-04 rmunjulu TNA Added p_tcnv_rec since trn_id is needed
4772   --                : 20-Dec-04 rmunjulu TNA Added condition to check if advance_rent present
4773   --                : 10-Feb-05 PAGARG Bug 4177025 Create accounting distributions
4774   --                : after creating invoice lines
4775   --                : 21-Feb-05 rmunjulu Bug 4177025 Handle Return status properly
4776   -- End of comments
4777   PROCEDURE process_adjustments(
4778            p_api_version                 IN  NUMBER,
4779            p_init_msg_list               IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
4780            x_return_status               OUT NOCOPY VARCHAR2,
4781            x_msg_count                   OUT NOCOPY NUMBER,
4782            x_msg_data                    OUT NOCOPY VARCHAR2,
4783            p_term_rec                    IN  term_rec_type,
4784            p_tcnv_rec                    IN  tcnv_rec_type, -- rmunjulu TNA Added since trn_id is needed
4785            p_call_origin                 IN  VARCHAR2 DEFAULT NULL,
4786            p_termination_date            IN  DATE) IS
4787 
4788     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'process_adjustments';
4789     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4790     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4791     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4792     l_api_name         CONSTANT VARCHAR2(30) := 'process_adjustments';
4793     l_api_version      CONSTANT NUMBER := 1;
4794     l_return_status    VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS; -- rmunjulu TNA Defaulted
4795     l_msg_count        NUMBER;
4796     l_msg_data         VARCHAR2(2000);
4797     lx_asset_tbl       OKL_AM_LEASE_TRMNT_PVT.klev_tbl_type;
4798     l_taiv_rec         taiv_rec_type;
4799     lx_taiv_rec        taiv_rec_type;
4800     l_tilv_rec         tilv_rec_type;
4801     lx_tilv_rec        tilv_rec_type;
4802     l_cm_try_id        NUMBER;
4803     l_counter          NUMBER;
4804     l_asset_ref_amt    NUMBER;
4805 
4806     l_quote_accpt_date DATE;
4807     l_quote_eff_date   DATE;
4808 
4809     CURSOR l_qte_dtls_csr (p_qte_id IN NUMBER) IS
4810       SELECT qte.currency_code currency_code,
4811              qte.currency_conversion_type currency_conversion_type,
4812              qte.currency_conversion_rate currency_conversion_rate,
4813              qte.currency_conversion_date currency_conversion_date
4814       FROM okl_trx_quotes_b qte
4815       WHERE qte.id = p_qte_id;
4816 
4817     -- Cursor to obtain refund asset remaining amount
4818     CURSOR l_ref_asset_amt_csr(p_khr_id IN NUMBER, p_kle_id IN NUMBER, p_date IN DATE) IS
4819       SELECT stm.sty_id,
4820              SUM(ste.amount) amount
4821       FROM okl_streams       stm
4822           ,okl_strm_type_b   sty
4823           ,okc_k_lines_b     kle
4824           ,okc_statuses_b    kls
4825           ,okl_strm_elements ste
4826       WHERE stm.khr_id              = p_khr_id
4827         AND stm.active_yn           = 'Y'
4828         AND stm.say_code            = 'CURR'
4829         AND ste.stm_id              = stm.id
4830         AND sty.id                  = stm.sty_id
4831         AND sty.billable_yn         = 'Y'
4832         AND kle.id                  = stm.kle_id
4833         AND kls.code                = kle.sts_code
4834         AND kls.ste_code            = 'ACTIVE'
4835         AND ste.date_billed         IS NULL
4836         AND trunc(ste.stream_element_date) > trunc(p_date)
4837         AND kle.id                  = p_kle_id
4838         AND STY.STREAM_TYPE_PURPOSE = 'ADVANCE_RENT'
4839       GROUP BY stm.sty_id;
4840 
4841     -- rmunjulu TNA Get the FEE and SERVICE Top Lines
4842     CURSOR p_chr_lines_csr(p_chr_id IN NUMBER) IS
4843      SELECT CLE.ID
4844      FROM   OKC_k_LINES_B CLE,
4845             OKC_LINE_STYLES_B LTY
4846      WHERE  CLE.LSE_ID = LTY.ID
4847        AND  LTY.LTY_CODE IN ('FEE', 'SOLD_SERVICE') -- rmunjulu TNA Give the proper Alias
4848        AND  CLE.CHR_ID = p_chr_id; -- rmunjulu TNA Give the proper Alias
4849 
4850     l_sty_id              NUMBER;
4851     l_line_id_tbl         OKL_ACCRUAL_SEC_PVT.p_line_id_tbl_type;
4852     lx_accrual_adjustment_tbl OKL_ACCRUAL_SEC_PVT.p_accrual_adjustment_tbl_type;
4853     lx_trx_number         VARCHAR2(30) := null; -- MGAAP 7263041
4854     l_accrual_rec         OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type; -- rmunjulu TNA additional changes -- Changed
4855     l_stream_tbl          OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
4856     l_valid_gl_date       DATE;
4857     l_trmnt_try_id        NUMBER;
4858 
4859     -- rmunjulu TNA declared
4860     l_empty_taiv_rec    taiv_rec_type;
4861     l_empty_tilv_rec    tilv_rec_type;
4862 
4863     -- Bug 4177025 PAGARG 10-Feb-2005 declare record for creating accounting distributions
4864     l_bpd_acc_rec       okl_acc_call_pub.bpd_acc_rec_type;
4865 
4866     --rmunjulu 4769094
4867     CURSOR check_accrual_previous_csr IS
4868     SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
4869     FROM OKL_SYSTEM_PARAMS;
4870 
4871     --rmunjulu 4769094
4872     l_accrual_previous_mnth_yn VARCHAR2(3);
4873     l_accrual_adjst_date DATE;
4874 
4875  -- ansethur  27-FEB-07  R12B Added for Billing Enhancement Project   Start Changes
4876     l_tldv_tbl          okl_tld_pvt.tldv_tbl_type;
4877     lx_tldv_tbl         okl_tld_pvt.tldv_tbl_type;
4878 
4879     l_tilv_tbl          okl_txl_ar_inv_lns_pub.tilv_tbl_type;
4880     lx_tilv_tbl         okl_txl_ar_inv_lns_pub.tilv_tbl_type;
4881  -- ansethur  27-FEB-07  R12B Added for Billing Enhancement Project  End Changes
4882 
4883     -- MGAAP start 7263041
4884     CURSOR check_csr(p_chr_id NUMBER) IS
4885     SELECT A.MULTI_GAAP_YN,
4886            B.REPORTING_PDT_ID
4887     FROM   OKL_K_HEADERS A,
4888            OKL_PRODUCTS B
4889     WHERE  A.ID = p_chr_id
4890     AND    A.PDT_ID = B.ID;
4891     l_multi_gaap_yn okl_k_headers.multi_gaap_yn%TYPE;
4892     l_reporting_pdt_id okl_products.REPORTING_PDT_ID%TYPE;
4893     -- MGAAP end 7263041
4894 
4895  BEGIN
4896     IF (is_debug_procedure_on) THEN
4897       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
4898     END IF;
4899     IF (is_debug_statement_on) THEN
4900       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_call_origin: '|| p_call_origin);
4901       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_termination_date: '|| p_termination_date);
4902       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
4903       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
4904       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
4905       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
4906       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
4907       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
4908       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_type: '|| p_term_rec.p_quote_type);
4909       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.id: '||p_tcnv_rec.id);
4910       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.tmt_recycle_yn: '||p_tcnv_rec.tmt_recycle_yn);
4911       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.qte_id: '||p_tcnv_rec.qte_id);
4912     END IF;
4913 
4914     l_msg_count := x_msg_count;
4915     l_msg_data := x_msg_data;
4916 
4917     --Check API version, initialize message list and create savepoint.
4918     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
4919                                               G_PKG_NAME,
4920                                               p_init_msg_list,
4921                                               l_api_version,
4922                                               p_api_version,
4923                                               '_PVT',
4924                                               x_return_status);
4925     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4926       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4927     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4928       RAISE OKL_API.G_EXCEPTION_ERROR;
4929     END IF;
4930 
4931     -- MGAAP start 7263041
4932     OPEN check_csr(p_term_rec.p_contract_id);
4933     FETCH check_csr INTO
4934           l_multi_gaap_yn,
4935           l_reporting_pdt_id;
4936     CLOSE check_csr;
4937     -- MGAAP end 7263041
4938 
4939     -- Full Termination for TER_RELEASE_WO_PURCHASE quote
4940     IF  p_term_rec.p_quote_type = 'TER_RELEASE_WO_PURCHASE'
4941     AND p_call_origin = 'FULL'
4942     THEN
4943        IF (is_debug_statement_on) THEN
4944          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_TRMNT_PVT.get_contract_lines');
4945        END IF;
4946        -- get line details from OKL_AM_LEASE_TRMNT_PVT
4947        OKL_AM_LEASE_TRMNT_PVT.get_contract_lines(
4948                               p_api_version     => p_api_version,
4949                               p_init_msg_list   => OKL_API.G_FALSE,
4950                               x_return_status   => l_return_status,
4951                               x_msg_count       => l_msg_count,
4952                               x_msg_data        => l_msg_data,
4953                               p_term_rec        => p_term_rec,
4954                               x_klev_tbl        => lx_asset_tbl);
4955        IF (is_debug_statement_on) THEN
4956          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_TRMNT_PVT.get_contract_lines , return status : ' || l_return_status);
4957        END IF;
4958 
4959        IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
4960        THEN
4961           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4962        ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
4963        THEN
4964           RAISE OKL_API.G_EXCEPTION_ERROR;
4965        END IF;
4966        -- If quote exists then accnting date is quote accept date else sysdate
4967        IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists, 'N') = 'Y'
4968        THEN
4969           l_quote_accpt_date := okl_am_lease_loan_trmnt_pvt.g_quote_accept_date;
4970           l_quote_eff_date := okl_am_lease_loan_trmnt_pvt.g_quote_eff_from_date;
4971        ELSE
4972           l_quote_accpt_date := p_termination_date;
4973           l_quote_eff_date :=  p_termination_date;
4974        END IF;
4975 
4976        IF (is_debug_statement_on) THEN
4977          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling okl_am_util_pvt.get_transaction_id');
4978        END IF;
4979        okl_am_util_pvt.get_transaction_id (
4980           p_try_name        => 'CREDIT MEMO',
4981           x_return_status   => l_return_status,
4982           x_try_id          => l_cm_try_id);
4983        IF (is_debug_statement_on) THEN
4984          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called okl_am_util_pvt.get_transaction_id , return status : ' || l_return_status);
4985        END IF;
4986 
4987        IF l_return_status <> OKL_API.G_RET_STS_SUCCESS
4988        OR NVL (l_cm_try_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM
4989        THEN
4990           l_return_status := OKL_API.G_RET_STS_ERROR;
4991           OKC_API.SET_MESSAGE (
4992              p_app_name      => G_APP_NAME,
4993              p_msg_name      => G_INVALID_VALUE,
4994              p_token1        => G_COL_NAME_TOKEN,
4995              p_token1_value  => 'Transaction Type');
4996        END IF;
4997 
4998         -- rmunjulu TNA Handle return status
4999         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5000            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5001         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5002            RAISE OKL_API.G_EXCEPTION_ERROR;
5003         END IF;
5004 
5005 
5006        IF lx_asset_tbl.count > 0
5007        THEN
5008           FOR l_counter IN lx_asset_tbl.FIRST..lx_asset_tbl.LAST
5009           LOOP
5010 
5011             -- rmunjulu TNA Initialize the variables
5012             l_asset_ref_amt := 0;
5013             l_taiv_rec := l_empty_taiv_rec;
5014             l_tilv_rec := l_empty_tilv_rec;
5015 
5016              OPEN l_qte_dtls_csr(p_term_rec.p_quote_id);
5017              FETCH l_qte_dtls_csr INTO l_taiv_rec.currency_code,
5018                                        l_taiv_rec.currency_conversion_type,
5019                                        l_taiv_rec.currency_conversion_rate,
5020                                        l_taiv_rec.currency_conversion_date;
5021              CLOSE l_qte_dtls_csr; -- rmunjulu TNA Close the cursor
5022              OPEN l_ref_asset_amt_csr(p_khr_id => p_term_rec.p_contract_id,
5023                                       p_kle_id => lx_asset_tbl(l_counter).p_kle_id,
5024                                       p_date   => l_quote_eff_date);
5025              FETCH l_ref_asset_amt_csr INTO l_sty_id, l_asset_ref_amt;
5026              CLOSE l_ref_asset_amt_csr;
5027 
5028              l_taiv_rec.try_id := l_cm_try_id;
5029              l_taiv_rec.khr_id := p_term_rec.p_contract_id;
5030              l_taiv_rec.date_invoiced := l_quote_accpt_date;
5031              l_taiv_rec.date_entered := l_quote_accpt_date;
5032              l_taiv_rec.amount := l_asset_ref_amt;
5033 
5034              l_taiv_rec.qte_id := p_term_rec.p_quote_id;
5035              l_taiv_rec.description := p_term_rec.p_quote_type;
5036              l_taiv_rec.trx_status_code := 'SUBMITTED'; -- RMUNJULU CHANGED 21-NOV-05
5037              --20-NOV-2006 ANSETHUR R12B - LEGAL ENTITY UPTAKE PROJECT
5038               l_taiv_rec.legal_entity_id :=OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_term_rec.p_contract_id);
5039              -- rmunjulu TNA Added this IF
5040              IF l_asset_ref_amt <> 0 THEN
5041 
5042  --ansethur  27-FEB-2007  Added for R12 B Billing Architecture  Start Changes
5043  -- Included call to Enhanced Billing API in the place of the calls to Billing Header,Lines and Distributions
5044              l_taiv_rec.okl_source_billing_trx := 'TERMINATION';
5045              l_tilv_rec.line_number   := l_counter;
5046              l_tilv_rec.kle_id        := lx_asset_tbl(l_counter).p_kle_id;
5047              l_tilv_rec.description   := 'Adjustment for Advanced Rent';
5048              l_tilv_rec.sty_id        := l_sty_id;
5049              l_tilv_rec.amount        := l_asset_ref_amt;
5050              l_tilv_rec.inv_receiv_line_code := 'LINE';
5051 
5052              l_tilv_tbl(0)            := l_tilv_rec; -- Assign the line record in tilv_tbl structure
5053 
5054                  IF (is_debug_statement_on) THEN
5055                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling okl_internal_billing_pvt.create_billing_trx');
5056                  END IF;
5057                  okl_internal_billing_pvt.create_billing_trx(p_api_version   => l_api_version,
5058                                                              p_init_msg_list => p_init_msg_list,
5059                                                              x_return_status => x_return_status,
5060                                                              x_msg_count     => x_msg_count,
5061                                                              x_msg_data      => x_msg_data,
5062                                                              p_taiv_rec      => l_taiv_rec,
5063                                                              p_tilv_tbl      => l_tilv_tbl,
5064                                                              p_tldv_tbl      => l_tldv_tbl,
5065                                                              x_taiv_rec      => lx_taiv_rec,
5066                                                              x_tilv_tbl      => lx_tilv_tbl,
5067                                                              x_tldv_tbl      => lx_tldv_tbl);
5068                  IF (is_debug_statement_on) THEN
5069                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called okl_internal_billing_pvt.create_billing_trx , return status : ' || x_return_status);
5070                  END IF;
5071 
5072                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5073                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5074                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5075                 RAISE OKL_API.G_EXCEPTION_ERROR;
5076                END IF;
5077 
5078 /* --ansethur  23-FEB-2007  commented for R12 B Billing Architecture  Begins
5079 
5080              okl_trx_ar_invoices_pub.insert_trx_ar_invoices (
5081                     p_api_version   => P_api_version,
5082                     p_init_msg_list => OKL_API.G_FALSE,
5083                     x_return_status => l_return_status,
5084                     x_msg_count     => l_msg_count,
5085                     x_msg_data      => l_msg_data,
5086                     p_taiv_rec      => l_taiv_rec,
5087                     x_taiv_rec      => lx_taiv_rec);
5088 
5089            -- rmunjulu TNA Handle return status
5090               IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5091                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5092               ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5093                  RAISE OKL_API.G_EXCEPTION_ERROR;
5094               END IF;
5095 
5096              l_tilv_rec.line_number   := l_counter;
5097              l_tilv_rec.kle_id        := lx_asset_tbl(l_counter).p_kle_id;
5098              l_tilv_rec.description   := 'Adjustment for Advanced Rent';
5099              l_tilv_rec.sty_id        := l_sty_id;
5100              l_tilv_rec.amount        := l_asset_ref_amt;
5101              l_tilv_rec.tai_id        := lx_taiv_rec.id;
5102              l_tilv_rec.inv_receiv_line_code := 'LINE';
5103 
5104              -- Create Invoice Line
5105              okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
5106                   p_api_version   => l_api_version,
5107                   p_init_msg_list => OKL_API.G_FALSE,
5108                   x_return_status => l_return_status,
5109                   x_msg_count     => l_msg_count,
5110                   x_msg_data      => l_msg_data,
5111                   p_tilv_rec      => l_tilv_rec,
5112                   x_tilv_rec      => lx_tilv_rec);
5113 
5114            -- rmunjulu TNA Handle return status
5115               IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5116                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5117               ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5118                  RAISE OKL_API.G_EXCEPTION_ERROR;
5119               END IF;
5120 
5121              -- Bug 4177025 PAGARG 10-Feb-2005 Fix start
5122              -- Added the call to create accounting distributions for the invoice lines
5123              IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
5124                 l_bpd_acc_rec.id            := lx_tilv_rec.id;
5125                 l_bpd_acc_rec.source_table  := 'OKL_TXL_AR_INV_LNS_B';
5126 
5127                 -- Create Accounting Distribution
5128                 okl_acc_call_pub.create_acc_trans(
5129                         p_api_version   => l_api_version,
5130                         p_init_msg_list => OKL_API.G_FALSE,
5131                         x_return_status => l_return_status,
5132                         x_msg_count     => l_msg_count,
5133                         x_msg_data      => l_msg_data,
5134                         p_bpd_acc_rec   => l_bpd_acc_rec);
5135 
5136                 -- rmunjulu Bug 4177025 Handle Return status properly
5137                 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5138                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5139                 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5140                    RAISE OKL_API.G_EXCEPTION_ERROR;
5141                 END IF;
5142 
5143              END IF;
5144 
5145              -- Bug 4177025 PAGARG 10-Feb-2005 Fix end
5146  --ansethur  27-FEB-2007  commented for R12 B Billing Architecture Ends
5147 */
5148  --ansethur  27-FEB-2007  Added for R12 B Billing Architecture  End Changes
5149 
5150              END IF; -- rmunjulu TNA End of New IF to check amt there for invoicing
5151           END LOOP;
5152        END IF; -- asset table count
5153 
5154        --Bug# 3999921 14-Dec-2004 PAGARG Fix Start
5155        --Instead of calling create_accrual_adjustments, call get_accrual_adjustments
5156        --and generate accruals.
5157        --Populate lines table with id of contract top line for fee and sold service
5158        l_counter := 0;
5159 
5160        -- rmunjulu TNA Get the FEE and SERVICE TOP lines
5161        FOR p_chr_lines_rec in p_chr_lines_csr(p_term_rec.p_contract_id)
5162        LOOP
5163           l_counter := l_counter + 1;
5164           l_line_id_tbl(l_counter).id := p_chr_lines_rec.id;
5165        END LOOP;
5166 
5167        -- rmunjulu 4769094 Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup check accruals till quote eff date OR previous month last date
5168        OPEN  check_accrual_previous_csr;
5169        FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
5170        CLOSE check_accrual_previous_csr;
5171 
5172        IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN -- rmunjulu 4769094 continue with current adjustment date as quote effective date
5173        l_accrual_adjst_date :=  l_quote_eff_date;
5174     ELSE -- rmunjulu 4769094 new check adjustment date is quote eff dates previous month last date
5175        l_accrual_adjst_date :=  LAST_DAY(TRUNC(l_quote_eff_date, 'MONTH')-1);
5176     END IF;
5177 
5178        -- rmunjulu TNA Get the accrual adjustment streams and amounts for FEE and SERVICE lines
5179        IF (is_debug_statement_on) THEN
5180          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment');
5181        END IF;
5182 
5183        OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
5184        OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment(
5185              p_api_version     => p_api_version,
5186              p_init_msg_list   => OKL_API.G_FALSE,
5187              x_return_status   => l_return_status,
5188              x_msg_count       => l_msg_count,
5189              x_msg_data        => l_msg_data,
5190              p_contract_id     => p_term_rec.p_contract_id,
5191              p_line_id_tbl     => l_line_id_tbl,
5192              p_adjustment_date => l_accrual_adjst_date, -- rmunjulu 4769094
5193              x_accrual_adjustment_tbl => lx_accrual_adjustment_tbl);
5194        IF (is_debug_statement_on) THEN
5195          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment , return status : ' || l_return_status);
5196        END IF;
5197 
5198         -- rmunjulu TNA Handle return status
5199         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5200            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5201         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5202            RAISE OKL_API.G_EXCEPTION_ERROR;
5203         END IF;
5204 
5205        -- rmunjulu TNA check if table has value before looping thru table and calling the other API
5206        IF lx_accrual_adjustment_tbl.COUNT > 0 THEN
5207 
5208           -- rmunjulu TNA Brought the below code into this IF
5209 /* -- rmunjulu TNA Not needed
5210           okl_am_util_pvt.get_transaction_id (
5211              p_try_name        => 'TERMINATION',
5212              x_return_status   => l_return_status,
5213              x_try_id          => l_trmnt_try_id);
5214 
5215           IF l_return_status <> OKL_API.G_RET_STS_SUCCESS
5216           OR NVL (l_trmnt_try_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
5217 
5218              l_return_status := OKL_API.G_RET_STS_ERROR;
5219 
5220              OKC_API.SET_MESSAGE (
5221                 p_app_name      => G_APP_NAME,
5222                 p_msg_name      => G_INVALID_VALUE,
5223                 p_token1        => G_COL_NAME_TOKEN,
5224                 p_token1_value  => 'Transaction Type');
5225           END IF;
5226 
5227           -- rmunjulu TNA Handle return status
5228           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5229              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5230           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5231              RAISE OKL_API.G_EXCEPTION_ERROR;
5232           END IF;
5233 */
5234           --Populate online accrual rec type -- rmunjulu TNA set all the values for p_accrual_rec at one place
5235           l_accrual_rec.contract_id := p_term_rec.p_contract_id;
5236           l_accrual_rec.accrual_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_gl_date => l_quote_accpt_date);
5237           l_accrual_rec.source_trx_id := p_tcnv_rec.id; -- rmunjulu TNA Changed
5238           l_accrual_rec.source_trx_type := 'TCN';
5239           --l_accrual_rec.ignore_accrual_rule_yn := 'Y'; -- rmunjulu TNA Additional changes -- Removed
5240           --l_accrual_rec.stream_source_value := 'PROVIDED'; -- rmunjulu TNA Additional changes -- Removed
5241 
5242           -- rmunjulu TNA Set the p_stream_tbl values
5243           FOR l_counter IN lx_accrual_adjustment_tbl.FIRST..lx_accrual_adjustment_tbl.LAST LOOP
5244 
5245    l_stream_tbl(l_counter).stream_type_id := lx_accrual_adjustment_tbl(l_counter).sty_id;
5246             l_stream_tbl(l_counter).stream_amount  := lx_accrual_adjustment_tbl(l_counter).amount;
5247             l_stream_tbl(l_counter).kle_id         := lx_accrual_adjustment_tbl(l_counter).line_id;
5248           END LOOP;
5249 
5250           -- rmunjulu TNA Create the accounting transactions for the accrual adjustments
5251           -- rmunjulu TNA Additional Changes -- Changed the procedure name
5252           IF (is_debug_statement_on) THEN
5253             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.adjust_accruals');
5254           END IF;
5255           OKL_GENERATE_ACCRUALS_PVT.adjust_accruals(
5256              p_api_version     => p_api_version,
5257              p_init_msg_list   => OKL_API.G_FALSE,
5258              x_return_status   => l_return_status,
5259              x_msg_count       => l_msg_count,
5260              x_msg_data        => l_msg_data,
5261              x_trx_number      => lx_trx_number,
5262              p_accrual_rec     => l_accrual_rec,
5263              p_stream_tbl      => l_stream_tbl);
5264           IF (is_debug_statement_on) THEN
5265             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.adjust_accruals , return status : ' || l_return_status);
5266           END IF;
5267 
5268          -- rmunjulu TNA Handle return status
5269          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5270             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5271          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5272             RAISE OKL_API.G_EXCEPTION_ERROR;
5273          END IF;
5274 
5275        --14-Dec-2004 Bug# 3999921 PAGARG Fix end
5276        END IF; -- Check for tbl has records
5277 
5278        -- MGAAP start 7263041
5279        IF (l_multi_gaap_yn = 'Y') THEN
5280          IF (is_debug_statement_on) THEN
5281            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment for SECONDARY');
5282          END IF;
5283 
5284          OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; -- MGAAP 7263041
5285 
5286          OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment(
5287                p_api_version     => p_api_version,
5288                p_init_msg_list   => OKL_API.G_FALSE,
5289                x_return_status   => l_return_status,
5290                x_msg_count       => l_msg_count,
5291                x_msg_data        => l_msg_data,
5292                p_contract_id     => p_term_rec.p_contract_id,
5293                p_line_id_tbl     => l_line_id_tbl,
5294                p_adjustment_date => l_accrual_adjst_date, -- rmunjulu 4769094
5295                x_accrual_adjustment_tbl => lx_accrual_adjustment_tbl,
5296                p_product_id      => l_reporting_pdt_id); -- MGAAP 7263041
5297 
5298          OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
5299 
5300          IF (is_debug_statement_on) THEN
5301            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment , return status : ' || l_return_status);
5302          END IF;
5303 
5304           -- rmunjulu TNA Handle return status
5305           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5306              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5307           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5308              RAISE OKL_API.G_EXCEPTION_ERROR;
5309           END IF;
5310 
5311          -- rmunjulu TNA check if table has value before looping thru table and calling the other API
5312          IF lx_accrual_adjustment_tbl.COUNT > 0 THEN
5313 
5314             --Populate online accrual rec type -- rmunjulu TNA set all the values for p_accrual_rec at one place
5315             l_accrual_rec.contract_id := p_term_rec.p_contract_id;
5316             l_accrual_rec.accrual_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_gl_date => l_quote_accpt_date);
5317             l_accrual_rec.source_trx_id := p_tcnv_rec.id; -- rmunjulu TNA Changed
5318             l_accrual_rec.source_trx_type := 'TCN';
5319             --l_accrual_rec.ignore_accrual_rule_yn := 'Y'; -- rmunjulu TNA Additional changes -- Removed
5320             --l_accrual_rec.stream_source_value := 'PROVIDED'; -- rmunjulu TNA Additional changes -- Removed
5321             l_accrual_rec.trx_number := lx_trx_number; -- MGAAP 7263041
5322 
5323             -- rmunjulu TNA Set the p_stream_tbl values
5324             FOR l_counter IN lx_accrual_adjustment_tbl.FIRST..lx_accrual_adjustment_tbl.LAST LOOP
5325 
5326      l_stream_tbl(l_counter).stream_type_id := lx_accrual_adjustment_tbl(l_counter).sty_id;
5327               l_stream_tbl(l_counter).stream_amount  := lx_accrual_adjustment_tbl(l_counter).amount;
5328               l_stream_tbl(l_counter).kle_id         := lx_accrual_adjustment_tbl(l_counter).line_id;
5329             END LOOP;
5330 
5331             -- rmunjulu TNA Create the accounting transactions for the accrual adjustments
5332             -- rmunjulu TNA Additional Changes -- Changed the procedure name
5333             IF (is_debug_statement_on) THEN
5334               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.adjust_accruals');
5335             END IF;
5336             OKL_GENERATE_ACCRUALS_PVT.adjust_accruals(
5337                p_api_version     => p_api_version,
5338                p_init_msg_list   => OKL_API.G_FALSE,
5339                x_return_status   => l_return_status,
5340                x_msg_count       => l_msg_count,
5341                x_msg_data        => l_msg_data,
5342                x_trx_number      => lx_trx_number,
5343                p_accrual_rec     => l_accrual_rec,
5344                p_stream_tbl      => l_stream_tbl,
5345                p_representation_type      => 'SECONDARY'); -- MGAAP 7263041
5346             IF (is_debug_statement_on) THEN
5347               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.adjust_accruals , return status : ' || l_return_status);
5348             END IF;
5349 
5350            -- rmunjulu TNA Handle return status
5351            IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5352               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5353            ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5354               RAISE OKL_API.G_EXCEPTION_ERROR;
5355            END IF;
5356 
5357          --14-Dec-2004 Bug# 3999921 PAGARG Fix end
5358          END IF; -- Check for tbl has records
5359 
5360        END IF;
5361        -- MGAAP end 7263041
5362 
5363     END IF;
5364 
5365     -- rmunjulu TNA Set the return status properly
5366     x_return_status := l_return_status;
5367 
5368     -- end the transaction
5369     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5370     IF (is_debug_procedure_on) THEN
5371       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
5372     END IF;
5373   EXCEPTION
5374     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5375       IF (is_debug_exception_on) THEN
5376         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
5377       END IF;
5378       -- rmunjulu TNA Close cursors in exception block
5379       IF l_qte_dtls_csr%ISOPEN THEN
5380          CLOSE l_qte_dtls_csr;
5381       END IF;
5382       IF l_ref_asset_amt_csr%ISOPEN THEN
5383          CLOSE l_ref_asset_amt_csr;
5384       END IF;
5385       x_return_status := OKL_API.HANDLE_EXCEPTIONS
5386       (
5387         l_api_name,
5388         G_PKG_NAME,
5389         'OKL_API.G_RET_STS_ERROR',
5390         x_msg_count,
5391         x_msg_data,
5392         '_PVT'
5393       );
5394     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5395       IF (is_debug_exception_on) THEN
5396         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
5397       END IF;
5398       -- rmunjulu TNA Close cursors in exception block
5399       IF l_qte_dtls_csr%ISOPEN THEN
5400          CLOSE l_qte_dtls_csr;
5401       END IF;
5402       IF l_ref_asset_amt_csr%ISOPEN THEN
5403          CLOSE l_ref_asset_amt_csr;
5404       END IF;
5405       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5406       (
5407         l_api_name,
5408         G_PKG_NAME,
5409         'OKL_API.G_RET_STS_UNEXP_ERROR',
5410         x_msg_count,
5411         x_msg_data,
5412         '_PVT'
5413       );
5414     WHEN OTHERS THEN
5415       IF (is_debug_exception_on) THEN
5416           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5417 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
5418       END IF;
5419       -- rmunjulu TNA Close cursors in exception block
5420       IF l_qte_dtls_csr%ISOPEN THEN
5421          CLOSE l_qte_dtls_csr;
5422       END IF;
5423       IF l_ref_asset_amt_csr%ISOPEN THEN
5424          CLOSE l_ref_asset_amt_csr;
5425       END IF;
5426       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5427       (
5428         l_api_name,
5429         G_PKG_NAME,
5430         'OTHERS',
5431         x_msg_count,
5432         x_msg_data,
5433         '_PVT'
5434       );
5435   END process_adjustments;
5436 
5437   -- Start of comments
5438   -- Procedure Name : process_loan_refunds
5439   -- Desciption     : Do refund of loans (additional amount billed but not paid above outstanding balance) if expiration
5440   -- Business Rules :
5441   -- Parameters     :
5442   -- Version     : 1.0
5443   -- History        : rmunjulu LOANS_ENHANCEMENTS
5444   -- End of comments
5445   PROCEDURE process_loan_refunds(
5446            p_api_version                 IN  NUMBER,
5447            p_init_msg_list               IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
5448            x_return_status               OUT NOCOPY VARCHAR2,
5449            x_msg_count                   OUT NOCOPY NUMBER,
5450            x_msg_data                    OUT NOCOPY VARCHAR2,
5451            p_term_rec                    IN  term_rec_type,
5452            p_tcnv_rec                    IN  tcnv_rec_type,
5453            p_call_origin                 IN  VARCHAR2 DEFAULT NULL,
5454            p_termination_date            IN  DATE) IS
5455 
5456      l_module_name VARCHAR2(500) := G_MODULE_NAME || 'process_loan_refunds';
5457      is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5458      is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5459      is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5460      l_api_name         CONSTANT VARCHAR2(30) := 'process_loan_refunds';
5461      l_api_version      CONSTANT NUMBER := 1;
5462      l_return_status    VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5463      l_msg_count        NUMBER;
5464      l_msg_data         VARCHAR2(2000);
5465      l_taiv_rec         taiv_rec_type;
5466      lx_taiv_rec        taiv_rec_type;
5467      l_tilv_rec         tilv_rec_type;
5468      lx_tilv_rec        tilv_rec_type;
5469      l_cm_try_id        NUMBER;
5470      l_counter          NUMBER := 1;
5471      l_quote_accpt_date DATE;
5472      l_quote_eff_date   DATE;
5473      l_sty_id           NUMBER;
5474      l_bpd_acc_rec      OKL_ACC_CALL_PUB.bpd_acc_rec_type;
5475      l_currency_code    OKC_K_HEADERS_B.currency_code%TYPE;
5476      l_loan_refund_amount  NUMBER;
5477      l_functional_currency_code VARCHAR2(15);
5478      l_contract_currency_code VARCHAR2(15);
5479      l_currency_conversion_type VARCHAR2(30);
5480      l_currency_conversion_rate NUMBER;
5481      l_currency_conversion_date DATE;
5482      l_converted_amount NUMBER;
5483 
5484      -- Since we do not use the amount or converted amount
5485      -- set a hardcoded value for the amount (and pass to to
5486      -- OKL_ACCOUNTING_UTIL.convert_to_functional_currency and get back
5487      -- conversion values )
5488      l_hard_coded_amount NUMBER := 100;
5489 
5490  -- ansethur  23-FEB-07  R12B Added for Billing Enhancement Project   Start Changes
5491       l_tldv_tbl          okl_tld_pvt.tldv_tbl_type;
5492       lx_tldv_tbl         okl_tld_pvt.tldv_tbl_type;
5493 
5494       l_tilv_tbl          okl_txl_ar_inv_lns_pub.tilv_tbl_type;
5495       lx_tilv_tbl         okl_txl_ar_inv_lns_pub.tilv_tbl_type;
5496  -- ansethur  23-FEB-07  R12B Added for Billing Enhancement Project  End Changes
5497 
5498   BEGIN
5499     IF (is_debug_procedure_on) THEN
5500       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
5501     END IF;
5502     IF (is_debug_statement_on) THEN
5503       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_call_origin: '|| p_call_origin);
5504       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_termination_date: '|| p_termination_date);
5505       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
5506       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
5507       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
5508       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
5509       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
5510       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
5511       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_type: '|| p_term_rec.p_quote_type);
5512     END IF;
5513 
5514     l_msg_count := x_msg_count;
5515     l_msg_data := x_msg_data;
5516 
5517     --Check API version, initialize message list and create savepoint.
5518     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
5519                                               G_PKG_NAME,
5520                                               p_init_msg_list,
5521                                               l_api_version,
5522                                               p_api_version,
5523                                               '_PVT',
5524                                               x_return_status);
5525 
5526     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5527       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5528     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5529       RAISE OKL_API.G_EXCEPTION_ERROR;
5530     END IF;
5531 
5532     -- expiration
5533     IF  nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists, 'N') = 'N' THEN
5534 
5535        -- If quote exists then accnting date is quote accept date else sysdate
5536        IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists, 'N') = 'Y'
5537        THEN
5538           l_quote_accpt_date := okl_am_lease_loan_trmnt_pvt.g_quote_accept_date;
5539           l_quote_eff_date := okl_am_lease_loan_trmnt_pvt.g_quote_eff_from_date;
5540        ELSE
5541           l_quote_accpt_date := p_termination_date;
5542           l_quote_eff_date :=  p_termination_date;
5543        END IF;
5544 
5545        -- get excess loan payment amount
5546        IF (is_debug_statement_on) THEN
5547          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_excess_loan_payment');
5548        END IF;
5549        l_loan_refund_amount := OKL_AM_UTIL_PVT.get_excess_loan_payment(
5550                                      x_return_status    => l_return_status,
5551                                      p_khr_id           => p_term_rec.p_contract_id);
5552        IF (is_debug_statement_on) THEN
5553          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_excess_loan_payment , return status : ' || l_return_status);
5554          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_loan_refund_amount : ' || l_loan_refund_amount);
5555        END IF;
5556 
5557        IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5558            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5559        ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5560            RAISE OKL_API.G_EXCEPTION_ERROR;
5561        END IF;
5562 
5563        l_loan_refund_amount := nvl(l_loan_refund_amount,0) * -1;
5564 
5565        IF l_loan_refund_amount <> 0 THEN
5566 
5567             IF (is_debug_statement_on) THEN
5568               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_transaction_id');
5569             END IF;
5570             OKL_AM_UTIL_PVT.get_transaction_id (
5571                p_try_name        => 'CREDIT MEMO',
5572                x_return_status   => l_return_status,
5573                x_try_id          => l_cm_try_id);
5574             IF (is_debug_statement_on) THEN
5575               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_transaction_id , return status : ' || l_return_status);
5576             END IF;
5577 
5578             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS
5579             OR NVL (l_cm_try_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM
5580             THEN
5581 
5582               OKC_API.SET_MESSAGE (
5583                 p_app_name      => G_APP_NAME,
5584                 p_msg_name      => G_INVALID_VALUE,
5585                 p_token1        => G_COL_NAME_TOKEN,
5586                 p_token1_value  => 'Transaction Type');
5587 
5588                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5589              END IF;
5590 
5591              l_functional_currency_code := OKL_AM_UTIL_PVT.get_functional_currency();
5592 
5593               IF (is_debug_statement_on) THEN
5594                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_ACCOUNTING_UTIL.convert_to_functional_currency');
5595               END IF;
5596              -- Get the currency conversion details from ACCOUNTING_Util
5597              OKL_ACCOUNTING_UTIL.convert_to_functional_currency(
5598                      p_khr_id                   => p_term_rec.p_contract_id,
5599                      p_to_currency              => l_functional_currency_code,
5600                      p_transaction_date         => l_quote_accpt_date,
5601                      p_amount                   => l_hard_coded_amount,
5602                      x_return_status            => l_return_status,
5603                      x_contract_currency        => l_contract_currency_code,
5604                      x_currency_conversion_type => l_currency_conversion_type,
5605                      x_currency_conversion_rate => l_currency_conversion_rate,
5606                      x_currency_conversion_date => l_currency_conversion_date,
5607                      x_converted_amount         => l_converted_amount);
5608               IF (is_debug_statement_on) THEN
5609                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_ACCOUNTING_UTIL.convert_to_functional_currency , return status : ' || l_return_status);
5610                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_contract_currency_code : ' || l_contract_currency_code);
5611                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_type : ' || l_currency_conversion_type);
5612                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_rate : ' || l_currency_conversion_rate);
5613                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_date : ' || l_currency_conversion_date);
5614                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_converted_amount : ' || l_converted_amount);
5615               END IF;
5616 
5617              IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5618                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5619              ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5620                RAISE OKL_API.G_EXCEPTION_ERROR;
5621              END IF;
5622 
5623               IF (is_debug_statement_on) THEN
5624                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling okl_streams_util.get_dependent_stream_type');
5625               END IF;
5626             --Bug 6266134 veramach start
5627             okl_streams_util.get_dependent_stream_type(
5628               p_khr_id                     => p_term_rec.p_contract_id,
5629               p_primary_sty_purpose        => 'RENT',
5630               p_dependent_sty_purpose      => 'EXCESS_LOAN_PAYMENT_PAID',
5631               x_return_status              => l_return_status,
5632               x_dependent_sty_id           => l_sty_id
5633             );
5634             --Bug 6266134 veramach end
5635               IF (is_debug_statement_on) THEN
5636                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called okl_streams_util.get_dependent_stream_type , return status : ' || l_return_status);
5637                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_sty_id : ' || l_sty_id);
5638               END IF;
5639 
5640              IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5641                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5642              ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5643                RAISE OKL_API.G_EXCEPTION_ERROR;
5644              END IF;
5645 
5646        l_taiv_rec.currency_code := l_contract_currency_code;
5647        l_taiv_rec.currency_conversion_type := l_currency_conversion_type;
5648        l_taiv_rec.currency_conversion_rate := l_currency_conversion_rate;
5649        l_taiv_rec.currency_conversion_date := l_currency_conversion_date;
5650              l_taiv_rec.try_id := l_cm_try_id;
5651              l_taiv_rec.khr_id := p_term_rec.p_contract_id;
5652              l_taiv_rec.date_invoiced := l_quote_accpt_date;
5653              l_taiv_rec.date_entered := l_quote_accpt_date;
5654              l_taiv_rec.amount := l_loan_refund_amount;
5655              l_taiv_rec.description := 'Loan Refund Amount on Expiration';
5656              l_taiv_rec.trx_status_code := 'SUBMITTED'; -- RMUNJULU CHANGED 21-NOV-05
5657 
5658  --20-NOV-2006 ANSETHUR R12B - LEGAL ENTITY UPTAKE PROJECT
5659              l_taiv_rec.legal_entity_id :=OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_term_rec.p_contract_id);
5660 
5661  --ansethur  27-FEB-2007  Added for R12 B Billing Architecture  Start Changes
5662  --Included call to Enhanced Billing API in the place of the calls to Billing Header,Lines and Distributions
5663              l_taiv_rec.okl_source_billing_trx := 'TERMINATION';
5664              l_tilv_rec.line_number   := l_counter;
5665              l_tilv_rec.description   := 'Loan Refund Amount on Expiration';
5666              l_tilv_rec.sty_id        := l_sty_id;
5667              l_tilv_rec.amount        := l_loan_refund_amount;
5668              l_tilv_rec.inv_receiv_line_code := 'LINE';
5669 
5670              l_tilv_tbl(0)            := l_tilv_rec; -- Assign the line record in tilv_tbl structure
5671 
5672               IF (is_debug_statement_on) THEN
5673                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling okl_internal_billing_pvt.create_billing_trx');
5674               END IF;
5675                  okl_internal_billing_pvt.create_billing_trx(p_api_version   => l_api_version,
5676                                                              p_init_msg_list => p_init_msg_list,
5677                                                              x_return_status => x_return_status,
5678                                                              x_msg_count     => x_msg_count,
5679                                                              x_msg_data      => x_msg_data,
5680                                                              p_taiv_rec      => l_taiv_rec,
5681                                                              p_tilv_tbl      => l_tilv_tbl,
5682                                                              p_tldv_tbl      => l_tldv_tbl,
5683                                                              x_taiv_rec      => lx_taiv_rec,
5684                                                              x_tilv_tbl      => lx_tilv_tbl,
5685                                                              x_tldv_tbl      => lx_tldv_tbl);
5686               IF (is_debug_statement_on) THEN
5687                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called okl_internal_billing_pvt.create_billing_trx , return status : ' || x_return_status);
5688               END IF;
5689 
5690                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5691                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5692                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5693                 RAISE OKL_API.G_EXCEPTION_ERROR;
5694                END IF;
5695 
5696 /*  --ansethur  27-FEB-2007  commented for R12 B Billing Architecture  Begins
5697              -- create invoice header
5698              OKL_TRX_AR_INVOICES_PUB.insert_trx_ar_invoices (
5699                     p_api_version   => P_api_version,
5700                     p_init_msg_list => OKL_API.G_FALSE,
5701                     x_return_status => l_return_status,
5702                     x_msg_count     => l_msg_count,
5703                     x_msg_data      => l_msg_data,
5704                     p_taiv_rec      => l_taiv_rec,
5705                     x_taiv_rec      => lx_taiv_rec);
5706 
5707               IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5708                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5709               ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5710                  RAISE OKL_API.G_EXCEPTION_ERROR;
5711               END IF;
5712 
5713              l_tilv_rec.line_number   := l_counter;
5714              l_tilv_rec.description   := 'Loan Refund Amount on Expiration';
5715              l_tilv_rec.sty_id        := l_sty_id;
5716              l_tilv_rec.amount        := l_loan_refund_amount;
5717              l_tilv_rec.tai_id        := lx_taiv_rec.id;
5718              l_tilv_rec.inv_receiv_line_code := 'LINE';
5719 
5720              -- Create Invoice Line
5721              OKL_TXL_AR_INV_LNS_PUB.insert_txl_ar_inv_lns (
5722                   p_api_version   => l_api_version,
5723                   p_init_msg_list => OKL_API.G_FALSE,
5724                   x_return_status => l_return_status,
5725                   x_msg_count     => l_msg_count,
5726                   x_msg_data      => l_msg_data,
5727                   p_tilv_rec      => l_tilv_rec,
5728                   x_tilv_rec      => lx_tilv_rec);
5729 
5730               IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5731                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5732               ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5733                  RAISE OKL_API.G_EXCEPTION_ERROR;
5734               END IF;
5735 
5736              l_bpd_acc_rec.id            := lx_tilv_rec.id;
5737              l_bpd_acc_rec.source_table  := 'OKL_TXL_AR_INV_LNS_B';
5738 
5739              -- Create Accounting Distribution
5740              OKL_ACC_CALL_PUB.create_acc_trans(
5741                         p_api_version   => l_api_version,
5742                         p_init_msg_list => OKL_API.G_FALSE,
5743                         x_return_status => l_return_status,
5744                         x_msg_count     => l_msg_count,
5745                         x_msg_data      => l_msg_data,
5746                         p_bpd_acc_rec   => l_bpd_acc_rec);
5747 
5748               IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5749                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5750               ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5751                  RAISE OKL_API.G_EXCEPTION_ERROR;
5752               END IF;
5753 
5754 --ansethur  23-FEB-2007  commented for R12 B Billing Architecture  Ends
5755 */
5756  --ansethur  27-FEB-2007  Added for R12 B Billing Architecture  End Changes
5757           END IF;
5758        END IF;
5759 
5760        x_return_status := l_return_status;
5761 
5762        -- end the transaction
5763        OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5764        IF (is_debug_procedure_on) THEN
5765          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
5766        END IF;
5767   EXCEPTION
5768     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5769       IF (is_debug_exception_on) THEN
5770         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
5771       END IF;
5772 
5773       x_return_status := OKL_API.HANDLE_EXCEPTIONS
5774       (
5775         l_api_name,
5776         G_PKG_NAME,
5777         'OKL_API.G_RET_STS_ERROR',
5778         x_msg_count,
5779         x_msg_data,
5780         '_PVT'
5781       );
5782     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5783       IF (is_debug_exception_on) THEN
5784         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
5785       END IF;
5786 
5787       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5788       (
5789         l_api_name,
5790         G_PKG_NAME,
5791         'OKL_API.G_RET_STS_UNEXP_ERROR',
5792         x_msg_count,
5793         x_msg_data,
5794         '_PVT'
5795       );
5796     WHEN OTHERS THEN
5797       IF (is_debug_exception_on) THEN
5798           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5799 		                || sqlcode || ' , SQLERRM : ' || sqlerrm);
5800       END IF;
5801 
5802       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5803       (
5804         l_api_name,
5805         G_PKG_NAME,
5806         'OTHERS',
5807         x_msg_count,
5808         x_msg_data,
5809         '_PVT'
5810       );
5811   END process_loan_refunds;
5812 
5813 END OKL_AM_LEASE_LOAN_TRMNT_PVT;