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