DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_AM_TERMNT_QUOTE_PVT

Source


1 PACKAGE BODY OKL_AM_TERMNT_QUOTE_PVT As
2 /* $Header: OKLRTNQB.pls 120.43.12010000.2 2008/10/01 22:52:06 rkuttiya ship $ */
3 --
4 -- BAKUCHIB Bug 2484327 start
5 --
6 -------------------------------------------------------------------------------------------------
7 -- GLOBAL VARIABLES
8 -------------------------------------------------------------------------------------------------
9   G_NO_MATCHING_RECORD          CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
10   G_REQUIRED_VALUE              CONSTANT VARCHAR2(200) := 'OKL_REQUIRED_VALUE';
11   G_INVALID_VALUE               CONSTANT VARCHAR2(200) := 'OKL_INVALID_VALUE';
12   G_COL_NAME_TOKEN              CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
13   G_FIN_LINE_LTY_CODE                     OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FREE_FORM1';
14   G_LEASE_SCS_CODE                        OKC_K_HEADERS_V.SCS_CODE%TYPE := 'LEASE';
15   G_LOAN_SCS_CODE                         OKC_K_HEADERS_V.SCS_CODE%TYPE := 'LOAN';
16   G_TLS_TYPE                              OKC_LINE_STYLES_V.LSE_TYPE%TYPE := 'TLS';
17   G_LEVEL_PROCEDURE            CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
18   G_LEVEL_EXCEPTION            CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
19   G_LEVEL_STATEMENT            CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
20   G_MODULE_NAME                CONSTANT VARCHAR2(500) := 'okl.am.plsql.okl_am_termnt_quote_pvt.';
21 -------------------------------------------------------------------------------------------------
22 -- GLOBAL COMPSITE TYPE
23 -------------------------------------------------------------------------------------------------
24     subtype tqdv_rec_type is OKL_TXD_QTE_LN_DTLS_PUB.tqdv_rec_type;
25 -------------------------------------------------------------------------------------------------
26 -- GLOBAL EXCEPTION
27 -------------------------------------------------------------------------------------------------
28   G_EXCEPTION_HALT_VALIDATION             EXCEPTION;
29   G_API_TYPE                    CONSTANT  VARCHAR2(4) := '_PVT';
30   G_API_VERSION                 CONSTANT  NUMBER := 1.0;
31   G_SCOPE                       CONSTANT  VARCHAR2(4) := '_PVT';
32 ------------------------------------------------------------------------------------------------------------
33 
34   -- Start of comments
35   --
36   -- Function  Name  : recalculate_quote
37   -- Description     : Recalculate quote elements like Gain/Loss when a quote
38   --                   amount is created/updated
39   -- Business Rules  :
40   -- Parameters      : Input parameters : p_tqlv_rec
41   -- Version         : 1.0
42   -- History         : PAGARG 4102565 Created
43   --
44   -- End of comments
45   PROCEDURE recalculate_quote(
46                x_return_status  OUT NOCOPY VARCHAR2,
47                p_tqlv_rec       IN tqlv_rec_type)
48   IS
49     -- Cursor to get the quote and quote line details
50     CURSOR get_qte_dtls_csr (p_line_id IN NUMBER) IS
51       SELECT  qte.id,
52               qte.qst_code,
53               qte.qtp_code,
54               qte.quote_number,
55               qte.khr_id,
56               qte.partial_yn,
57               qte.early_termination_yn,
58               tql.qlt_code
59       FROM    okl_trx_quotes_b qte,
60               okl_txl_quote_lines_b tql
61       WHERE   tql.id  = p_line_id
62       AND     tql.qte_id = qte.id;
63 
64     l_return_status VARCHAR2(3);
65     lx_net_gain_loss NUMBER;
66 
67     l_quot_rec OKL_AM_CREATE_QUOTE_PVT.quot_rec_type;
68     lp_quot_rec OKL_AM_CREATE_QUOTE_PVT.quot_rec_type;
69     lx_quot_rec OKL_AM_CREATE_QUOTE_PVT.quot_rec_type;
70 
71     l_api_version       CONSTANT NUMBER := 1;
72     l_msg_count NUMBER := OKL_API.G_MISS_NUM;
73     l_msg_data VARCHAR2(2000);
74     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'recalculate_quote';
75     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
76     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
77     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
78 
79   BEGIN
80     IF (is_debug_procedure_on) THEN
81       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
82     END IF;
83 	 IF (is_debug_statement_on) THEN
84 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.id: ' || p_tqlv_rec.id);
85 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qlt_code: ' || p_tqlv_rec.qlt_code);
86 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.kle_id: ' || p_tqlv_rec.kle_id);
87 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.sty_id: ' || p_tqlv_rec.sty_id);
88 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qte_id: ' || p_tqlv_rec.qte_id);
89 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.line_number: ' || p_tqlv_rec.line_number);
90 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.amount: ' || p_tqlv_rec.amount);
91 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.modified_yn: ' || p_tqlv_rec.modified_yn);
92 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.taxed_yn: ' || p_tqlv_rec.taxed_yn);
93 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.defaulted_yn: ' || p_tqlv_rec.defaulted_yn);
94 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.org_id: ' || p_tqlv_rec.org_id);
95 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.start_date: ' || p_tqlv_rec.start_date);
96 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.period: ' || p_tqlv_rec.period);
97 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.number_of_periods: ' || p_tqlv_rec.number_of_periods);
98 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.lock_level_step: ' || p_tqlv_rec.lock_level_step);
99 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.advance_or_arrears: ' || p_tqlv_rec.advance_or_arrears);
100 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_name: ' || p_tqlv_rec.yield_name);
101 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_value: ' || p_tqlv_rec.yield_value);
102 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.implicit_interest_rate: ' || p_tqlv_rec.implicit_interest_rate);
103 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_value: ' || p_tqlv_rec.asset_value);
104 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.residual_value: ' || p_tqlv_rec.residual_value);
105 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.unbilled_receivables: ' || p_tqlv_rec.unbilled_receivables);
106 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_quantity: ' || p_tqlv_rec.asset_quantity);
107 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.quote_quantity: ' || p_tqlv_rec.quote_quantity);
108 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_id: ' || p_tqlv_rec.split_kle_id);
109 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_name: ' || p_tqlv_rec.split_kle_name);
110 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_code: ' || p_tqlv_rec.currency_code);
111 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_code: ' || p_tqlv_rec.currency_conversion_code);
112 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_type: ' || p_tqlv_rec.currency_conversion_type);
113 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_rate: ' || p_tqlv_rec.currency_conversion_rate);
114 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_date: ' || p_tqlv_rec.currency_conversion_date);
115 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.due_date: ' || p_tqlv_rec.due_date);
116 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.try_id: ' || p_tqlv_rec.try_id);
117 	 END IF;
118     l_return_status := OKL_API.G_RET_STS_SUCCESS;
119 
120     -- Get quote and quote line details
121     FOR get_qte_dtls_rec IN get_qte_dtls_csr (p_tqlv_rec.id)
122     LOOP
123       l_quot_rec.id := get_qte_dtls_rec.id;
124       l_quot_rec.khr_id := get_qte_dtls_rec.khr_id;
125       l_quot_rec.qtp_code := get_qte_dtls_rec.qtp_code;
126 
127       IF (is_debug_statement_on) THEN
128         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_CREATE_QUOTE_PVT.get_net_gain_loss');
129       END IF;
130       -- recalculate gain/loss
131       OKL_AM_CREATE_QUOTE_PVT.get_net_gain_loss(
132                                  p_quote_rec      => l_quot_rec,
133                                  p_chr_id         => l_quot_rec.khr_id,
134                                  x_return_status  => l_return_status,
135                                  x_net_gain_loss  => lx_net_gain_loss);
136       IF (is_debug_statement_on) THEN
137         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_CREATE_QUOTE_PVT.get_net_gain_loss , return status: ' || l_return_status);
138       END IF;
139 
140       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
141       THEN
142         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
143       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
144       THEN
145         RAISE OKL_API.G_EXCEPTION_ERROR;
146       END IF;
147 
148       -- set the quote header elements for update
149       lp_quot_rec.id := l_quot_rec.id ;
150       lp_quot_rec.gain_loss := lx_net_gain_loss;
151 
152       IF (is_debug_statement_on) THEN
153         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TRX_QUOTES_PUB.update_trx_quotes');
154       END IF;
155       -- update the quote header with recalculated GAIN LOSS
156       OKL_TRX_QUOTES_PUB.update_trx_quotes (
157                 p_api_version      =>   l_api_version,
158                 p_init_msg_list    =>   OKL_API.G_FALSE,
159                 x_msg_count        =>   l_msg_count,
160                 x_msg_data         =>   l_msg_data,
161                 p_qtev_rec         =>   lp_quot_rec,
162                 x_qtev_rec         =>   lx_quot_rec,
163                 x_return_status    =>   l_return_status);
164       IF (is_debug_statement_on) THEN
165         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TRX_QUOTES_PUB.update_trx_quotes, return status: ' || l_return_status);
166       END IF;
167 
168       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
169       THEN
170         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
171       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
172       THEN
173         RAISE OKL_API.G_EXCEPTION_ERROR;
174       END IF;
175     END LOOP;
176 
177     x_return_status := l_return_status;
178     IF (is_debug_procedure_on) THEN
179       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
180     END IF;
181 
182   EXCEPTION
183     WHEN OKL_API.G_EXCEPTION_ERROR
184     THEN
185      IF (is_debug_exception_on) THEN
186        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
187      END IF;
188       x_return_status := OKL_API.G_RET_STS_ERROR;
189 
190     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR
191     THEN
192      IF (is_debug_exception_on) THEN
193        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
194      END IF;
195       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
196 
197     WHEN OTHERS
198     THEN
199       IF (is_debug_exception_on) THEN
200         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
201  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
202       END IF;
203       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
204       OKL_API.set_message(p_app_name      => G_APP_NAME,
205                           p_msg_name      => g_unexpected_error,
206                           p_token1        => g_sqlcode_token,
207                           p_token1_value  => sqlcode,
208                           p_token2        => g_sqlerrm_token,
209                           p_token2_value  => sqlerrm);
210 
211   END recalculate_quote;
212 
213   -- Start of comments
214   --
215   -- Function  Name  : validate_upd_quote_line
216   -- Description     : validate for quote rules during update of quote line
217   -- RULE 1          : Check for Min/Max rule if quote type "Purchase Amount" and Auto Quote
218   -- Business Rules  :
219   -- Parameters      : Input parameters : p_tqlv_rec
220   -- Version         : 1.0
221   -- History         : PAGARG 4102565 Created
222   --                 : rmunjulu Bug 4246171 Pass kle_id when evaluating min/max values.
223   --
224   -- End of comments
225   PROCEDURE validate_upd_quote_line(
226                x_return_status  OUT NOCOPY VARCHAR2,
227                p_tqlv_rec       IN tqlv_rec_type)
228   IS
229     -- Cursor to get the quote and quote line details
230     CURSOR get_qte_dtls_csr (p_line_id IN NUMBER) IS
231       SELECT  qte.id,
232               qte.qst_code,
233               qte.qtp_code,
234               qte.quote_number,
235               qte.khr_id,
236               qte.partial_yn,
237               qte.early_termination_yn,
238               tql.qlt_code,
239               tql.kle_id
240       FROM    okl_trx_quotes_b qte,
241               okl_txl_quote_lines_b tql
242       WHERE   tql.id  = p_line_id
243       AND     tql.qte_id = qte.id;
244 
245       -- Get asset number for line id
246       CURSOR get_asset_number_csr (p_line_id IN NUMBER) IS
247         SELECT kle.name asset_number
248         FROM   okc_k_lines_v kle
249         WHERE  kle.id = p_line_id;
250 
251       l_return_status VARCHAR2(3);
252 
253       g_empty_line_tbl OKL_AM_CALCULATE_QUOTE_PVT.asset_tbl_type;
254       g_sub_tqlv_tbl  OKL_AM_CALCULATE_QUOTE_PVT.tqlv_tbl_type;
255       l_qtev_rec OKL_AM_CALCULATE_QUOTE_PVT.qtev_rec_type;
256       l_min_max_value NUMBER;
257       l_rgd_code VARCHAR2(300);
258       l_operand VARCHAR2(300);
259       l_min_value NUMBER;
260       l_max_value NUMBER;
261       l_min_amt VARCHAR2(30);
262       l_max_amt VARCHAR2(30);
263       l_asset_num VARCHAR2(350);
264       l_module_name VARCHAR2(500) := G_MODULE_NAME || 'validate_upd_quote_line';
265       is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
266       is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
267       is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
268   BEGIN
269     IF (is_debug_procedure_on) THEN
270       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
271     END IF;
272 	 IF (is_debug_statement_on) THEN
273 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.id: ' || p_tqlv_rec.id);
274 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qlt_code: ' || p_tqlv_rec.qlt_code);
275 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.kle_id: ' || p_tqlv_rec.kle_id);
276 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.sty_id: ' || p_tqlv_rec.sty_id);
277 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qte_id: ' || p_tqlv_rec.qte_id);
278 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.line_number: ' || p_tqlv_rec.line_number);
279 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.amount: ' || p_tqlv_rec.amount);
280 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.modified_yn: ' || p_tqlv_rec.modified_yn);
281 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.taxed_yn: ' || p_tqlv_rec.taxed_yn);
282 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.defaulted_yn: ' || p_tqlv_rec.defaulted_yn);
283 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.org_id: ' || p_tqlv_rec.org_id);
284 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.start_date: ' || p_tqlv_rec.start_date);
285 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.period: ' || p_tqlv_rec.period);
286 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.number_of_periods: ' || p_tqlv_rec.number_of_periods);
287 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.lock_level_step: ' || p_tqlv_rec.lock_level_step);
288 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.advance_or_arrears: ' || p_tqlv_rec.advance_or_arrears);
289 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_name: ' || p_tqlv_rec.yield_name);
290 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_value: ' || p_tqlv_rec.yield_value);
291 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.implicit_interest_rate: ' || p_tqlv_rec.implicit_interest_rate);
292 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_value: ' || p_tqlv_rec.asset_value);
293 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.residual_value: ' || p_tqlv_rec.residual_value);
294 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.unbilled_receivables: ' || p_tqlv_rec.unbilled_receivables);
295 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_quantity: ' || p_tqlv_rec.asset_quantity);
296 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.quote_quantity: ' || p_tqlv_rec.quote_quantity);
297 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_id: ' || p_tqlv_rec.split_kle_id);
298 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_name: ' || p_tqlv_rec.split_kle_name);
299 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_code: ' || p_tqlv_rec.currency_code);
300 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_code: ' || p_tqlv_rec.currency_conversion_code);
301 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_type: ' || p_tqlv_rec.currency_conversion_type);
302 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_rate: ' || p_tqlv_rec.currency_conversion_rate);
303 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_date: ' || p_tqlv_rec.currency_conversion_date);
304 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.due_date: ' || p_tqlv_rec.due_date);
305 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.try_id: ' || p_tqlv_rec.try_id);
306 	 END IF;
307 
308     l_return_status := OKL_API.G_RET_STS_SUCCESS;
309 
310     -- Get quote and quote line details and check for min/max value for the same
311     FOR get_qte_dtls_rec IN get_qte_dtls_csr (p_tqlv_rec.id)
312     LOOP
313       -- RULE 1 : Check for Min/Max rule if quote type "Purchase Amount" and Auto Quote
314       IF  get_qte_dtls_rec.qlt_code = 'AMBPOC'  -- Purchase amount
315           AND get_qte_dtls_rec.qtp_code NOT LIKE 'TER_MAN%' -- Auto quote
316       THEN
317 
318         l_qtev_rec.id := get_qte_dtls_rec.id;
319         l_qtev_rec.khr_id := get_qte_dtls_rec.khr_id;
320 
321         IF NVL(get_qte_dtls_rec.early_termination_yn,'N') = 'Y'
322         THEN
323           l_rgd_code := 'AMTEOC'; -- Early Term Purchase Conditions
324         ELSE
325           l_rgd_code := 'AMTFOC'; -- End of Term Purchase Conditions
326         END IF;
327 
328         l_operand := 'AMBPOC'; -- Purchase Amount
329 
330         IF (is_debug_statement_on) THEN
331           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_CALCULATE_QUOTE_PVT.get_operand_value');
332         END IF;
333         -- Check for Min/Max Rule
334         OKL_AM_CALCULATE_QUOTE_PVT.get_operand_value (
335                            p_rgd_code         => l_rgd_code,
336                            p_operand          => l_operand,
337                            p_qtev_rec         => l_qtev_rec,
338                            p_rule_cle_id      => NULL,
339                            p_formul_cle_id    => get_qte_dtls_rec.kle_id, -- rmunjulu Bug 4246171 Pass kle_id when getting min/max values
340                            p_head_rgd_code    => NULL,
341                            p_line_rgd_code    => NULL,
342                            p_asset_tbl        => g_empty_line_tbl,
343                            px_sub_tqlv_tbl    => g_sub_tqlv_tbl,
344                            x_operand_value    => l_min_max_value,
345                            x_return_status    => l_return_status,
346                            x_min_value        => l_min_value,
347                            x_max_value        => l_max_value);
348         IF (is_debug_statement_on) THEN
349           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_CALCULATE_QUOTE_PVT.get_operand_value , return status: ' || l_return_status);
350           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_max_value  : ' || l_max_value);
351           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_min_max_value  : ' || l_min_max_value);
352           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_min_value  : ' || l_min_value);
353         END IF;
354 
355         -- Check if value entered falls within the range of Min/Max
356         IF p_tqlv_rec.amount < l_min_value
357            OR p_tqlv_rec.amount > l_max_value
358         THEN
359           l_min_amt := nvl(to_char(l_min_value),' '); -- rmunjulu 10-Jan-05 do nvl
360           l_max_amt := nvl(to_char(l_max_value),' '); -- rmunjulu 10-Jan-05 do nvl
361 
362           IF get_qte_dtls_rec.kle_id IS NOT NULL
363              OR  get_qte_dtls_rec.kle_id <> OKL_API.G_MISS_NUM
364           THEN
365 
366             -- get asset number
367             FOR get_asset_number_rec IN get_asset_number_csr (get_qte_dtls_rec.kle_id)
368             LOOP
369               l_asset_num := get_asset_number_rec.asset_number;
370             END LOOP;
371 
372             -- Invalid purchase amount entered AMT_ENTERED for Asset Number ASSET_NUM.
373             -- Please enter purchase amount within the range minimum = MIN_AMT and maximum = MAX_AMT.
374             OKL_API.set_message(
375                           p_app_name      => 'OKL',
376                           p_msg_name      => 'OKL_AM_MIN_MAX_ASSET_ERR',
377                           p_token1        => 'AMT_ENTERED',
378                           p_token1_value  => p_tqlv_rec.amount,
379                           p_token2        => 'ASSET_NUM',
380                           p_token2_value  => l_asset_num,
381                           p_token3        => 'MIN_AMT',
382                           p_token3_value  => l_min_amt,
383                           p_token4        => 'MAX_AMT',
384                           p_token4_value  => l_max_amt);
385 
386           ELSE -- Quote amount at contract level
387 
388             -- Invalid purchase amount entered AMT_ENTERED.
389             -- Please enter purchase amount within the range minimum = MIN_AMT and maximum = MAX_AMT.
390             OKL_API.set_message(
391                           p_app_name      => 'OKL',
392                           p_msg_name      => 'OKL_AM_MIN_MAX_ERR',
393                           p_token1        => 'AMT_ENTERED',
394                           p_token1_value  => p_tqlv_rec.amount,
395                           p_token2        => 'MIN_AMT',
396                           p_token2_value  => l_min_amt,
397                           p_token3        => 'MAX_AMT',
398                           p_token3_value  => l_max_amt);
399 
400           END IF;
401           l_return_status := OKL_API.G_RET_STS_ERROR;
402 
403         END IF;
404       END IF;
405     END LOOP;
406 
407     x_return_status := l_return_status;
408     IF (is_debug_procedure_on) THEN
409       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
410     END IF;
411 
412   EXCEPTION
413     WHEN OKL_API.G_EXCEPTION_ERROR
414     THEN
415      IF (is_debug_exception_on) THEN
416        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
417      END IF;
418       x_return_status := OKL_API.G_RET_STS_ERROR;
419 
420     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR
421     THEN
422      IF (is_debug_exception_on) THEN
423        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
424      END IF;
425       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
426 
427     WHEN OTHERS
428     THEN
429       IF (is_debug_exception_on) THEN
430         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
431  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
432       END IF;
433       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
434 
435       OKL_API.set_message(p_app_name      => G_APP_NAME,
436                           p_msg_name      => g_unexpected_error,
437                           p_token1        => g_sqlcode_token,
438                           p_token1_value  => sqlcode,
439                           p_token2        => g_sqlerrm_token,
440                           p_token2_value  => sqlerrm);
441 
442   END validate_upd_quote_line;
443 
444   -- Start of comments
445   --
446   -- Procedure Name	: check_asset_validity_in_fa
447   -- Description	: checks asset validity in Fixed Assets
448   -- Business Rules	: FA has following restriction during adjustment/retirment
449   --                  1. You can retire retroactively only in the current fiscal year,
450   --                  2. and only after the most recent transaction date.
451   --                  if p_check_fa_year = Y then will check for FA fiscal year validity
452   --                  if p_check_fa_trn = Y then will check for FA transaction date validity
453   -- Parameters		:
454   -- History        : rmunjulu EDAT Created
455   --                : rmunjulu Bug 4143251 Added code to check quote effective date should be
456   --                  in FA Fiscal year
457   -- Version		: 1.0
458   --
459   -- End of comments
460   PROCEDURE check_asset_validity_in_fa(
461                 p_kle_id          IN NUMBER,
462                 p_trn_date        IN DATE, -- quote eff from date will be passed
463                 p_check_fa_year   IN VARCHAR2,
464 				p_check_fa_trn    IN VARCHAR2,
465 				p_contract_number IN VARCHAR2,
466 				x_return_status   OUT NOCOPY VARCHAR2) AS
467 
468      -- get all books and asset_id for financial asset id (p_kle_id)
469      CURSOR get_fa_dtls_csr (p_kle_id IN NUMBER) IS
470          SELECT oal.asset_id asset_id,
471                 oal.asset_number asset_number,
472                 fab.book_type_code book_type_code
473          FROM   OKX_ASSET_LINES_V oal,
474 		        FA_BOOKS fab
475          WHERE  oal.parent_line_id = p_kle_id -- fin id
476          AND    oal.asset_id = fab.asset_id
477          AND    fab.date_ineffective IS NULL
478          AND    fab.transaction_header_id_out IS NULL;
479 
480     -- get the max transaction date from FA -- before this there can be no transaction
481     -- cursor provided by FA team
482 	CURSOR get_fa_trn_csr (p_asset_id in NUMBER,
483 	                       p_book     in VARCHAR2) IS
484          SELECT max(th.transaction_date_entered) transaction_date_entered
485          FROM   FA_TRANSACTION_HEADERS th
486          WHERE  th.asset_id = p_asset_id
487          AND    th.book_type_code = p_book;
488 
489 	l_max_transaction_date DATE;
490 	fa_exception EXCEPTION;
491 	l_return_status VARCHAR2(3);
492 
493 	-- rmunjulu Bug 4143251
494 	l_fa_fiscal_year VARCHAR2(10);
495 	l_quote_eff_year VARCHAR2(10);
496 
497         -- CDUBEY for Bug 5181502
498 	p_calendar_period_close_date DATE;
499     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_asset_validity_in_fa';
500     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
501     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
502     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
503 
504 
505   BEGIN
506      IF (is_debug_procedure_on) THEN
507        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
508      END IF;
509      IF (is_debug_statement_on) THEN
510        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_kle_id: ' || p_kle_id);
511        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: ' || p_trn_date);
512        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_check_fa_year: ' || p_check_fa_year);
513        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_check_fa_trn: ' || p_check_fa_trn);
514        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_number: ' || p_contract_number);
515      END IF;
516 
517      l_return_status := OKL_API.G_RET_STS_SUCCESS;
518 
519      -- loop thru all the FA books for the asset and for each book check the fa validations
520      FOR get_fa_dtls_rec IN get_fa_dtls_csr (p_kle_id) LOOP
521 
522         -- call cache for book details
523         IF NOT fa_cache_pkg.fazcbc(X_book => get_fa_dtls_rec.book_type_code) THEN
524 
525            -- message : error during FA check for contract CONTRACT_NUMBER.
526            OKL_API.set_message (
527             			 p_app_name     => 'OKL',
528            	    		 p_msg_name     => 'OKL_AM_ERR_FA_CHECK',
529                          p_token1       => 'CONTRACT_NUMBER',
530                          p_token1_value => p_contract_number);
531 
532            RAISE fa_exception;
533 
534         END IF;
535 
536         -- call the cache for fiscal year details
537         IF NOT fa_cache_pkg.fazcfy
538 
539           (X_fiscal_year_name => fa_cache_pkg.fazcbc_record.fiscal_year_name,
540 
541            X_fiscal_year => fa_cache_pkg.fazcbc_record.current_fiscal_year) THEN
542 
543            -- message : error during FA check for contract CONTRACT_NUMBER.
544            OKL_API.set_message (
545             			 p_app_name     => 'OKL',
546            	    		 p_msg_name     => 'OKL_AM_ERR_FA_CHECK',
547                          p_token1       => 'CONTRACT_NUMBER',
548                          p_token1_value => p_contract_number);
549 
550            RAISE fa_exception;
551 
552         END IF;
553 
554         -- check for FA fiscal year check to make sure trn date is not before current fiscal year date
555         IF p_check_fa_year = 'Y' THEN
556 
557            -- rmunjulu 4384945
558            IF NOT fa_cache_pkg.fazcdp(X_book_type_code => get_fa_dtls_rec.book_type_code) THEN
559 
560               -- message : error during FA check Deprn Period information.
561               OKL_API.set_message (
562             			 p_app_name     => 'OKL',
563            	    		 p_msg_name     => 'OKL_AM_ERR_FA_CHECK',
564                          p_token1       => 'CONTRACT_NUMBER',
565                          p_token1_value => p_contract_number);
566 
567               RAISE fa_exception;
568            END IF;
569 
570            -- if okl transaction date before current fiscal year then raise error
571 
572 	  -- CDUBEY for Bug 5181502, fa_cache_pkg is not refreshed with the current close period, so have quried the data from the table directly
573 	   SELECT calendar_period_close_date INTO  p_calendar_period_close_date FROM fa_deprn_periods WHERE  book_type_code = get_fa_dtls_rec.book_type_code AND period_close_date is null;
574 
575            IF (trunc(p_trn_date) < trunc(fa_cache_pkg.fazcfy_record.start_date)) THEN -- rmunjulu 4384945
576 
577                -- message Quote Effective From date EFFECTIVE_DATE can not be before Fixed Assets fiscal year start date START_DATE.
578                OKL_API.set_message (
579             			 p_app_name     => 'OKL',
580            	    		 p_msg_name     => 'OKL_AM_ERR_FA_YEAR_START_DATE',
581                          p_token1       => 'EFFECTIVE_DATE',
582                          p_token1_value => trunc(p_trn_date),
583                          p_token2       => 'START_DATE',
584 						 p_token2_value =>trunc(fa_cache_pkg.fazcfy_record.start_date));
585 
586                RAISE fa_exception;
587 
588             -- rmunjulu 4384945 if okl transaction date after Fixed Assets calendar period close date
589             ELSIF (trunc(p_trn_date) > trunc(p_calendar_period_close_date)) THEN -- CDUBEY for Bug 5181502
590 
591                 --Quote Effective From date EFFECTIVE_DATE can not be after Fixed Assets calendar period close date END_DATE.
592                 OKL_API.set_message (
593             			 p_app_name     => 'OKL',
594            	    		 p_msg_name     => 'OKL_AM_ERR_FA_CAL_END_DATE',
595                          p_token1       => 'EFFECTIVE_DATE',
596                          p_token1_value => trunc(p_trn_date),
597                          p_token2       => 'END_DATE',
598 						 p_token2_value =>trunc(p_calendar_period_close_date)); -- CDUBEY for Bug 5181502
599 
600                 RAISE fa_exception;
601            END IF;
602 
603 /*
604            -- rmunjulu Bug 4143251 Added check to make sure quote effective from date falls in current FA fiscal year
605 		   l_fa_fiscal_year := to_char(fa_cache_pkg.fazcbc_record.current_fiscal_year);
606 		   l_quote_eff_year := substr(to_char(p_trn_date,'MM/DD/YYYY'),7);
607 
608 		   -- If FA Fiscal year and quote effective date year do not match then error
609 		   IF l_fa_fiscal_year <> l_quote_eff_year THEN
610 
611                -- message : Quote Effective From date EFFECTIVE_DATE should be in current fixed assets fiscal year FA_FISCAL_YEAR.
612                OKL_API.set_message (
613             			 p_app_name     => 'OKL',
614            	    		 p_msg_name     => 'OKL_AM_ERR_FA_FISCAL_YEAR',
615                          p_token1       => 'EFFECTIVE_DATE',
616                          p_token1_value => trunc(p_trn_date),
617 						 p_token2       => 'FA_FISCAL_YEAR',
618 						 p_token2_value => l_fa_fiscal_year);
619 
620                RAISE fa_exception;
621 
622 		   END IF;
623 */
624         END IF;
625 
626         -- check for FA transactions to make sure trn date is not before any FA transactions
627         IF p_check_fa_trn = 'Y' THEN
628 
629            -- get the max transaction date for FA asset in this book
630            FOR get_fa_trn_rec IN get_fa_trn_csr (get_fa_dtls_rec.asset_id,
631 		                                         get_fa_dtls_rec.book_type_code) LOOP
632 
633 		       l_max_transaction_date := get_fa_trn_rec.transaction_date_entered;
634 
635            END LOOP;
636 
637            -- if okl transaction is before max transaction then raise error
638            IF (trunc(p_trn_date) <= trunc(l_max_transaction_date)) then
639 
640                -- message : Transactions in Fixed assets exist after Quote Effective From date EFFECTIVE_DATE.
641                OKL_API.set_message (
642             			 p_app_name     => 'OKL',
643            	    		 p_msg_name     => 'OKL_AM_ERR_FA_TRN',
644                          p_token1       => 'EFFECTIVE_DATE',
645                          p_token1_value => trunc(p_trn_date));
646 
647                RAISE fa_exception;
648 
649            END IF;
650         END IF;
651 	 END LOOP;
652 
653 	 x_return_status := l_return_status;
654     IF (is_debug_procedure_on) THEN
655       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
656     END IF;
657 
658   EXCEPTION
659 
660      WHEN fa_exception THEN
661      IF (is_debug_exception_on) THEN
662        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'fa_exception');
663      END IF;
664 
665       x_return_status := OKL_API.G_RET_STS_ERROR;
666 
667      WHEN OTHERS THEN
668       IF (is_debug_exception_on) THEN
669         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
670  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
671       END IF;
672 
673       x_return_status := OKL_API.G_RET_STS_ERROR;
674 
675       OKL_API.set_message(p_app_name      => G_APP_NAME,
676                           p_msg_name      => G_UNEXPECTED_ERROR,
677                           p_token1        => G_SQLCODE_TOKEN,
678                           p_token1_value  => sqlcode,
679                           p_token2        => G_SQLERRM_TOKEN,
680                           p_token2_value  => sqlerrm);
681 
682   END check_asset_validity_in_fa;
683 
684 
685   -- Start of comments
686   -- Function Name	: check_asset_sno
687   -- Description	: Check's for a given booked asset line, if there are serial numbers.
688   -- Business Rules	:
689   -- Parameters IN      : p_asset_line    -- Financial Asset line
690   --            OUT       x_return_status -- Status of the Procedure
691   --            OUT       x_sno_yn        -- True/False indicates Asset has serial Number or not.
692   --            OUT       x_clev_tbl      -- Install Base Line Id
693   -- Version		: 1.0
694   -- History            : BAKUCHIB 10-DEC-2002 Bug 2484327 Created
695   --                      RMUNJULU 24-JAN-03 2759726 Changed cursor and removed
696   --                      contract sts check
697   -- End of comments
698   FUNCTION check_asset_sno(p_asset_line IN OKL_K_LINES.ID%TYPE,
699                            x_sno_yn     OUT NOCOPY VARCHAR2,
700                            x_clev_tbl   OUT NOCOPY clev_tbl_type) RETURN VARCHAR2 AS
701 
702     G_CONTRACT_INACTIVE   CONSTANT VARCHAR2(200) := 'OKL_AM_CONTRACT_INACTIVE';
703     lv_sno_yn                      VARCHAR2(3) := OKL_API.G_FALSE;
704     i                              NUMBER := 0;
705     l_return_status                VARCHAR2(3)	:= OKL_API.G_RET_STS_SUCCESS;
706     lv_sts_code                    OKC_K_LINES_B.STS_CODE%TYPE;
707     lv_lty_code                    OKC_LINE_STYLES_B.LTY_CODE%TYPE;
708     lv_contract_number             OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
709 
710     -- Cursor to Know asset has serial number
711     -- RMUNJULU 24-JAN-03 2759726 Taken out the line status check
712     -- and check line sts same as header sts
713     CURSOR l_asset_sno_csr (p_asset_line  IN OKL_K_LINES.ID%TYPE) IS
714     SELECT csi.serial_number,
715            cle_ib.id
716     FROM csi_item_instances csi,
717          okc_k_items cim_ib,
718          okc_line_styles_b lse_ib,
719          okc_k_lines_b cle_ib,
720          okc_line_styles_b lse_inst,
721          okc_k_lines_b cle_inst,
722          okc_line_styles_b lse_fin,
723          okc_k_lines_b cle_fin,
724          okc_k_headers_b khr -- RMUNJULU 24-JAN-03 2759726 Added
725     WHERE cle_fin.cle_id is null
726 --    AND cle_fin.sts_code = 'BOOKED' -- RMUNJULU 24-JAN-03 2759726 Removed
727     AND cle_fin.chr_id = khr.id -- RMUNJULU 24-JAN-03 2759726 Added
728     AND cle_fin.sts_code = khr.sts_code -- RMUNJULU 24-JAN-03 2759726 Added
729     AND cle_fin.chr_id = cle_fin.dnz_chr_id
730     AND lse_fin.id = cle_fin.lse_id
731     AND lse_fin.lty_code = 'FREE_FORM1'
732     AND cle_inst.cle_id = cle_fin.id
733     AND cle_inst.dnz_chr_id = cle_fin.dnz_chr_id
734     AND cle_inst.lse_id = lse_inst.id
735     AND lse_inst.lty_code = 'FREE_FORM2'
736     AND cle_ib.cle_id = cle_inst.id
737     AND cle_ib.dnz_chr_id = cle_fin.dnz_chr_id
738     AND cle_ib.lse_id = lse_ib.id
739     AND lse_ib.lty_code = 'INST_ITEM'
740     AND cim_ib.cle_id = cle_ib.id
741     AND cim_ib.dnz_chr_id = cle_ib.dnz_chr_id
742     AND cim_ib.object1_id1 = csi.instance_id
743     AND cim_ib.object1_id2 = '#'
744     AND cim_ib.jtot_object1_code = 'OKX_IB_ITEM'
745     AND cle_fin.id = p_asset_line;
746 
747     -- To get the Line code of the asset line,
748     -- Status of the contract and the contract number
749     CURSOR l_ast_line_csr(p_asset_line OKL_K_LINES.ID%TYPE)
750     IS
751     SELECT lse.lty_code,
752            cle.sts_code,
753            chr.contract_number
754     FROM okc_k_lines_b cle,
755          okc_k_headers_b chr,
756          okc_line_styles_b lse
757     WHERE cle.id = p_asset_line
758     AND cle.lse_id = lse.id
759     AND cle.dnz_chr_id = chr.id;
760     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_asset_sno';
761     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
762     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
763     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
764 
765   BEGIN
766     IF (is_debug_procedure_on) THEN
767       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
768     END IF;
769     IF (is_debug_statement_on) THEN
770       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_asset_line: ' || p_asset_line);
771     END IF;
772 
773     OPEN  l_ast_line_csr(p_asset_line => p_asset_line);
774     FETCH l_ast_line_csr INTO lv_lty_code,
775                               lv_sts_code,
776                               lv_contract_number;
777     IF l_ast_line_csr%NOTFOUND THEN
778       OKL_API.set_message(p_app_name      => G_APP_NAME,
779                           p_msg_name      => G_NO_MATCHING_RECORD,
780                           p_token1        => G_COL_NAME_TOKEN,
781                           p_token1_value  => 'Asset Line');
782       RAISE OKL_API.G_EXCEPTION_ERROR;
783     END IF;
784     CLOSE l_ast_line_csr;
785 
786     IF lv_lty_code <> 'FREE_FORM1' THEN
787       OKL_API.set_message(p_app_name      => G_APP_NAME,
788                           p_msg_name      => G_INVALID_VALUE,
789                           p_token1        => G_COL_NAME_TOKEN,
790                           p_token1_value  => 'p_asset_line');
791       RAISE OKL_API.G_EXCEPTION_ERROR;
792     END IF;
793 
794     -- RMUNJULU 24-JAN-03 2759726 Removed check that K sts is Booked
795 --    IF lv_sts_code <> 'BOOKED' THEN
796       -- Unable to complete process because the Contract CONTRACT_NUMBER status is STATUS.
797 --      OKL_API.set_message(p_app_name      => G_APP_NAME,
798 --                          p_msg_name      => G_CONTRACT_INACTIVE,
799 --                          p_token1        => 'CONTRACT_NUMBER',
800 --                          p_token1_value  => lv_contract_number,
801 --                          p_token2        => 'STATUS',
802 --                          p_token2_value  => lv_sts_code);
803 --      RAISE OKL_API.G_EXCEPTION_ERROR;
804 --    END IF;
805 
806     -- Cursor to Know asset has serial number
807     FOR r_asset_sno_csr IN l_asset_sno_csr(p_asset_line => p_asset_line) LOOP
808       IF r_asset_sno_csr.serial_number IS NOT NULL OR
809          r_asset_sno_csr.serial_number <> OKL_API.G_MISS_CHAR THEN
810          lv_sno_yn := OKL_API.G_TRUE;
811       END IF;
812       x_clev_tbl(i).id := r_asset_sno_csr.id;
813       i := i + 1;
814     END LOOP;
815     x_sno_yn := lv_sno_yn;
816     IF (is_debug_procedure_on) THEN
817       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
818     END IF;
819     IF (is_debug_statement_on) THEN
820      OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_return_status: ' || l_return_status);
821     END IF;
822     RETURN l_return_status;
823   EXCEPTION
824     WHEN OKL_API.G_EXCEPTION_ERROR THEN
825       IF (is_debug_exception_on) THEN
826         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
827       END IF;
828       IF l_ast_line_csr%ISOPEN THEN
829         CLOSE l_ast_line_csr;
830       END IF;
831       IF l_asset_sno_csr%ISOPEN THEN
832         CLOSE l_asset_sno_csr;
833       END IF;
834       l_return_status := OKL_API.G_RET_STS_ERROR;
835       RETURN l_return_status;
836     WHEN OTHERS THEN
837       IF (is_debug_exception_on) THEN
838         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
839  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
840       END IF;
841 
842       IF l_ast_line_csr%ISOPEN THEN
843         CLOSE l_ast_line_csr;
844       END IF;
845       IF l_asset_sno_csr%ISOPEN THEN
846         CLOSE l_asset_sno_csr;
847       END IF;
848       OKL_API.set_message(p_app_name      => G_APP_NAME,
849                           p_msg_name      => g_unexpected_error,
850                           p_token1        => g_sqlcode_token,
851                           p_token1_value  => sqlcode,
852                           p_token2        => g_sqlerrm_token,
853                           p_token2_value  => sqlerrm);
854 
855       l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
856       RETURN l_return_status;
857   END check_asset_sno;
858 -----------------------------------------------------------------------------------------------------
859 --
860 -- BAKUCHIB Bug 2484327 end
861 --
862 
863   -- Start of comments
864   --
865   -- Procedure Name	: terminate_quote
866   -- Description	: terminates the quote
867   --
868   -- Business Rules	:
869   -- Parameters		:
870   -- History        : RMUNJULU -- 12-DEC-02 Bug # 2484327 -- Added code to check
871   --                  for accepted quote based on asset level termination changes
872   --                : RMUNJULU 30-DEC-02 2699412 Changed cursor and added code
873   --                  to cancel other termination quotes and set currency cols
874   --                : RMUNJULU 06-JAN-03 2736865 Added code to check date eff from
875   --                : RMUNJULU 14-JAN-03 2748581 Added condition to check only
876   --                  when partial line
877   --                : RMUNJULU 03-APR-03 2880556 Added condition to check for
878   --                  past unbilled streams
879   --                : RMUNJULU 07-APR-03 2883292 Changed the msg and added new token
880   --                : RMUNJULU 09-APR-03  Changed the query to get only BILLABLE streams
881   --                : RMUNJULU 14-APR-03 2904268 Added amount > 0
882   --                : RMUNJULU 3078988 Added code to check if accruals were done for the contract
883   --                : RMUNJULU 3061751 SERVICE K INTERGRATION CODE
884   --                : PAGARG   29-SEP-04 Bug #3921591
885   --                           Added additional parameter p_acceptance_source
886   --                           This is to identify the source from where this
887   --                           procedure is being called. Default value for this
888   --                           is null.
889   --                           Rollover quote can be accepted only through
890   --                           ativiation of rolled over contract. So, as part
891   --                           of that of that process, this procedure should be
892   --                           called with p_acceptance_source as 'ROLLOVER'
893   --                           throw error if p_acceptance_source is 'ROLLOVER'
894   --                           but quote is not a rollover quote.
895   --                : rmunjulu EDAT Added code to get quote_creation_date and do
896   --                  quote_eff_to_max date logic based on that. Also added code to check
897   --                  for insurance claims if pre-dated quote
898   --                : PAGARG   21-OCT-04 Bug# 3925453
899   --                           Release quote can be accepted only through
900   --                           ativiation of released contract. So, as part
901   --                           of that of that process, this procedure should be
902   --                           called with p_acceptance_source as 'RELEASE_CONTRACT'
903   --                           throw error if p_acceptance_source is 'RELEASE_CONTRACT'
904   --                           but quote is not a release quote.
905   --                           set the value of date_effective_to from dtabase
906   --                : rmunjulu 10-Nov-04 Rollover/Release Fixes for the checks
907   --                : rmunjulu EDAT Modified to check accruals till quote eff from date
908   --                : rmunjulu 19-Jan-05 4128965 Modified to NOT launch Workflow if ROLLOVER
909   --                : rmunjulu 21-Jan-05 4128965 Added additional check to catch error
910   --                : rmunjulu Bug 4143251 Modified to do FA checks for all quotes (NOT JUST PRIOR DATED QUOTES)
911   --                : rmunjulu EDAT 16-Feb-05 Added back the condition check for transactions only for POST dated quotes
912   --                : rmunjulu Bug 4201215 Eff_To date passed but already expired
913   --                : RMUNJULU LOANS_ENHANCEMENTS Termination with purchase not allowed for loans
914   --                   Partial Line Termination not allowed for loans with actual/estimated actual
915   --                   Also check for verify int calculation done or not
916   --                   Also use new API to check accruals done or not.
917   --                : SECHAWLA 04-JAN-06 4915133 - partial quotes not allowed for a loan K with rec rec method
918   --                   'ESTIMATED_AND_BILLED'/'ACTUAL'
919   -- Version		: 1.0
920   --
921   -- End of comments
922   PROCEDURE terminate_quote(
923     p_api_version                  	IN  NUMBER,
924     p_init_msg_list                	IN  VARCHAR2,
925     x_return_status                	OUT NOCOPY VARCHAR2,
926     x_msg_count                    	OUT NOCOPY NUMBER,
927     x_msg_data                     	OUT NOCOPY VARCHAR2,
928     p_term_rec                      IN  term_rec_type,
929     x_term_rec                      OUT NOCOPY term_rec_type,
930     x_err_msg                       OUT NOCOPY VARCHAR2,
931     p_acceptance_source             IN  VARCHAR2 DEFAULT NULL)  AS
932 
933 
934 
935     -- RMUNJULU -- 12-DEC-02 Bug # 2484327 Changes for Asset level termination
936     -- added qst_code to cursor
937     -- Cursor to get the database values for the quote
938     -- RMUNJULU 30-DEC-02 2699412 Added columns
939     -- RMUNJULU 3061751 Added partial_yn for SERVICE_K_INTEGRATION
940     CURSOR qte_db_vals_csr ( p_id IN NUMBER) IS
941     SELECT OKHV.id,
942            OTQV.accepted_yn,
943            OTQV.date_effective_from,
944            OTQV.date_effective_to,
945            OTQV.quote_number,
946            OKHV.contract_number,
947            OTQV.id qte_id,
948            OTQV.qtp_code,
949            OTQV.qst_code, -- RMUNJULU -- 12-DEC-02 Bug # 2484327 added
950            OTQV.currency_conversion_date, -- RMUNJULU 30-DEC-02 2699412 added
951            OTQV.currency_code, -- RMUNJULU 30-DEC-02 2699412 added
952            OTQV.currency_conversion_code, -- RMUNJULU 30-DEC-02 2699412 added
953            OTQV.partial_yn, -- RMUNJULU 3061751 Added
954            TRUNC(OTQV.creation_date), -- rmunjulu EDAT Added
955            OTQV.perdiem_amount, -- rmunjulu LOANS_ENHANCEMENT
956            OTQV.REPO_QUOTE_INDICATOR_YN -- Bug 6674730
957     FROM   OKL_TRX_QUOTES_V       OTQV,
958            OKL_K_HEADERS_FULL_V   OKHV
959     WHERE  OTQV.id       = p_id
960     AND    OTQV.khr_id   = OKHV.id;
961 
962 
963     -- Cursor to get the contract number
964     CURSOR get_k_num_csr ( p_khr_id IN NUMBER) IS
965     SELECT  contract_number
966     FROM    OKL_K_HEADERS_FULL_V K
967     WHERE   K.id = p_khr_id;
968 
969 
970       -- RMUNJULU -- 12-DEC-02 Bug # 2484327 Changes for Asset level termination
971       -- Get the lines for the quote
972       -- RMUNJULU 14-JAN-03 2748581 Added asset_quantity column
973       CURSOR get_qte_lines_csr ( p_qte_id IN NUMBER) IS
974          SELECT KLE.id   kle_id,
975                 KLE.name asset_name,
976                 TQL.id   tql_id,
977                 TQL.quote_quantity quote_quantity,
978                 TQL.asset_quantity asset_quantity
979          FROM   OKL_TXL_QUOTE_LINES_V  TQL,
980                 OKC_K_LINES_V          KLE
981          WHERE  TQL.qte_id = p_qte_id
982          AND    TQL.qlt_code = 'AMCFIA'
983          AND    TQL.kle_id = KLE.id;
984 
985 
986       -- RMUNJULU -- 12-DEC-02 Bug # 2484327 Changes for Asset level termination
987       -- Get the count of IB lines for the quote_line_id (TQL_ID )
988       CURSOR get_ib_lines_cnt_csr ( p_tql_id IN NUMBER) IS
989          SELECT COUNT(TXD.id) ib_lines_count
990          FROM   OKL_TXD_QUOTE_LINE_DTLS  TXD
991          WHERE  TXD.tql_id = p_tql_id;
992 
993 
994 
995       -- RMUNJULU 03-APR-03 2880556 Get the past unbilled streams for the contract
996       -- RMUNJULU 09-APR-03  Changed the query to get only BILLABLE streams
997       -- RMUNJULU 14-APR-03 2904268 Added amount > 0
998       CURSOR get_unbill_strms_csr ( p_khr_id IN NUMBER, p_eff_from_date IN DATE) IS
999             SELECT SEL.id
1000             FROM   OKL_STREAMS_V STM,
1001                    OKL_STRM_ELEMENTS_V SEL,
1002                    OKC_K_HEADERS_V KHR,
1003                    OKL_STRM_TYPE_B STY
1004             WHERE  KHR.id = p_khr_id
1005             AND    KHR.id = STM.khr_id
1006             AND    STM.id = SEL.stm_id
1007             AND    STM.say_code = 'CURR'
1008             AND    STM.active_yn = 'Y'
1009             AND    SEL.date_billed IS NULL
1010             AND    STM.sty_id = STY.id
1011             AND    NVL(STY.billable_yn,'N') = 'Y'
1012             AND    TRUNC(SEL.stream_element_date) <= TRUNC(p_eff_from_date)
1013             AND    SEL.amount > 0
1014             AND    ROWNUM < 2;
1015 
1016 
1017       -- RMUNJULU 3078988
1018       -- Returns if Accrual for contract till accrue till date has NOT been run
1019       CURSOR check_accrual_csr(p_chr_id NUMBER, p_accrue_till_date DATE) IS
1020       SELECT 'Y'
1021       FROM OKC_K_HEADERS_B CHR
1022       WHERE id = p_chr_id
1023       AND EXISTS (
1024              SELECT 1
1025              FROM        OKL_STRM_TYPE_B       sty,
1026                          OKL_STREAMS           stm,
1027                          OKL_STRM_ELEMENTS     ste,
1028                          OKL_PROD_STRM_TYPES_V psty,
1029                          OKL_K_HEADERS         khr
1030              WHERE stm.khr_id = chr.id
1031              AND khr.id = stm.khr_id
1032              AND stm.say_code = 'CURR'
1033              AND stm.active_yn = 'Y'
1034              AND stm.sty_id = sty.id
1035              AND sty.id = psty.sty_id
1036              AND psty.pdt_id = khr.pdt_id
1037              AND psty.accrual_yn = 'Y'
1038              AND stm.id = ste.stm_id
1039              AND ste.stream_element_date <= p_accrue_till_date
1040              AND ste.amount <> 0
1041              AND ste.accrued_yn IS NULL);
1042 
1043       -- rmunjulu EDAT
1044       -- check transactions for contract exist after p_date (which will be quote creation date)
1045       -- used for post dated terminations
1046       CURSOR chk_contract_trn_csr ( p_khr_id IN NUMBER, p_date IN DATE) IS
1047          SELECT trn.id id,
1048 		        fnd.meaning,
1049                 fnd.description,
1050                 TRUNC(trn.creation_date) transaction_date
1051          FROM   OKL_TRX_CONTRACTS trn,
1052                 FND_LOOKUPS fnd
1053          WHERE  trn.khr_id = p_khr_id
1054          --rkuttiya added for 12.1.1 Multi GAAP
1055          AND    trn.representation_type = 'PRIMARY'
1056          --
1057          AND    trunc(trn.creation_date) >= trunc(p_date)
1058          AND    fnd.lookup_type = 'OKL_TCN_TYPE'
1059          AND    fnd.lookup_code = trn.tcn_type
1060          AND    trn.tcn_type IN ('TMT',  -- Termination
1061                                  'ALT',  -- Asset Termination
1062 				  'EVG' , -- Evergreen --akrangan bug 5354501 fix added 'EVG'
1063 		                         'RVC',  -- Reverse
1064 		                         'SPLC', -- Split contract
1065 								 'TAA',  -- Transfer and Assumption
1066 								 'TRBK', -- Rebook
1067 								 'PPD'   -- Principal Paydown
1068 								 )
1069          AND    trn.tmt_status_code NOT IN ('CANCELED'); -- status --akrangan changed for sla tmt_status_code cr
1070 
1071       -- rmunjulu 4556370
1072       -- check transactions for contract exist after p_date (which will be quote creation date)
1073       -- used for post dated terminations
1074       -- Check for only non canceled and non processed transactions
1075       CURSOR chk_contract_trn_csr1 ( p_khr_id IN NUMBER, p_date IN DATE) IS
1076          SELECT trn.id id,
1077 		        fnd.meaning,
1078                 fnd.description,
1079                 TRUNC(trn.creation_date) transaction_date
1080          FROM   OKL_TRX_CONTRACTS trn,
1081                 FND_LOOKUPS fnd
1082          WHERE  trn.khr_id = p_khr_id
1083          --rkuttiya added for 12.1.1 Multi GAAP
1084          AND    trn.representation_type = 'PRIMARY'
1085          --
1086          AND    trunc(trn.creation_date) >= trunc(p_date)
1087          AND    fnd.lookup_type = 'OKL_TCN_TYPE'
1088          AND    fnd.lookup_code = trn.tcn_type
1089          AND    trn.tcn_type IN ('TMT',  -- Termination
1090                                  'ALT',  -- Asset Termination
1091 				 'EVG' , -- Evergreen --akrangan bug 5354501 fix added 'EVG'
1092 		                         'RVC',  -- Reverse
1093 		                         'SPLC', -- Split contract
1094 								 'TAA',  -- Transfer and Assumption
1095 								 'TRBK', -- Rebook
1096 								 'PPD'   -- Principal Paydown
1097 								 )
1098          AND    trn.tmt_status_code NOT IN ('CANCELED','PROCESSED'); -- status --akrangan changed for sla tmt_status_code cr
1099 
1100       -- rmunjulu EDAT
1101       -- check split asset transactions for contract exist after p_date (which will be quote creation date)
1102       -- used for post dated terminations
1103       CURSOR chk_split_trn_csr	(p_khr_id IN NUMBER, p_date IN DATE) IS
1104          SELECT tas.id,
1105 	            fnd.meaning,
1106                 fnd.description,
1107                 TRUNC(tas.creation_date) transaction_date
1108 	     FROM   OKL_TRX_ASSETS tas,
1109 		        OKL_TXL_ASSETS_V tal,
1110                 FND_LOOKUPS fnd
1111 		 WHERE  tas.id = tal.tas_id
1112 		 AND    tal.dnz_khr_id = p_khr_id
1113 		 AND    trunc(tas.creation_date) >= trunc(p_date)
1114          AND    fnd.lookup_type = 'OKL_TRANS_HEADER_TYPE'
1115          AND    fnd.lookup_code = tas.tas_type
1116 		 AND    tas.tas_type IN ('ALI') -- Split Asset Transaction
1117 		 AND    tas.tsu_code NOT IN ('CANCELED'); -- status
1118 
1119       -- rmunjulu 4556370
1120       -- check split asset transactions for contract exist after p_date (which will be quote creation date)
1121       -- used for post dated terminations]
1122 	  -- check for non canceled and non processed transactions
1123       CURSOR chk_split_trn_csr1	(p_khr_id IN NUMBER, p_date IN DATE) IS
1124          SELECT tas.id,
1125 	            fnd.meaning,
1126                 fnd.description,
1127                 TRUNC(tas.creation_date) transaction_date
1128 	     FROM   OKL_TRX_ASSETS tas,
1129 		        OKL_TXL_ASSETS_V tal,
1130                 FND_LOOKUPS fnd
1131 		 WHERE  tas.id = tal.tas_id
1132 		 AND    tal.dnz_khr_id = p_khr_id
1133 		 AND    trunc(tas.creation_date) >= trunc(p_date)
1134          AND    fnd.lookup_type = 'OKL_TRANS_HEADER_TYPE'
1135          AND    fnd.lookup_code = tas.tas_type
1136 		 AND    tas.tas_type IN ('ALI') -- Split Asset Transaction
1137 		 AND    tas.tsu_code NOT IN ('CANCELED','PROCESSED'); -- status
1138 
1139 	-- rmunjulu bug 4556370 added to check the setup
1140     CURSOR l_sys_prms_csr IS
1141       SELECT NVL(upper(CANCEL_QUOTES_YN), 'N') CANCEL_QUOTES
1142       FROM   OKL_SYSTEM_PARAMS;
1143 
1144     l_keep_existing_quotes_yn VARCHAR2(3);
1145 
1146     lp_term_rec                      term_rec_type := p_term_rec;
1147     lx_term_rec                      term_rec_type;
1148     l_trmn_rec                       OKL_AM_LEASE_LOAN_TRMNT_PUB.term_rec_type;
1149     l_tcnv_rec                       OKL_AM_LEASE_LOAN_TRMNT_PUB.tcnv_rec_type;
1150     l_err_msg                        VARCHAR2(2000);
1151     l_return_status                  VARCHAR2(200);
1152     l_quote_number                   NUMBER;
1153     lx_quot_rec                      OKL_AM_CREATE_QUOTE_PVT.quot_rec_type;
1154     l_quote_eff_to_dt                DATE;
1155     db_accepted_yn                   VARCHAR2(200);
1156     db_date_effective_from           DATE;
1157     db_date_effective_to             DATE;
1158     db_contract_id                   NUMBER;
1159     db_sysdate                       DATE;
1160     db_quote_number                  NUMBER;
1161     db_contract_number               VARCHAR2(2000);
1162     db_qte_id                        NUMBER;
1163     db_qtp_code                      VARCHAR2(200);
1164     l_quote_eff_days                 NUMBER;
1165     l_quote_eff_max_days             NUMBER;
1166     l_trn_exists                     VARCHAR2(1) := '?';
1167     l_api_name              CONSTANT VARCHAR2(30) := 'terminate_quote';
1168     l_api_version           CONSTANT NUMBER := 1;
1169     l_qtp_code                       VARCHAR2(30);
1170     l_quote_type                     VARCHAR2(200);
1171     l_contract_id                    NUMBER;
1172     l_contract_number                VARCHAR2(200);
1173     lx_contract_status               VARCHAR2(200);
1174     l_event_name                     VARCHAR2(2000);
1175     l_date_eff_from                  DATE;
1176     l_q_eff_quot_rec                 OKL_AM_CREATE_QUOTE_PVT.quot_rec_type;
1177 
1178 
1179     -- RMUNJULU -- 12-DEC-02 Bug # 2484327 Changes for Asset level termination
1180     -- Added these variables
1181     db_qst_code  VARCHAR2(200);
1182     l_qst_code_1 VARCHAR2(200);
1183     l_qst_code_2 VARCHAR2(200);
1184     lx_trn_tbl   OKL_AM_UTIL_PVT.trn_tbl_type;
1185     lx_quote_tbl OKL_AM_UTIL_PVT.quote_tbl_type;
1186     lx_asset_serialized_yn VARCHAR2(3);
1187     lx_clev_tbl  clev_tbl_type;
1188     l_ib_lines_count NUMBER;
1189 
1190 
1191     -- RMUNJULU 30-DEC-02 2699412 Added variables
1192     lp_canceled_qtev_rec term_rec_type;
1193     lx_canceled_qtev_rec term_rec_type;
1194     i NUMBER;
1195     db_currency_conversion_date DATE;
1196     db_functional_currency_code VARCHAR2(15);
1197     db_contract_currency_code VARCHAR2(15);
1198     l_currency_conversion_type VARCHAR2(30);
1199     l_currency_conversion_rate NUMBER;
1200     l_currency_conversion_date DATE;
1201     l_converted_amount NUMBER;
1202 
1203     -- Since we do not use the amount or converted amount in TRX_Quotes table
1204     -- set a hardcoded value for the amount (and pass to to
1205     -- OKL_ACCOUNTING_UTIL.convert_to_functional_currency and get back
1206     -- conversion values )
1207     l_hard_coded_amount NUMBER := 100;
1208 
1209     -- RMUNJULU 03-APR-03 2880556
1210     l_unbill_strms_yn VARCHAR2(1) := 'N';
1211     l_id NUMBER;
1212 
1213     -- RMUNJULU 3078988
1214     l_accrual_not_done VARCHAR2(3);
1215 
1216     -- RMUNJULU 3061751 Added variables for SERVICE_K_INTEGRATION
1217     db_partial_yn VARCHAR2(3);
1218     l_true_partial_quote VARCHAR2(1) := 'N';
1219     l_service_contract VARCHAR2(300);
1220     l_oks_chr_id NUMBER;
1221     l_msg_count NUMBER := OKL_API.G_MISS_NUM;
1222     l_msg_data VARCHAR2(2000);
1223     l_billing_done VARCHAR2(1);
1224 
1225     -- RMUNJULU 3061751 Added for SERVICE_K_INTEGRATION
1226     -- Get Service K details
1227     CURSOR get_service_k_dtls_csr(p_service_id IN NUMBER) IS
1228     SELECT CHR.contract_number
1229     FROM   OKC_K_HEADERS_B CHR
1230     WHERE  CHR.id = p_service_id;
1231 
1232     -- rmunjulu EDAT
1233     l_claims_exists VARCHAR2(3);
1234     db_creation_date DATE;
1235 
1236     -- rmunjulu LOANS_ENHANCEMENT
1237     l_deal_type VARCHAR2(300);
1238     l_rev_rec_method VARCHAR2(300);
1239 	l_int_cal_basis VARCHAR2(300);
1240 	l_tax_owner VARCHAR2(300);
1241     l_int_calc_done VARCHAR2(3);
1242     db_perdiem_amount NUMBER;
1243     l_accrual_done    VARCHAR2(3);
1244 
1245     --rmunjulu 4769094
1246     CURSOR check_accrual_previous_csr IS
1247     SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
1248     FROM OKL_SYSTEM_PARAMS;
1249 
1250     --rmunjulu 4769094
1251     l_accrual_previous_mnth_yn VARCHAR2(3);
1252     l_previous_mnth_last_date DATE;
1253    /* Bug 6674730 start */
1254     db_repo_yn VARCHAR2(1);
1255 
1256    CURSOR c_asset_return_csr(p_line_id IN NUMBER) IS
1257    SELECT ARS_CODE
1258    FROM OKL_ASSET_RETURNS_B
1259    WHERE kle_id = p_line_id
1260    AND ARS_CODE = 'REPOSSESSED';
1261 
1262    l_ars_code VARCHAR2(300);
1263 
1264    /* Bug 6674730 end */
1265    l_module_name VARCHAR2(500) := G_MODULE_NAME || 'terminate_quote';
1266    is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1267    is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1268    is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1269 
1270    -- RMUNJULU bug 6736148
1271    l_final_accrual_date DATE;
1272    l_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
1273 
1274    -- rmunjulu 6795295 get contract details
1275    CURSOR k_details_csr (l_khr_id IN NUMBER) IS
1276    SELECT sts_code,
1277           org_id
1278    FROM   Okc_K_Headers_b
1279    WHERE  id = l_khr_id;
1280 
1281    -- rmunjulu 6795295 get concurrent details
1282    CURSOR conc_details_csr (l_org_id IN NUMBER) IS
1283      SELECT P.user_concurrent_program_name,
1284             R.request_id request_id
1285      FROM   Fnd_Concurrent_Requests R,
1286             Fnd_Concurrent_Programs_VL P
1287       WHERE R.Concurrent_Program_Id = P.Concurrent_program_ID
1288         AND R.Program_Application_ID= P.Application_ID
1289         AND P.concurrent_program_name IN ( -- Following Concurrent Programs
1290                     'OKLAGNCALC' --Generate Accruals Master - Streams
1291                    ,'OKLAGNCALCW' -- Generate Accruals
1292                    ,'OKL_STREAM_BILLING' -- Process Billable Streams
1293                    ,'OKL_STREAM_BILLING_MASTER' -- Master Program -- Process Billable Streams
1294                     )
1295         AND R.org_id = l_org_id -- check if billing or accruals running for the same org
1296         AND R.phase_code = 'R'; -- Concurrent Program with Phase = 'Running'
1297 
1298    l_sts_code VARCHAR2(300);
1299    l_org_id NUMBER;
1300    l_conc_req_found VARCHAR2(3);
1301    conc_details_rec conc_details_csr%ROWTYPE;
1302    l_phase_meaning VARCHAR2(300);
1303    l_status_meaning VARCHAR2(300);
1304    l_dev_phase VARCHAR2(300);
1305    l_dev_status VARCHAR2(300);
1306    l_fnd_message VARCHAR2(300);
1307    l_success BOOLEAN;
1308    l_stream_bill_done_yn VARCHAR2(3);
1309   BEGIN
1310     IF (is_debug_procedure_on) THEN
1311       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
1312     END IF;
1313 	 IF (is_debug_statement_on) THEN
1314 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_acceptance_source: ' || p_acceptance_source);
1315 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.id: ' || p_term_rec.id);
1316 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.qrs_code: ' || p_term_rec.qrs_code);
1317 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.qst_code: ' || p_term_rec.qst_code);
1318 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.qtp_code: ' || p_term_rec.qtp_code);
1319 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.trn_code: ' || p_term_rec.trn_code);
1320 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.pop_code_end: ' || p_term_rec.pop_code_end);
1321 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.pop_code_early: ' || p_term_rec.pop_code_early);
1322 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.consolidated_qte_id: ' || p_term_rec.consolidated_qte_id);
1323 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.khr_id: ' || p_term_rec.khr_id);
1324 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.art_id: ' || p_term_rec.art_id);
1325 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.pdt_id: ' || p_term_rec.pdt_id);
1326 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.early_termination_yn: ' || p_term_rec.early_termination_yn);
1327 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.partial_yn: ' || p_term_rec.partial_yn);
1328 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.preproceeds_yn: ' || p_term_rec.preproceeds_yn);
1329 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_requested: ' || p_term_rec.date_requested);
1330 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_proposal: ' || p_term_rec.date_proposal);
1331 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_effective_to: ' || p_term_rec.date_effective_to);
1332 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_accepted: ' || p_term_rec.date_accepted);
1333 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.summary_format_yn: ' || p_term_rec.summary_format_yn);
1334 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.consolidated_yn: ' || p_term_rec.consolidated_yn);
1335 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.principal_paydown_amount: ' || p_term_rec.principal_paydown_amount);
1336 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.residual_amount: ' || p_term_rec.residual_amount);
1337 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.yield: ' || p_term_rec.yield);
1338 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.rent_amount: ' || p_term_rec.rent_amount);
1339 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_restructure_end: ' || p_term_rec.date_restructure_end);
1340 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_restructure_start: ' || p_term_rec.date_restructure_start);
1341 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.term: ' || p_term_rec.term);
1342 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.purchase_percent: ' || p_term_rec.purchase_percent);
1343 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_due: ' || p_term_rec.date_due);
1344 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.payment_frequency: ' || p_term_rec.payment_frequency);
1345 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.remaining_payments: ' || p_term_rec.remaining_payments);
1346 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_effective_from: ' || p_term_rec.date_effective_from);
1347 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.quote_number: ' || p_term_rec.quote_number);
1348 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.approved_yn: ' || p_term_rec.approved_yn);
1349 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.accepted_yn: ' || p_term_rec.accepted_yn);
1350 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.payment_received_yn: ' || p_term_rec.payment_received_yn);
1351 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_payment_received: ' || p_term_rec.date_payment_received);
1352 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_approved: ' || p_term_rec.date_approved);
1353 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.approved_by: ' || p_term_rec.approved_by);
1354 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.org_id: ' || p_term_rec.org_id);
1355 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.purchase_amount: ' || p_term_rec.purchase_amount);
1356 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.purchase_formula: ' || p_term_rec.purchase_formula);
1357 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.asset_value: ' || p_term_rec.asset_value);
1358 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.residual_value: ' || p_term_rec.residual_value);
1359 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.unbilled_receivables: ' || p_term_rec.unbilled_receivables);
1360 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.gain_loss: ' || p_term_rec.gain_loss);
1361 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.PERDIEM_AMOUNT: ' || p_term_rec.PERDIEM_AMOUNT);
1362 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_code: ' || p_term_rec.currency_code);
1363 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_conversion_code: ' || p_term_rec.currency_conversion_code);
1364 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_conversion_type: ' || p_term_rec.currency_conversion_type);
1365 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_conversion_rate: ' || p_term_rec.currency_conversion_rate);
1366 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_conversion_date: ' || p_term_rec.currency_conversion_date);
1367 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.legal_entity_id: ' || p_term_rec.legal_entity_id);
1368 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.repo_quote_indicator_yn: ' || p_term_rec.repo_quote_indicator_yn);
1369 	 END IF;
1370 
1371 
1372     -- LOGIC START --
1373 
1374     -- Fetch Database values for Quote
1375     -- Validate Qte_id
1376     -- Validate Contract
1377     -- Validate Qtp_code
1378     -- Validate p_acceptance_source to be rollover if quote is rollover quote
1379     -- Validate Date_effective_to
1380     -- If trying to accept this quote for the first time then
1381       -- If quote not reached eff from date then error end if
1382       -- If quote expired then error end if
1383       -- If quote status not 'APPROVED' then error end if
1384       -- If unprocessed trn for contract exists then error end if
1385       -- If accepted qte with no trn exists for contract then error end if
1386       -- Get the assets for quote
1387       -- Loop thru assets
1388         -- If asset serialized, then count of okl_txd_quote_line_dtls
1389         -- for the TQL_ID should equal the quote quantity
1390         -- Get other quotes for asset
1391         -- Loop thru quotes
1392              -- If different quote id and not completed or canceled then
1393                 -- Cancel
1394              -- End if
1395         -- End loop
1396       -- End loop
1397       -- If conversion_date different from sysdate then
1398            -- Set currency cols to be updated
1399       -- End if
1400       -- Securitization checks done
1401     -- Elseif trying to change accepted quote then error
1402     -- End if
1403     -- Update Trx Quote to accepted
1404     -- Launch the Pre/Post Proceeds WF
1405 
1406     -- LOGIC END --
1407 
1408 
1409     --Check API version, initialize message list and create savepoint.
1410     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
1411                                               G_PKG_NAME,
1412                                               p_init_msg_list,
1413                                               l_api_version,
1414                                               p_api_version,
1415                                               '_PVT',
1416                                               x_return_status);
1417 
1418     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1419       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1420     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1421       RAISE OKL_API.G_EXCEPTION_ERROR;
1422     END IF;
1423 
1424     -- initialize return variables
1425     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1426     x_err_msg       := OKL_API.G_RET_STS_SUCCESS;
1427 
1428     -----------------------
1429     -- GET/SET DB VALUES --
1430     -----------------------
1431 
1432     SELECT SYSDATE INTO db_sysdate FROM DUAL;
1433 
1434     -- Get tbe database values for the quote
1435     OPEN qte_db_vals_csr(lp_term_rec.id);
1436     FETCH qte_db_vals_csr INTO db_contract_id,
1437                                db_accepted_yn,
1438                                db_date_effective_from,
1439                                db_date_effective_to,
1440                                db_quote_number,
1441                                db_contract_number,
1442                                db_qte_id,
1443                                db_qtp_code,
1444                                db_qst_code, -- RMUNJULU Bug # 2484327 Added
1445                                db_currency_conversion_date, -- RMUNJULU 30-DEC-02 2699412 Added
1446                                --akrangan bug 6140771 codefix begin -- swapped the currency code variables ..
1447                                db_contract_currency_code, -- RMUNJULU 30-DEC-02 2699412 Added
1448 			       db_functional_currency_code, -- RMUNJULU 30-DEC-02 2699412 Added
1449 			       --akrangan bug 6140771 codefix end
1450                                db_partial_yn, -- RMUNJULU 3061751 Added
1451                                db_creation_date, -- rmunjulu EDAT Added
1452                                db_perdiem_amount, -- rmunjulu LOANS_ENHANCEMENT
1453                                db_repo_yn; -- Bug 6674730
1454     CLOSE qte_db_vals_csr;
1455 
1456     -- Check if quote id passed is valid
1457     IF db_qte_id IS NULL OR db_qte_id = OKL_API.G_MISS_NUM THEN
1458 
1459       OKL_API.set_message( p_app_name     => OKC_API.G_APP_NAME,
1460                            p_msg_name     => OKC_API.G_INVALID_VALUE,
1461                            p_token1       => OKC_API.G_COL_NAME_TOKEN,
1462                            p_token1_value => 'Quote id');
1463 
1464       RAISE OKL_API.G_EXCEPTION_ERROR;
1465 
1466     END IF;
1467 
1468     -- if Khr_Id not passed get from DB
1469     IF lp_term_rec.khr_id IS NULL OR lp_term_rec.khr_id = OKL_API.G_MISS_NUM THEN
1470       l_contract_id := db_contract_id;
1471       l_contract_number := db_contract_number;
1472     ELSE
1473       l_contract_id := lp_term_rec.khr_id;
1474       OPEN  get_k_num_csr (l_contract_id);
1475       FETCH get_k_num_csr INTO l_contract_number;
1476       CLOSE get_k_num_csr;
1477     END IF;
1478 
1479     -- rmunjulu 6795295 Get contract details
1480     OPEN k_details_csr (l_contract_id);
1481     FETCH k_details_csr INTO l_sts_code, l_org_id;
1482     CLOSE k_details_csr;
1483 
1484     -----------------------
1485     -- KHR_ID VALIDATION --
1486     -----------------------
1487 
1488     -- Call the validate contract to check contract status only if quote not accepted
1489     IF db_accepted_yn <> G_YES THEN
1490       IF (is_debug_statement_on) THEN
1491         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract');
1492       END IF;
1493       OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract(
1494            p_api_version                 =>   p_api_version,
1495            p_init_msg_list               =>   OKL_API.G_FALSE,
1496            x_return_status               =>   l_return_status,
1497            x_msg_count                   =>   x_msg_count,
1498            x_msg_data                    =>   x_msg_data,
1499            p_contract_id                 =>   l_contract_id,
1500            p_control_flag                =>   'TRMNT_QUOTE_UPDATE',
1501            x_contract_status             =>   lx_contract_status);
1502       IF (is_debug_statement_on) THEN
1503         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract , return status: ' || l_return_status);
1504       END IF;
1505 
1506       -- Raise exception if validate K fails
1507       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1508         RAISE OKL_API.G_EXCEPTION_ERROR;
1509       END IF;
1510     END IF;
1511 
1512     -----------------------
1513     -- QTP_CODE VALIDATION --
1514     -----------------------
1515 
1516     -- IF qtp_code not null then check if valid
1517     IF  lp_term_rec.qtp_code IS NOT NULL
1518     AND lp_term_rec.qtp_code <> OKL_API.G_MISS_CHAR
1519     AND lp_term_rec.qtp_code NOT LIKE 'TER%' THEN
1520 
1521       -- Please select a valid Quote Type.
1522       OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1523                            p_msg_name      => 'OKL_AM_QTP_CODE_INVALID');
1524 
1525       RAISE OKL_API.G_EXCEPTION_ERROR;
1526 
1527     -- if qtp_code is null then get from db and check
1528     ELSIF  (lp_term_rec.qtp_code IS NULL
1529     OR lp_term_rec.qtp_code = OKL_API.G_MISS_CHAR)
1530     AND db_qtp_code NOT LIKE 'TER%' THEN
1531 
1532       -- Please select a valid Quote Type.
1533       OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1534                            p_msg_name      => 'OKL_AM_QTP_CODE_INVALID');
1535 
1536       RAISE OKL_API.G_EXCEPTION_ERROR;
1537 
1538     END IF;
1539 
1540     -- rmunjulu Rollover/Release -- moved the checks into the If below where it first
1541     -- checks if quote being accepted
1542     -- rmunjulu Rollover/Release -- Also modified to check for nvl
1543 
1544     -- In case of acceptance of rollover quote from activation of contract, it
1545     -- is not required to pass date_effective_to so populate date_effective_to
1546     -- with the one in database for that quote.
1547     --Bug# 3925453: pagarg +++ T and A +++++++
1548     -- Use existing code for Rollover quote to populate date_effective_to
1549     -- for Release quote also.
1550     IF  lp_term_rec.qtp_code IS NOT NULL
1551     AND lp_term_rec.qtp_code <> OKL_API.G_MISS_CHAR
1552     THEN
1553        IF (lp_term_rec.qtp_code LIKE 'TER_ROLL%'
1554            AND p_acceptance_source = 'ROLLOVER')
1555        OR
1556           (lp_term_rec.qtp_code = 'TER_RELEASE_WO_PURCHASE'
1557            AND p_acceptance_source = 'RELEASE_CONTRACT')
1558        THEN
1559           lp_term_rec.date_effective_to := db_date_effective_to;
1560        END IF;
1561     -- if qtp_code is null then get from db and check
1562     ELSIF  (lp_term_rec.qtp_code IS NULL
1563     OR lp_term_rec.qtp_code = OKL_API.G_MISS_CHAR)
1564     THEN
1565        IF (db_qtp_code LIKE 'TER_ROLL%'
1566            AND p_acceptance_source = 'ROLLOVER')
1567        OR
1568           (db_qtp_code = 'TER_RELEASE_WO_PURCHASE'
1569            AND p_acceptance_source = 'RELEASE_CONTRACT')
1570        THEN
1571           lp_term_rec.date_effective_to := db_date_effective_to;
1572        END IF;
1573     END IF;
1574     --Bug #3921591: pagarg +++ Rollover +++++++ End ++++++++++
1575 
1576     -----------------------
1577     -- DATE_EFFECTIVE_TO VALIDATION --
1578     -----------------------
1579 
1580     -- Check if date_effective_to is NULL
1581     IF lp_term_rec.date_effective_to IS NULL
1582     OR lp_term_rec.date_effective_to = OKL_API.G_MISS_DATE THEN
1583 
1584       -- You must enter a value for PROMPT
1585       IF (NVL(db_repo_yn,'N') <> 'Y') THEN -- 6674730
1586         OKL_API.set_message(p_app_name     => OKL_API.G_APP_NAME,
1587                           p_msg_name     => 'OKL_AM_REQ_FIELD_ERR',
1588                           p_token1       => 'PROMPT',
1589                           p_token1_value => OKL_AM_UTIL_PVT.get_ak_attribute('OKL_EFFECTIVE_TO'));
1590 
1591         RAISE OKL_API.G_EXCEPTION_ERROR;
1592       END IF;
1593 
1594     END IF;
1595 
1596     -- Get the date_eff_from from database if not passed
1597     IF  (lp_term_rec.date_effective_from IS NOT NULL)
1598     AND (lp_term_rec.date_effective_from <> OKL_API.G_MISS_DATE) THEN
1599       l_date_eff_from := lp_term_rec.date_effective_from;
1600     ELSE
1601       l_date_eff_from := db_date_effective_from;
1602     END IF;
1603 
1604     -- Check date_eff_to > date_eff_from
1605     IF  (l_date_eff_from IS NOT NULL)
1606     AND (l_date_eff_from <> OKL_API.G_MISS_DATE)
1607     AND (lp_term_rec.date_effective_to IS NOT NULL)
1608     AND (lp_term_rec.date_effective_to <> OKL_API.G_MISS_DATE) THEN
1609 
1610        IF (TRUNC(lp_term_rec.date_effective_to) <= TRUNC(l_date_eff_from)) THEN
1611 
1612          -- Message : Date Effective To DATE_EFFECTIVE_TO cannot be before
1613          -- Date Effective From DATE_EFFECTIVE_FROM.
1614          OKL_API.SET_MESSAGE(p_app_name    	 => 'OKL',
1615       			                 p_msg_name		   => 'OKL_AM_DATE_EFF_FROM_LESS_TO',
1616       			                 p_token1		     => 'DATE_EFFECTIVE_TO',
1617     		  	                 p_token1_value	 => lp_term_rec.date_effective_to,
1618     			                   p_token2		     => 'DATE_EFFECTIVE_FROM',
1619     			                   p_token2_value	 => l_date_eff_from);
1620 
1621          RAISE OKL_API.G_EXCEPTION_ERROR;
1622        END IF;
1623     END IF;
1624 
1625     -- If date effective to changed then
1626     IF  (lp_term_rec.date_effective_to IS NOT NULL)
1627     AND (lp_term_rec.date_effective_to <> OKL_API.G_MISS_DATE)
1628     AND (lp_term_rec.date_effective_to <> db_date_effective_to) THEN
1629 
1630       -- set the date eff to from rules
1631       l_q_eff_quot_rec.khr_id := l_contract_id;
1632       l_q_eff_quot_rec.qtp_code := lp_term_rec.qtp_code;
1633 
1634       IF (is_debug_statement_on) THEN
1635         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_CREATE_QUOTE_PVT.quote_effectivity');
1636       END IF;
1637       OKL_AM_CREATE_QUOTE_PVT.quote_effectivity(
1638            p_quot_rec             => l_q_eff_quot_rec,
1639            x_quote_eff_days       => l_quote_eff_days,
1640            x_quote_eff_max_days   => l_quote_eff_max_days,
1641            x_return_status        => l_return_status);
1642       IF (is_debug_statement_on) THEN
1643         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_CREATE_QUOTE_PVT.quote_effectivity , return status: ' || l_return_status);
1644         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_quote_eff_days: ' || l_quote_eff_days);
1645         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_quote_eff_max_days: ' || l_quote_eff_max_days);
1646       END IF;
1647 
1648       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1649         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1650       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1651         RAISE OKL_API.G_EXCEPTION_ERROR;
1652       END IF;
1653 
1654       --rmunjulu EDAT removed and replaced with below logic
1655 --            l_quote_eff_to_dt := db_date_effective_from + l_quote_eff_max_days;
1656 
1657       -- rmunjulu EDAT logic for date_effective_to varies for pre and post
1658       IF trunc(db_sysdate) > trunc(l_date_eff_from) THEN -- pre dated
1659          -- PRE DATED QUOTE: effective_to = date_created + quote_eff_days
1660          l_quote_eff_to_dt   :=  db_creation_date + l_quote_eff_max_days;
1661       ELSIF trunc(db_sysdate) < trunc(l_date_eff_from) THEN -- post dated
1662          -- POST DATED QUOTE: effective_to = eff_from + quote_eff_days
1663          l_quote_eff_to_dt   :=  l_date_eff_from + l_quote_eff_max_days;
1664       ELSE -- current
1665          -- CURRENT DATED QUOTE: effective_to = eff_from + quote_eff_days
1666          l_quote_eff_to_dt   :=  l_date_eff_from + l_quote_eff_max_days;
1667       END IF;
1668 
1669 
1670       -- if max quote eff to date is less than sysdate then error
1671       IF TRUNC(l_quote_eff_to_dt) < TRUNC(db_sysdate) THEN
1672          --Message : Quote QUOTE_NUMBER is already expired.
1673          OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1674                               p_msg_name      => 'OKL_AM_QUOTE_ALREADY_EXP',
1675                               p_token1        => 'QUOTE_NUMBER',
1676                               p_token1_value  => db_quote_number);
1677 
1678          RAISE OKL_API.G_EXCEPTION_ERROR;
1679       END IF;
1680 
1681       -- if date is less than sysdate then error
1682       IF TRUNC(lp_term_rec.date_effective_to) < TRUNC(db_sysdate) THEN
1683         l_return_status := OKL_API.G_RET_STS_ERROR;
1684         -- Please enter an Effective To date that occurs
1685         -- after the current system date.
1686         OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1687                              p_msg_name      => 'OKL_AM_DATE_EFF_TO_PAST');
1688 
1689         RAISE OKL_API.G_EXCEPTION_ERROR;
1690       END IF;
1691 
1692       -- if eff_to date > l_quote_eff_to_dt then err msg
1693       IF  TRUNC(lp_term_rec.date_effective_to) > TRUNC(l_quote_eff_to_dt) THEN
1694         -- Please enter Effective To date before DATE_EFF_TO_MAX.
1695         OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1696                              p_msg_name      => 'OKL_AM_DATE_EFF_TO_ERR',
1697                              p_token1        => 'DATE_EFF_TO_MAX',
1698                              p_token1_value  => l_quote_eff_to_dt);
1699         RAISE OKL_API.G_EXCEPTION_ERROR;
1700       END IF;
1701 
1702     END IF;
1703 
1704     -- rmunjulu LOANS_ENHANCEMENT perdiem amount validation
1705     IF lp_term_rec.perdiem_amount IS NOT NULL
1706     AND lp_term_rec.perdiem_amount <> OKL_API.G_MISS_NUM THEN
1707 
1708        IF lp_term_rec.perdiem_amount <> nvl(db_perdiem_amount,OKL_API.G_MISS_NUM)
1709        AND db_qst_code NOT IN ('DRAFTED','REJECTED') THEN
1710 
1711         -- Perdiem amount is allowed to be updated for quotes in DRAFTED or REJECTED status.
1712         OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1713                              p_msg_name      => 'OKL_AM_PERDIEM_UPD_ERR');
1714         RAISE OKL_API.G_EXCEPTION_ERROR;
1715        END IF;
1716     END IF;
1717 
1718     -----------------------
1719     -- ACCEPTED_YN VALIDATION --
1720     -----------------------
1721 
1722     -- RMUNJULU -- 12-DEC-02 Bug # 2484327 -- START --
1723 
1724     -- Added code to check for accepted
1725     -- quote based on asset level termination changes
1726 
1727     -- If trying to accept this quote for the first time
1728     IF  lp_term_rec.accepted_yn IS NOT NULL
1729     AND lp_term_rec.accepted_yn <> OKL_API.G_MISS_CHAR
1730     AND lp_term_rec.accepted_yn = G_YES
1731     AND db_accepted_yn = G_NO THEN
1732 
1733         -- RMUNJULU 06-JAN-03 2736865 Added code to check date eff from -- START
1734 
1735         -- *****************
1736         -- If quote not reached Effective From Date then error
1737         -- *****************
1738 
1739          -- if quote eff from date is greater than sysdate then error
1740          IF TRUNC(l_date_eff_from) > TRUNC(db_sysdate) THEN
1741 
1742             -- Quote QUOTE_NUMBER can only be accepted during the quote effective dates.
1743             OKL_API.set_message( p_app_name      => 'OKL',
1744                                  p_msg_name      => 'OKL_AM_DATE_EFF_FROM_ACC',
1745                                  p_token1        => 'QUOTE_NUMBER',
1746                                  p_token1_value  => db_quote_number);
1747 
1748             RAISE OKL_API.G_EXCEPTION_ERROR;
1749 
1750         END IF;
1751 
1752         -- RMUNJULU 06-JAN-03 2736865  -- END
1753 
1754 
1755 
1756         -- *****************
1757         -- If quote EXPIRED then error
1758         -- *****************
1759 
1760 
1761         -- If date_eff_to is not passed
1762         IF ((lp_term_rec.date_effective_to IS NULL) OR
1763            (lp_term_rec.date_effective_to = OKL_API.G_MISS_DATE))
1764 		AND (NVL(db_repo_yn,'N') <> 'Y') THEN -- 6674730 -- No quote expiration if Repo Quote
1765 
1766           --if quote expired
1767           IF TRUNC(db_sysdate) > TRUNC(db_date_effective_to)  THEN
1768 
1769             --Message : Quote QUOTE_NUMBER is already expired.
1770             OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1771                                  p_msg_name      => 'OKL_AM_QUOTE_ALREADY_EXP',
1772                                  p_token1        => 'QUOTE_NUMBER',
1773                                  p_token1_value  => db_quote_number);
1774 
1775             RAISE OKL_API.G_EXCEPTION_ERROR;
1776 
1777           END IF;
1778 
1779         ELSE -- rmunjulu Bug 4201215 Eff_To date passed but already expired
1780 
1781           --if quote expired
1782           IF TRUNC(db_sysdate) > TRUNC(lp_term_rec.date_effective_to) THEN
1783 
1784             --Message : Quote QUOTE_NUMBER is already expired.
1785             OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1786                                  p_msg_name      => 'OKL_AM_QUOTE_ALREADY_EXP',
1787                                  p_token1        => 'QUOTE_NUMBER',
1788                                  p_token1_value  => db_quote_number);
1789 
1790             RAISE OKL_API.G_EXCEPTION_ERROR;
1791 
1792           END IF;
1793 
1794         END IF;
1795 
1796 
1797         -- *****************
1798         -- If quote status not APPROVED then error
1799         -- *****************
1800 
1801         -- Get APPROVED meaning
1802         l_qst_code_1 := OKL_AM_UTIL_PVT.get_lookup_meaning(
1803                                       'OKL_QUOTE_STATUS',
1804                                       'APPROVED',
1805                                       'Y');
1806 
1807         -- Get ACCEPTED meaning
1808         l_qst_code_2 := OKL_AM_UTIL_PVT.get_lookup_meaning(
1809                                       'OKL_QUOTE_STATUS',
1810                                       'ACCEPTED',
1811                                       'Y');
1812 
1813         -- Check qst_code
1814         IF  lp_term_rec.qst_code IS NOT NULL
1815         AND lp_term_rec.qst_code  <> OKL_API.G_MISS_CHAR THEN
1816 
1817 
1818            IF lp_term_rec.qst_code <> 'APPROVED' THEN
1819 
1820 
1821               -- Quote QUOTE_NUMBER should be QST_CODE_APPROVED before
1822               -- it is QST_CODE_ACCEPTED.
1823               OKL_API.set_message (
1824               			 p_app_name  	  => 'OKL',
1825               			 p_msg_name  	  => 'OKL_AM_QTE_APPROVE_ERR',
1826                      p_token1       => 'QUOTE_NUMBER',
1827                      p_token1_value => db_quote_number,
1828                      p_token2       => 'QST_CODE_APPROVED',
1829                      p_token2_value => l_qst_code_1,
1830                      p_token3       => 'QST_CODE_ACCEPTED',
1831                      p_token3_value => l_qst_code_2);
1832 
1833               RAISE OKL_API.G_EXCEPTION_ERROR;
1834 
1835            END IF;
1836 
1837 
1838         ELSE -- qst_code not passed so check db value
1839 
1840 
1841            IF db_qst_code <> 'APPROVED' THEN
1842 
1843               -- Quote QUOTE_NUMBER should be QST_CODE_APPROVED before
1844               -- it is QST_CODE_ACCEPTED.
1845               OKL_API.set_message (
1846               			 p_app_name  	  => 'OKL',
1847               			 p_msg_name  	  => 'OKL_AM_QTE_APPROVE_ERR',
1848                      p_token1       => 'QUOTE_NUMBER',
1849                      p_token1_value => db_quote_number,
1850                      p_token2       => 'QST_CODE_APPROVED',
1851                      p_token2_value => l_qst_code_1,
1852                      p_token3       => 'QST_CODE_ACCEPTED',
1853                      p_token3_value => l_qst_code_2);
1854 
1855               RAISE OKL_API.G_EXCEPTION_ERROR;
1856 
1857            END IF;
1858 
1859         END IF;
1860 
1861     --Bug #3921591: pagarg +++ Rollover +++++++ Start ++++++++++
1862     -----------------------
1863     -- P_ACCEPTANCE_SOURCE VALIDATION --
1864     -----------------------
1865     -- If acceptance source is rollover and quote type is not rollover then
1866     -- raise invalid value error.
1867     IF nvl(p_acceptance_source,'*') = 'ROLLOVER' -- rmunjulu Rollover/Release Use nvl
1868     THEN
1869        IF  lp_term_rec.qtp_code IS NOT NULL
1870        AND lp_term_rec.qtp_code <> OKL_API.G_MISS_CHAR
1871        THEN
1872           IF lp_term_rec.qtp_code NOT LIKE 'TER_ROLL%'
1873           THEN
1874              OKL_API.set_message(p_app_name      => G_APP_NAME,
1875                                  p_msg_name      => G_INVALID_VALUE,
1876                                  p_token1        => G_COL_NAME_TOKEN,
1877                                  p_token1_value  => 'Acceptance Source');
1878              RAISE OKL_API.G_EXCEPTION_ERROR;
1879           END IF;
1880        ELSIF (lp_term_rec.qtp_code IS NULL
1881        OR lp_term_rec.qtp_code = OKL_API.G_MISS_CHAR)
1882        THEN
1883           IF db_qtp_code NOT LIKE 'TER_ROLL%'
1884           THEN
1885              OKL_API.set_message(p_app_name      => G_APP_NAME,
1886                                  p_msg_name      => G_INVALID_VALUE,
1887                                  p_token1        => G_COL_NAME_TOKEN,
1888                                  p_token1_value  => 'Acceptance Source');
1889              RAISE OKL_API.G_EXCEPTION_ERROR;
1890           END IF;
1891        END IF;
1892     END IF;
1893 
1894     -- If quote is rollover quote and acceptance_source is not ROLLOVER then
1895     -- throw error message as rollover quote can be accepted only from rolled
1896     -- over contract.
1897     IF  lp_term_rec.qtp_code IS NOT NULL
1898     AND lp_term_rec.qtp_code <> OKL_API.G_MISS_CHAR
1899     THEN
1900        IF lp_term_rec.qtp_code LIKE 'TER_ROLL%'
1901        AND nvl(p_acceptance_source,'*') <> 'ROLLOVER' -- rmunjulu Rollover/Release Use nvl
1902        THEN
1903           -- Rollover quote can be accepted only from rolled over contract
1904           OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1905                                p_msg_name      => 'OKL_NO_ACPT_ROLL_QTE');
1906           RAISE OKL_API.G_EXCEPTION_ERROR;
1907        END IF;
1908     -- if qtp_code is null then get from db and check
1909     ELSIF (lp_term_rec.qtp_code IS NULL
1910     OR lp_term_rec.qtp_code = OKL_API.G_MISS_CHAR)
1911     THEN
1912        IF db_qtp_code LIKE 'TER_ROLL%'
1913        AND nvl(p_acceptance_source,'*') <> 'ROLLOVER' -- rmunjulu Rollover/Release Use nvl
1914        THEN
1915           -- Rollover quote can be accepted only from rolled over contract
1916           OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1917                                p_msg_name      => 'OKL_NO_ACPT_ROLL_QTE');
1918           RAISE OKL_API.G_EXCEPTION_ERROR;
1919        END IF;
1920     END IF;
1921 
1922     --Bug# 3925453: pagarg +++ T and A +++++++ Start ++++++++++
1923     -- If acceptance source is RELEASE_CONTRACT and quote type is not release quote then
1924     -- raise invalid value error.
1925     IF nvl(p_acceptance_source,'*') = 'RELEASE_CONTRACT' -- rmunjulu Rollover/Release Use nvl
1926     THEN
1927        IF  lp_term_rec.qtp_code IS NOT NULL
1928        AND lp_term_rec.qtp_code <> OKL_API.G_MISS_CHAR
1929        THEN
1930           IF lp_term_rec.qtp_code <> 'TER_RELEASE_WO_PURCHASE'
1931           THEN
1932              OKL_API.set_message(p_app_name      => G_APP_NAME,
1933                                  p_msg_name      => G_INVALID_VALUE,
1934                                  p_token1        => G_COL_NAME_TOKEN,
1935                                  p_token1_value  => 'Acceptance Source');
1936              RAISE OKL_API.G_EXCEPTION_ERROR;
1937           END IF;
1938        ELSIF (lp_term_rec.qtp_code IS NULL
1939        OR lp_term_rec.qtp_code = OKL_API.G_MISS_CHAR)
1940        THEN
1941           IF db_qtp_code <> 'TER_RELEASE_WO_PURCHASE'
1942           THEN
1943              OKL_API.set_message(p_app_name      => G_APP_NAME,
1944                                  p_msg_name      => G_INVALID_VALUE,
1945                                  p_token1        => G_COL_NAME_TOKEN,
1946                                  p_token1_value  => 'Acceptance Source');
1947              RAISE OKL_API.G_EXCEPTION_ERROR;
1948           END IF;
1949        END IF;
1950     END IF;
1951 
1952     -- If quote is release quote and acceptance_source is not RELEASE_CONTRACT then
1953     -- throw error message as release quote can be accepted only from released
1954     -- contract.
1955     IF  lp_term_rec.qtp_code IS NOT NULL
1956     AND lp_term_rec.qtp_code <> OKL_API.G_MISS_CHAR
1957     THEN
1958        IF lp_term_rec.qtp_code = 'TER_RELEASE_WO_PURCHASE'
1959        AND nvl(p_acceptance_source,'*') <> 'RELEASE_CONTRACT' -- rmunjulu Rollover/Release Use nvl
1960        THEN
1961           -- Rollover quote can be accepted only from rolled over contract
1962           OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1963                                p_msg_name      => 'OKL_AM_NO_ACPT_RELEASE_QTE');
1964           RAISE OKL_API.G_EXCEPTION_ERROR;
1965        END IF;
1966     -- if qtp_code is null then get from db and check
1967     ELSIF (lp_term_rec.qtp_code IS NULL
1968     OR lp_term_rec.qtp_code = OKL_API.G_MISS_CHAR)
1969     THEN
1970        IF db_qtp_code = 'TER_RELEASE_WO_PURCHASE'
1971        AND nvl(p_acceptance_source,'*') <> 'RELEASE_CONTRACT' -- rmunjulu Rollover/Release Use nvl
1972        THEN
1973           -- Rollover quote can be accepted only from rolled over contract
1974           OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
1975                                p_msg_name      => 'OKL_AM_NO_ACPT_RELEASE_QTE');
1976           RAISE OKL_API.G_EXCEPTION_ERROR;
1977        END IF;
1978     END IF;
1979     --Bug# 3925453: pagarg +++ T and A +++++++ End ++++++++++
1980 
1981 
1982         -- *****************
1983         -- IF unprocessed termination trn exists for the contract then error
1984         -- *****************
1985 
1986         IF (is_debug_statement_on) THEN
1987           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_transactions');
1988         END IF;
1989         -- Get all the unprocessed transactions for the contract
1990         OKL_AM_UTIL_PVT.get_contract_transactions (
1991              p_khr_id        => l_contract_id,
1992              x_trn_tbl       => lx_trn_tbl,
1993              x_return_status => l_return_status);
1994         IF (is_debug_statement_on) THEN
1995           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_contract_transactions , return status: ' || l_return_status);
1996         END IF;
1997 
1998         -- Check the return status
1999         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2000 
2001             -- Error occured in util proc, message set by util proc raise exp
2002             RAISE OKL_API.G_EXCEPTION_ERROR;
2003 
2004         END IF;
2005 
2006         -- Check if termination transaction exists for the asset
2007         IF lx_trn_tbl.COUNT > 0 THEN
2008 
2009            -- A termination transaction for the contract CONTRACT_NUMBER
2010            -- is already in progress.
2011            OKL_API.set_message (
2012          			       p_app_name  	  => 'OKL',
2013               			 p_msg_name  	  => 'OKL_AM_K_PENDING_TRN_ERROR',
2014                      p_token1       => 'CONTRACT_NUMBER',
2015                      p_token1_value => db_contract_number);
2016 
2017             RAISE OKL_API.G_EXCEPTION_ERROR;
2018 
2019         END IF;
2020 
2021 
2022         -- *****************
2023         -- IF accepted quote with no trn exists for contract then error
2024         -- *****************
2025 
2026         IF (is_debug_statement_on) THEN
2027           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_non_trn_contract_quotes');
2028         END IF;
2029         -- Get accepted quote for contract with no trn
2030         OKL_AM_UTIL_PVT.get_non_trn_contract_quotes (
2031            p_khr_id        => l_contract_id,
2032            x_quote_tbl     => lx_quote_tbl,
2033            x_return_status => l_return_status);
2034         IF (is_debug_statement_on) THEN
2035           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);
2036         END IF;
2037 
2038         -- Check the return status
2039         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2040 
2041             -- Error occured in util proc, message set by util proc raise exp
2042             RAISE OKL_API.G_EXCEPTION_ERROR;
2043 
2044         END IF;
2045 
2046         -- Check if accepted quote exists for the contract
2047         IF lx_quote_tbl.COUNT > 0 THEN
2048 
2049             l_quote_type := OKL_AM_UTIL_PVT.get_lookup_meaning(
2050                                       'OKL_QUOTE_TYPE',
2051                                       lx_quote_tbl(lx_quote_tbl.FIRST).qtp_code,
2052                                       'Y');
2053 
2054             -- Accepted quote QUOTE_NUMBER of quote type QUOTE_TYPE exists for
2055             -- contract CONTRACT_NUMBER. Cannot accept multiple quotes for the
2056             -- same contract.
2057             OKL_API.set_message (
2058          			 p_app_name  	  => 'OKL',
2059          			 p_msg_name  	  => 'OKL_AM_QTE_ACC_EXISTS_ERR',
2060                p_token1       => 'QUOTE_NUMBER',
2061                p_token1_value => lx_quote_tbl(lx_quote_tbl.FIRST).quote_number,
2062                p_token2       => 'QUOTE_TYPE',
2063                p_token2_value => l_quote_type,
2064                p_token3       => 'CONTRACT_NUMBER',
2065                p_token3_value => db_contract_number);
2066 
2067             RAISE OKL_API.G_EXCEPTION_ERROR;
2068 
2069         END IF;
2070 
2071 
2072         -- rmunjulu EDAT Added code to check for insurance claims if exist for a pre-dated quote
2073         IF trunc(l_date_eff_from) < trunc(db_creation_date) THEN
2074 
2075            IF (is_debug_statement_on) THEN
2076              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_INSURANCE_POLICIES_PUB.check_claims');
2077            END IF;
2078            -- check that no claims exist
2079            OKL_INSURANCE_POLICIES_PUB.check_claims(
2080                     p_api_version      => p_api_version,
2081                     p_init_msg_list    => p_init_msg_list,
2082                     x_return_status    => l_return_status,
2083                     x_msg_count        => x_msg_count,
2084                     x_msg_data         => x_msg_data,
2085                     p_khr_id           => l_contract_id,
2086                     x_clm_exist        => l_claims_exists,
2087                     p_trx_date         => l_date_eff_from);
2088            IF (is_debug_statement_on) THEN
2089              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_INSURANCE_POLICIES_PUB.check_claims , return status: ' || l_return_status);
2090            END IF;
2091 
2092            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2093 
2094               -- Error checking claims for contract CONTRACT_NUMBER.
2095               OKL_API.set_message (
2096             			 p_app_name     => 'OKL',
2097            	    		 p_msg_name     => 'OKL_AM_ERR_CHECK_CLAIMS',
2098                          p_token1       => 'CONTRACT_NUMBER',
2099                          p_token1_value => db_contract_number);
2100 
2101               RAISE OKL_API.G_EXCEPTION_ERROR;
2102 
2103            END IF;
2104 
2105            -- If claims exist do not accept quote
2106            IF nvl(l_claims_exists, 'N') = 'Y' THEN
2107 
2108               -- Claims exist for the contract CONTRACT_NUMBER.
2109               OKL_API.set_message (
2110             			 p_app_name     => 'OKL',
2111            	    		 p_msg_name     => 'OKL_AM_INS_CLAIMS_EXIST',
2112                          p_token1       => 'CONTRACT_NUMBER',
2113                          p_token1_value => db_contract_number);
2114 
2115               RAISE OKL_API.G_EXCEPTION_ERROR;
2116 
2117            END IF;
2118 
2119 
2120         END IF;
2121 
2122         -- rmunjulu EDAT Added code to check for transactions if post-dated quote
2123         IF trunc(l_date_eff_from) > trunc(db_creation_date) THEN
2124         -- rmunjulu 4143251 Removed the above condition, NOW check for transactions in all cases PRIOR, CURRENT and POST DATED
2125         -- rmunjulu EDAT Added back the above condition, NOW check for transactions only for POST dated quotes
2126 
2127 		    -- RMUNJULU 4556370 initialize variable
2128 		   l_keep_existing_quotes_yn := 'N';
2129 
2130            -- RMUNJULU 4556370 Check system option
2131            OPEN l_sys_prms_csr;
2132            FETCH l_sys_prms_csr INTO l_keep_existing_quotes_yn;
2133            IF l_sys_prms_csr%NOTFOUND THEN
2134               l_keep_existing_quotes_yn := 'N';
2135            END IF;
2136            CLOSE l_sys_prms_csr;
2137 
2138            -- RMUNJULU 4556370 added condition to check for non cancelled trns only when cancel quotes setup
2139            -- rmunjulu 4556370 logic is now reversed if retain existing termination quotes is NO then do earlier processing
2140            IF nvl(l_keep_existing_quotes_yn,'N') = 'N' THEN
2141 
2142 		   -- check for transactions for rebook, reverse, split contract, transfer and assumption
2143 		   -- which exists after the quote creation date and which are not canceled
2144 		   FOR chk_contract_trn_rec IN chk_contract_trn_csr (l_contract_id, db_creation_date) LOOP
2145 
2146 		      -- if trn exist raise error
2147 		      IF  chk_contract_trn_rec.id IS NOT NULL THEN
2148 
2149                  -- Transaction exists for contract CONTRACT_NUMBER which was processed
2150 			     -- after this quote was created. This quote is now invalid.
2151                  OKL_API.set_message (
2152             			 p_app_name     => 'OKL',
2153            	    		 p_msg_name     => 'OKL_AM_TRN_EXISTS_ERR',
2154                          p_token1       => 'CONTRACT_NUMBER',
2155                          p_token1_value => db_contract_number);
2156 
2157                  RAISE OKL_API.G_EXCEPTION_ERROR;
2158 
2159 		      END IF;
2160 		   END LOOP;
2161 
2162            -- check for split asset transaction
2163            FOR chk_split_trn_rec IN chk_split_trn_csr (l_contract_id, db_creation_date) LOOP
2164 
2165       	      -- if split asset transaction exists then raise error
2166 			  IF chk_split_trn_rec.id IS NOT NULL THEN
2167 
2168                  -- Transaction exists for contract CONTRACT_NUMBER which was processed
2169                  -- after this quote was created. This quote is now invalid.
2170                  OKL_API.set_message (
2171             			       p_app_name     => 'OKL',
2172            	    		       p_msg_name     => 'OKL_AM_TRN_EXISTS_ERR',
2173                                p_token1       => 'CONTRACT_NUMBER',
2174                                p_token1_value => db_contract_number);
2175 
2176                  RAISE OKL_API.G_EXCEPTION_ERROR;
2177 
2178               END IF;
2179             END LOOP;
2180 
2181 		   ELSE -- go by new checks -- where you check for noncanceled and non processed transactions in some cases
2182 
2183 		   -- check for transactions for rebook, reverse, split contract, transfer and assumption
2184 		   -- which exists after the quote creation date and which are not canceled
2185 		   -- and rebook and partial terminations which are not canceled nor processed
2186 		   FOR chk_contract_trn_rec1 IN chk_contract_trn_csr1 (l_contract_id, db_creation_date) LOOP
2187 
2188 		      -- if trn exist raise error
2189 		      IF  chk_contract_trn_rec1.id IS NOT NULL THEN
2190 
2191                  -- Transaction exists for contract CONTRACT_NUMBER which was processed
2192 			     -- after this quote was created. This quote is now invalid.
2193                  OKL_API.set_message (
2194             			 p_app_name     => 'OKL',
2195            	    		 p_msg_name     => 'OKL_AM_TRN_EXISTS_ERR',
2196                          p_token1       => 'CONTRACT_NUMBER',
2197                          p_token1_value => db_contract_number);
2198 
2199                  RAISE OKL_API.G_EXCEPTION_ERROR;
2200 
2201 		      END IF;
2202 		   END LOOP;
2203 
2204            -- check for split asset transaction -- GO BY NEW CHECK -- checks for non canceled and non processed split asset transactions
2205            FOR chk_split_trn_rec1 IN chk_split_trn_csr1 (l_contract_id, db_creation_date) LOOP
2206 
2207       	      -- if split asset transaction exists then raise error
2208 			  IF chk_split_trn_rec1.id IS NOT NULL THEN
2209 
2210                  -- Transaction exists for contract CONTRACT_NUMBER which was processed
2211                  -- after this quote was created. This quote is now invalid.
2212                  OKL_API.set_message (
2213             			       p_app_name     => 'OKL',
2214            	    		       p_msg_name     => 'OKL_AM_TRN_EXISTS_ERR',
2215                                p_token1       => 'CONTRACT_NUMBER',
2216                                p_token1_value => db_contract_number);
2217 
2218                  RAISE OKL_API.G_EXCEPTION_ERROR;
2219 
2220               END IF;
2221            END LOOP;
2222 		   END IF;
2223 		END IF;
2224 
2225         -- *****************
2226         -- LOOP thru quote assets
2227         -- *****************
2228 
2229         -- Get the quote lines
2230         FOR get_qte_lines_rec IN get_qte_lines_csr(lp_term_rec.id) LOOP
2231 
2232 
2233            -- *****************
2234            -- IF asset serialized, then count of okl_txd_quote_line_dtls
2235            -- for the TQL_ID should equal the quote asset quantity
2236            -- *****************
2237 
2238            -- Get if asset serialized
2239            l_return_status := check_asset_sno(
2240                                   p_asset_line  => get_qte_lines_rec.kle_id,
2241                                   x_sno_yn      => lx_asset_serialized_yn,
2242                                   x_clev_tbl    => lx_clev_tbl);
2243            IF (is_debug_statement_on) THEN
2244              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_asset_sno, return status :' || l_return_status);
2245            END IF;
2246 
2247 
2248            -- If error in checking if asset serialized
2249            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2250 
2251 
2252               RAISE OKL_API.G_EXCEPTION_ERROR;
2253 
2254            END IF;
2255 
2256 
2257            -- If asset serialized and IB Line Count <> Quote Qty then error
2258            IF lx_asset_serialized_yn = OKL_API.G_TRUE THEN
2259 
2260 
2261               -- Get the IB line count
2262               OPEN  get_ib_lines_cnt_csr(get_qte_lines_rec.tql_id);
2263               FETCH get_ib_lines_cnt_csr INTO l_ib_lines_count;
2264               CLOSE get_ib_lines_cnt_csr;
2265 
2266 
2267               -- If IB line count does not match Quote Qty raise msg and exp
2268               -- RMUNJULU 14-JAN-03 2748581 Added condition to check only when partial line
2269               IF l_ib_lines_count <> get_qte_lines_rec.quote_quantity
2270               AND get_qte_lines_rec.quote_quantity <> get_qte_lines_rec.asset_quantity THEN
2271 
2272 
2273                   -- Asset ASSET_NUMBER is serialized. Quote quantity
2274                   -- QUOTE_QUANTITY does not match the number of selected asset
2275                   -- units ASSET_UNITS.
2276                   OKL_API.set_message (
2277                 			 p_app_name  	  => 'OKL',
2278             	    		 p_msg_name  	  => 'OKL_AM_QTE_QTY_SRL_CNT_ERR',
2279                        p_token1       => 'ASSET_NUMBER',
2280                        p_token1_value => get_qte_lines_rec.asset_name,
2281                        p_token2       => 'QUOTE_QUANTITY',
2282                        p_token2_value => get_qte_lines_rec.quote_quantity,
2283                        p_token3       => 'ASSET_UNITS',
2284                        p_token3_value => l_ib_lines_count);
2285 
2286 
2287                   RAISE OKL_API.G_EXCEPTION_ERROR;
2288 
2289               END IF;
2290            END IF;
2291 
2292            -- rmunjulu EDAT Add code for FA checks, do this only for prior dated terminations
2293            -- and termination with purchase (which is when we do asset disposal)
2294            --IF  trunc(l_date_eff_from) < trunc(db_creation_date)
2295            -- rmunjulu Bug 4143251 Check for FA checks for all quotes (not just PRIOR DATED)
2296     	   IF  db_qtp_code IN ( 'TER_PURCHASE',     -- Termination - With Purchase
2297 		                        'TER_MAN_PURCHASE', -- Termination - Manual With Purchase
2298 		   					    'TER_RECOURSE',     -- Termination - Recourse With Purchase
2299 		 						'TER_ROLL_PURCHASE' -- Termination - Rollover To New Contract With Purchase
2300 							   ) THEN
2301 
2302                  check_asset_validity_in_fa(
2303                       p_kle_id          => get_qte_lines_rec.kle_id,
2304                       p_trn_date        => l_date_eff_from, -- quote eff from date will be passed
2305                       p_check_fa_year   => 'Y', -- do we need to check fiscal year
2306 				      p_check_fa_trn    => 'Y', -- do we need to check fa transactions
2307 				      p_contract_number => db_contract_number,
2308 				      x_return_status   => l_return_status);
2309                  IF (is_debug_statement_on) THEN
2310                    OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_asset_validity_in_fa , return status: ' || l_return_status);
2311                  END IF;
2312 
2313               -- If error in FA checks the throw exception, message set in above routine
2314               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2315 
2316                  RAISE OKL_API.G_EXCEPTION_ERROR;
2317               END IF;
2318 
2319               IF (is_debug_statement_on) THEN
2320                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_product_details');
2321               END IF;
2322               -- rmunjulu LOANS_ENHACEMENTS Termination with purchase not allowed for loans
2323 			  -- Get the contract product details
2324               OKL_AM_UTIL_PVT.get_contract_product_details(
2325                       p_khr_id           => l_contract_id,
2326                       x_deal_type        => l_deal_type,
2327                       x_rev_rec_method   => l_rev_rec_method,
2328 				      x_int_cal_basis    => l_int_cal_basis,
2329 				      x_tax_owner        => l_tax_owner,
2330 				      x_return_status    => l_return_status);
2331               IF (is_debug_statement_on) THEN
2332                 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);
2333                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_deal_type: ' || l_deal_type);
2334                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_rev_rec_method: ' || l_rev_rec_method);
2335                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_int_cal_basis: ' || l_int_cal_basis);
2336                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_tax_owner: ' || l_tax_owner);
2337               END IF;
2338 
2339               -- If error then throw exception
2340               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2341 
2342                  RAISE OKL_API.G_EXCEPTION_ERROR;
2343               END IF;
2344 
2345               IF  l_deal_type LIKE 'LOAN%' THEN
2346 
2347                  -- Termination with purchase quote is not allowed for loan contract.
2348                  OKL_API.SET_MESSAGE(
2349                      p_app_name     => 'OKL',
2350  	                 p_msg_name     => 'OKL_AM_LOAN_PAR_ERR');
2351 
2352                  RAISE G_EXCEPTION_HALT_VALIDATION;
2353 
2354               END IF;
2355 
2356            END IF;
2357 
2358 
2359            -- rmunjulu LOANS_ENHANCEMENTS Partial Line Termination not allowed for loans with Actual/Estimated Actual
2360            --IF  get_qte_lines_rec.quote_quantity < get_qte_lines_rec.asset_quantity THEN -- SECHAWLA 04-JAN-06 4915133
2361 		   IF db_partial_yn = 'Y' THEN --  SECHAWLA 04-JAN-06 4915133 : partial quotes not allowed for loan k with
2362 		                               -- rev rec method 'ESTIMATED_AND_BILLED','ACTUAL'
2363 			  -- Get the contract product details
2364               IF (is_debug_statement_on) THEN
2365                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_product_details');
2366               END IF;
2367               OKL_AM_UTIL_PVT.get_contract_product_details(
2368                       p_khr_id           => l_contract_id,
2369                       x_deal_type        => l_deal_type,
2370                       x_rev_rec_method   => l_rev_rec_method,
2371 				      x_int_cal_basis    => l_int_cal_basis,
2372 				      x_tax_owner        => l_tax_owner,
2373 				      x_return_status    => l_return_status);
2374               IF (is_debug_statement_on) THEN
2375                 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);
2376                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_deal_type: ' || l_deal_type);
2377                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_rev_rec_method: ' || l_rev_rec_method);
2378                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_int_cal_basis: ' || l_int_cal_basis);
2379                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_tax_owner: ' || l_tax_owner);
2380               END IF;
2381 
2382               -- If error then throw exception
2383               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2384 
2385                  RAISE OKL_API.G_EXCEPTION_ERROR;
2386               END IF;
2387 
2388               IF  l_deal_type LIKE 'LOAN%'
2389               AND l_rev_rec_method IN ('ESTIMATED_AND_BILLED','ACTUAL') THEN
2390 
2391                 --SECHAWLA 04-JAN-06 4915133
2392                 OKL_API.SET_MESSAGE(
2393                      p_app_name     => 'OKL',
2394  	                 p_msg_name     => 'OKL_AM_LOAN_PAR_LN_TRMNT');
2395 
2396                  RAISE OKL_API.G_EXCEPTION_ERROR;
2397 
2398               END IF;
2399            END IF;
2400 
2401            -- RMUNJULU 30-DEC-02 2699412 Added code to get and set other quotes statuses
2402 
2403            -- *****************
2404            -- CANCEL all the other non canceled/completed termination quotes for the asset
2405            -- *****************
2406 
2407 
2408            IF (is_debug_statement_on) THEN
2409              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_all_term_quotes_for_line');
2410            END IF;
2411            -- Get quotes for line
2412            OKL_AM_UTIL_PVT.get_all_term_quotes_for_line (
2413                p_kle_id        => get_qte_lines_rec.kle_id,
2414                x_quote_tbl     => lx_quote_tbl,
2415                x_return_status => l_return_status);
2416            IF (is_debug_statement_on) THEN
2417              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_all_term_quotes_for_line , return status: ' || l_return_status);
2418            END IF;
2419 
2420 
2421 
2422            -- Loop thru the quotes for the asset
2423            IF lx_quote_tbl.COUNT > 0 THEN
2424 
2425               i := lx_quote_tbl.FIRST;
2426               LOOP
2427 
2428                  -- if the quote id different and quote not consolidated and not
2429                  -- completed/canceled then cancel it
2430                  IF  lx_quote_tbl(i).id <> lp_term_rec.id
2431                  AND NVL(lx_quote_tbl(i).consolidated_yn,'N') <> 'Y'
2432                  AND lx_quote_tbl(i).qst_code NOT IN('COMPLETED',
2433                                                      'CANCELLED') THEN
2434 
2435                     -- set the canceled qtev rec
2436                     lp_canceled_qtev_rec.id := lx_quote_tbl(i).id;
2437                     lp_canceled_qtev_rec.qst_code := 'CANCELLED';
2438 
2439 
2440                     IF (is_debug_statement_on) THEN
2441                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TRX_QUOTES_PUB.update_trx_quotes');
2442                     END IF;
2443                     -- update the quote to canceled
2444                     OKL_TRX_QUOTES_PUB.update_trx_quotes(
2445                              p_api_version    => p_api_version,
2446                              p_init_msg_list  => OKL_API.G_FALSE,
2447                              x_return_status  => l_return_status,
2448                              x_msg_count      => x_msg_count,
2449                              x_msg_data       => x_msg_data,
2450                              p_qtev_rec       => lp_canceled_qtev_rec,
2451                              x_qtev_rec       => lx_canceled_qtev_rec);
2452                     IF (is_debug_statement_on) THEN
2453                       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_TRX_QUOTES_PUB.update_trx_quotes , return status: ' || l_return_status);
2454                     END IF;
2455 
2456                     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2457                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2458                     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2459                         RAISE OKL_API.G_EXCEPTION_ERROR;
2460                     END IF;
2461 
2462                  END IF;
2463 
2464                  EXIT WHEN i = lx_quote_tbl.LAST;
2465                  i := lx_quote_tbl.NEXT(i);
2466               END LOOP;
2467 
2468 
2469            END IF;
2470 
2471             -- Bug 6674730 start
2472             -- Check all asset returns for assets on repossession quote are in
2473             -- 'Repossessed' status
2474 
2475            IF NVL(db_repo_yn,'N') = 'Y' THEN
2476               l_ars_code := '?';
2477               OPEN c_asset_return_csr(get_qte_lines_rec.kle_id);
2478               FETCH c_asset_return_csr INTO l_ars_code;
2479               CLOSE c_asset_return_csr;
2480 
2481               IF (NVL(l_ars_code,'?') <> 'REPOSSESSED') THEN
2482                 -- You cannot accept this termination quote.
2483 		        -- Please update the Asset Return status to Repossessed for all
2484 			    -- assets on contract number CONTRACT_NUMBER.
2485                 OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
2486                                      p_msg_name      => 'OKL_AM_ASSET_NOT_REPO',
2487                                      p_token1        => 'CONTRACT_NUMBER',
2488                                      p_token1_value  => l_contract_number);
2489 
2490                RAISE OKL_API.G_EXCEPTION_ERROR;
2491              END IF;
2492            END IF;
2493            -- Bug 6674730 end
2494 
2495         END LOOP;
2496 
2497         IF (is_debug_statement_on) THEN
2498           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done');
2499         END IF;
2500           -- rmunjulu LOANS_ENHANCEMENTS
2501         l_int_calc_done :=  OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done(
2502                                    p_contract_id      => l_contract_id,
2503                                    p_contract_number  => l_contract_number,
2504                                    p_quote_number     => db_quote_number,
2505                                    p_source           => 'UPDATE',
2506                                    p_trn_date         => l_date_eff_from);
2507         IF (is_debug_statement_on) THEN
2508           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done');
2509           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_int_calc_done: ' || l_int_calc_done);
2510         END IF;
2511 
2512         IF l_int_calc_done IS NULL OR l_int_calc_done = 'N' THEN
2513 
2514             -- Message will be set in called procedure
2515             RAISE OKL_API.G_EXCEPTION_ERROR;
2516 
2517             -- rmunjulu Check if Variable Rate NON REAMORT case, if yes then run variable rate billing API
2518 
2519         END IF;
2520 
2521         --SECHAWLA 20-JAN-06 4970009 : Moved the billing check after the interest calculation check
2522         -- Interest calculation check now also checks variable rate processing for lease contract ('FLOAT_FACTORS','REAMORT')
2523         -- for float_factor contract, if last interest calculation date is null that means float factor streams
2524 		-- have not been generated. Variable rate processing on a float factor contract generates the float factor
2525 		-- streams and then bills them. So we should do the billing check after we know that float factor streams have
2526 		-- been created. Similarly, for reamort contract, variable rate processing regenerates the streams (RENT)
2527 		-- We need to then manually run billing to bill those streams. So we should do the billing check after we
2528 		-- know that varaibel rate processing has regenerated the streams
2529 
2530         IF (is_debug_statement_on) THEN
2531           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
2532         END IF;
2533 
2534         -- Check if linked service contract exists for the quoted contract
2535         OKL_SERVICE_INTEGRATION_PVT.check_service_link (
2536                                 p_api_version           => l_api_version,
2537                                 p_init_msg_list         => OKL_API.G_FALSE,
2538                                 x_return_status         => l_return_status,
2539                                 x_msg_count             => l_msg_count,
2540                                 x_msg_data              => l_msg_data,
2541                                 p_lease_contract_id     => l_contract_id,
2542                                 x_service_contract_id   => l_oks_chr_id);
2543         IF (is_debug_statement_on) THEN
2544           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2545           'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || l_return_status);
2546 
2547           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2548           'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , l_oks_chr_id: ' || l_oks_chr_id);
2549         END IF;
2550 
2551         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2552            -- Error checking service integration details.
2553            OKL_API.set_message (
2554                    p_app_name  	  => OKL_API.G_APP_NAME,
2555         	          p_msg_name  	  => 'OKL_AM_K_SRV_INT_ERR');
2556         END IF;
2557 
2558         -- raise exception if error
2559         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2560            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2561         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2562            RAISE OKL_API.G_EXCEPTION_ERROR;
2563         END IF;
2564 
2565         -- If linked Lease
2566         IF  l_return_status = OKL_API.G_RET_STS_SUCCESS
2567         AND l_oks_chr_id IS NOT NULL THEN
2568 
2569             -- IF Partial Quote
2570             IF db_partial_yn = 'Y' THEN
2571 
2572                 IF (is_debug_statement_on) THEN
2573                   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_LOAN_TRMNT_PVT.check_true_partial_quote');
2574                 END IF;
2575                 -- need to check if no more assets (This case p_quote_id is Always populated)
2576                 l_true_partial_quote := OKL_AM_LEASE_LOAN_TRMNT_PVT.check_true_partial_quote(
2577                                            p_quote_id     => lp_term_rec.id,
2578                                            p_contract_id  => l_contract_id);
2579                 IF (is_debug_statement_on) THEN
2580                   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_LOAN_TRMNT_PVT.check_true_partial_quote , l_true_partial_quote: ' || l_true_partial_quote);
2581                 END IF;
2582 
2583             ELSE -- Partial_YN = 'N'
2584 
2585                 l_true_partial_quote := 'N';
2586 
2587             END IF;
2588 
2589             -- If partial quote and since linked lease
2590             IF l_true_partial_quote = 'Y' THEN
2591 
2592                 -- Get Service Contract Details
2593                 FOR get_service_k_dtls_rec IN get_service_k_dtls_csr(l_oks_chr_id) LOOP
2594                     l_service_contract := get_service_k_dtls_rec.contract_number;
2595                 END LOOP;
2596 
2597                 -- Partial Quote QUOTE_NUMBER for Lease Contract LEASE_CONTRACT can not be accepted,
2598                 -- since Lease Contract is linked to Service Contract SERVICE_CONTRACT.
2599                 OKL_API.set_message (
2600          			       p_app_name  	  => OKL_API.G_APP_NAME,
2601               			   p_msg_name  	  => 'OKL_AM_ACCEPT_LINKED_LEASE',
2602                            p_token1       => 'QUOTE_NUMBER',
2603                            p_token1_value => db_quote_number,
2604                            p_token2       => 'LEASE_CONTRACT',
2605                            p_token2_value => l_contract_number,
2606                            p_token3       => 'SERVICE_CONTRACT',
2607                            p_token3_value => l_service_contract);
2608 
2609                 RAISE OKL_API.G_EXCEPTION_ERROR;
2610 
2611             END IF;
2612 
2613         END IF;
2614 
2615         IF (is_debug_statement_on) THEN
2616           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2617           'calling OKL_AM_UTIL_PVT.get_contract_product_details ');
2618         END IF;
2619 
2620         -- Get the Product Qualities
2621         OKL_AM_UTIL_PVT.get_contract_product_details (
2622            p_khr_id         => l_contract_id,
2623            x_deal_type      => l_deal_type,
2624            x_rev_rec_method => l_rev_rec_method,
2625            x_int_cal_basis  => l_int_cal_basis,
2626            x_tax_owner      => l_tax_owner,
2627            x_return_status  => l_return_status);
2628 
2629         IF (is_debug_statement_on) THEN
2630           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2631           'called OKL_AM_UTIL_PVT.get_contract_product_details ');
2632 
2633           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2634           'l_return_status: ' || l_return_status);
2635         END IF;
2636 
2637         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2638            -- Error getting contract product details.
2639            OKL_API.set_message (
2640                    p_app_name  	  => OKL_API.G_APP_NAME,
2641         	          p_msg_name  	  => 'OKL_AM_K_PRD_DTLS_ERR');
2642         END IF;
2643 
2644         -- raise exception if error
2645         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2646            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2647         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2648            RAISE OKL_API.G_EXCEPTION_ERROR;
2649         END IF;
2650 
2651          -- BPD Now provides a API which tells till when the billing was done, use that
2652         IF (is_debug_statement_on) THEN
2653           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2654           'calling OKL_AM_LEASE_LOAN_TRMNT_PVT.check_billing_done');
2655         END IF;
2656 
2657         -- rmunjulu 6736148  Check if stream billing done
2658         l_billing_done :=  OKL_AM_LEASE_LOAN_TRMNT_PVT.check_billing_done(
2659                                    p_contract_id      => l_contract_id,
2660                                    p_contract_number  => l_contract_number,
2661                                    p_quote_number     => db_quote_number,
2662                                    p_trn_date         => l_date_eff_from,
2663                                    p_rev_rec_method   => l_rev_rec_method, -- rmunjulu 6795295
2664                                    p_int_cal_basis    => l_int_cal_basis, -- rmunjulu 6795295
2665                                    p_oks_chr_id       => l_oks_chr_id, -- rmunjulu 6795295
2666                                    p_sts_code         => l_sts_code); -- rmunjulu 6795295
2667 
2668         IF (is_debug_statement_on) THEN
2669           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2670           'called OKL_AM_LEASE_LOAN_TRMNT_PVT.check_billing_done');
2671 
2672           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2673           'l_billing_done: ' || l_billing_done);
2674         END IF;
2675 
2676         -- rmunjulu 6736148  this now tells of stream billing done
2677         IF l_billing_done IS NULL OR l_billing_done = 'N' THEN
2678 
2679           -- if RevRec=STREAMS and IntCalc=FIXED
2680           -- and No OKS contract and Contract status in Booked then perform Billing by calling Stream Billing API.
2681           IF  l_rev_rec_method = 'STREAMS'
2682           AND l_int_cal_basis = 'FIXED'
2683           AND l_oks_chr_id IS NULL
2684           AND l_sts_code = 'BOOKED' THEN -- rmunjulu 6795295  added check for BOOKED contract
2685 
2686             -- rmunjulu 6795295 Check if billing or accrual concurrent programs running
2687             OPEN conc_details_csr (l_org_id);
2688             FETCH conc_details_csr INTO conc_details_rec;
2689             IF conc_details_csr%found THEN
2690               l_conc_req_found := 'Y';
2691             END IF;
2692             CLOSE conc_details_csr;
2693 
2694             IF l_conc_req_found = 'Y' THEN
2695 
2696               -- get the phase using FND API
2697               l_success := FND_CONCURRENT.get_request_status(
2698                   request_id  => conc_details_rec.request_id,
2699      	    		      phase       => l_phase_meaning,
2700          			      status      => l_status_meaning,
2701          			      dev_phase   => l_dev_phase,
2702          			      dev_status  => l_dev_status,
2703          			      message     => l_fnd_message);
2704 
2705               -- Termination Quote 'QUOTE_NUMBER' cannot be accepted at this time as
2706               -- the concurrent program 'PROGRAM_NAME'
2707               -- (Request Id = 'REQUEST_ID') is 'PHASE'.
2708               -- Please accept the termination quote after the program has completed.
2709               OKL_API.set_message (
2710                    p_app_name  	  => OKL_API.G_APP_NAME,
2711         	          p_msg_name  	  => 'OKL_AM_CONC_REC_FOUND',
2712                    p_token1       => 'QUOTE_NUMBER',
2713                    p_token1_value => db_quote_number,
2714                    p_token2       => 'PROGRAM_NAME',
2715                    p_token2_value => conc_details_rec.user_concurrent_program_name,
2716                    p_token3       => 'REQUEST_ID',
2717                    p_token3_value => conc_details_rec.request_id,
2718                    p_token4       => 'PHASE',
2719                    p_token4_value => l_phase_meaning);
2720 
2721               RAISE OKL_API.G_EXCEPTION_ERROR;
2722             END IF;
2723 
2724             -- Call Billing API to do billing of contract
2725             IF (is_debug_statement_on) THEN
2726               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2727               'calling OKL_STREAM_BILLING_PVT.bill_streams');
2728             END IF;
2729 
2730             -- Call stream billing API if stream billing not done
2731            	OKL_STREAM_BILLING_PVT.bill_streams (
2732                			p_api_version		    => p_api_version,
2733                			p_init_msg_list		  => OKL_API.G_FALSE,
2734                			x_return_status		  => l_return_status,
2735                			x_msg_count		      => x_msg_count,
2736                			x_msg_data		       => x_msg_data,
2737                   p_commit           => FND_API.G_FALSE,
2738                			p_contract_number	 => l_contract_number,
2739                   p_from_bill_date	  => null,
2740                   p_to_bill_date		   => l_date_eff_from, -- do billing till quote effective from
2741                   p_cust_acct_id     => null,
2742                   p_assigned_process => null);
2743 
2744             IF (is_debug_statement_on) THEN
2745               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2746               'called OKL_STREAM_BILLING_PVT.bill_streams');
2747 
2748               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2749               'l_return_status: ' || l_return_status);
2750             END IF;
2751 
2752             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2753                 -- Error during billing for the contract.
2754                 OKL_API.set_message (
2755          			               p_app_name  	  => OKL_API.G_APP_NAME,
2756               			          p_msg_name  	  => 'OKL_AM_BILL_ERROR');
2757             END IF;
2758 
2759             -- raise exception if error
2760             IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2761               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2762             ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2763               RAISE OKL_API.G_EXCEPTION_ERROR;
2764             END IF;
2765 
2766           ELSE -- RevRec IS NOT STREAMS or IntCalc IS NOT FIXED or OKS may be linked
2767 
2768              -- rmunjulu 6795295 set the message if needed
2769              IF nvl(l_stream_bill_done_yn ,'*') = 'N' THEN
2770                 -- Quote QUOTE_NUMBER can not be accepted. Please process Regular Stream billing
2771                 -- for contract CONTRACT_NUMBER up to the quote effective from date.
2772                 OKL_API.set_message (
2773          			                   p_app_name  	  => 'OKL',
2774               		    	          p_msg_name  	  => 'OKL_AM_ACCEPT_TQ_RUN_BILLING',
2775                                p_token1       => 'QUOTE_NUMBER',
2776                                p_token1_value => db_quote_number,
2777                                p_token2       => 'CONTRACT_NUMBER',
2778                                p_token2_value => l_contract_number);
2779              ELSE -- service billing not done, message will be set in called procedure
2780                 NULL;
2781              END IF;
2782              RAISE OKL_API.G_EXCEPTION_ERROR;
2783           END IF;
2784             -- rmunjulu AutoTerminate -- END
2785         END IF;
2786 
2787 
2788 
2789         -- ++++++++++++++++++++  service contract integration end   ++++++++++++
2790 
2791 /* -- rmunjulu LOANS_ENHANCEMENTS
2792         -- RMUNJULU 3078988 Added code to check if accrual was done for the contract
2793         -- Check if accruals done
2794         OPEN  check_accrual_csr(l_contract_id, l_date_eff_from); -- rmunjulu EDAT Check for Accruals till quote eff from date
2795         FETCH check_accrual_csr INTO l_accrual_not_done;
2796         CLOSE check_accrual_csr;
2797 */
2798 
2799         -- rmunjulu 4769094 Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup check accruals till quote eff date OR previous month last date
2800         OPEN  check_accrual_previous_csr;
2801         FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
2802         CLOSE check_accrual_previous_csr;
2803 
2804         IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN -- rmunjulu 4769094 continue with current check till quote effective date
2805 
2806            IF (is_debug_statement_on) THEN
2807              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2808              'calling OKL_GENERATE_ACCRUALS_PVT.check_date_accrued_till');
2809            END IF;
2810 
2811            -- rmunjulu LOANS_ENHANCEMENTS -- Check for accrual using new API
2812            l_accrual_done := OKL_GENERATE_ACCRUALS_PVT.check_date_accrued_till(
2813                                      p_khr_id => l_contract_id,
2814                                      p_date   => l_date_eff_from);
2815 
2816            IF (is_debug_statement_on) THEN
2817              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2818              'called OKL_GENERATE_ACCRUALS_PVT.check_date_accrued_till, l_accrual_done: ' || l_accrual_done);
2819            END IF;
2820 
2821            -- rmunjulu 6736148
2822            l_final_accrual_date := l_date_eff_from;
2823 
2824       		ELSE -- rmunjulu 4769094 new check till quote eff dates previous month last date
2825 
2826            l_previous_mnth_last_date := LAST_DAY(TRUNC(l_date_eff_from, 'MONTH')-1);
2827 
2828            IF (is_debug_statement_on) THEN
2829              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2830              'calling OKL_GENERATE_ACCRUALS_PVT.check_date_accrued_till');
2831            END IF;
2832 
2833            l_accrual_done := OKL_GENERATE_ACCRUALS_PVT.check_date_accrued_till(
2834                                      p_khr_id => l_contract_id,
2835                                      p_date   => l_previous_mnth_last_date);
2836 
2837            IF (is_debug_statement_on) THEN
2838              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2839              'called OKL_GENERATE_ACCRUALS_PVT.check_date_accrued_till, l_accrual_done: ' || l_accrual_done);
2840            END IF;
2841 
2842            -- rmunjulu 6736148
2843            l_final_accrual_date := l_previous_mnth_last_date;
2844 
2845 		      END IF;
2846 
2847         -- if accrual not done then error
2848         IF (l_accrual_done IS NULL ) THEN -- rmunjulu 5036337 check for Null-- check for null rmunjulu LOANS_ENHANCEMENTS Use new variable
2849 
2850             -- Error occurred while checking the accrual status for contract number CONTRACT_NUMBER.
2851          			-- Function OKL_GENERATE_ACCRUALS_PVT.check_date_accrued_till returned a NULL
2852            OKL_API.set_message (
2853                  			       p_app_name  	  => OKL_API.G_APP_NAME,
2854               			          p_msg_name  	  => 'OKL_AM_CHK_ACCRUAL_ERR',
2855                            p_token1       => 'CONTRACT_NUMBER',
2856                            p_token1_value => l_contract_number);
2857 
2858            RAISE OKL_API.G_EXCEPTION_ERROR;
2859 
2860         ELSIF (l_accrual_done = 'N' ) THEN -- rmunjulu 5036337 check for N
2861 
2862           -- rmunjulu 6736148 -- start
2863           -- if RevRec=STREAMS and IntCalc=FIXED
2864           -- then perform accruals by calling Generate Accrual API.
2865           IF  l_rev_rec_method = 'STREAMS'
2866           AND l_int_cal_basis = 'FIXED'
2867           AND l_oks_chr_id IS NULL
2868           AND l_sts_code = 'BOOKED' THEN  -- rmunjulu 6795295  added check for BOOKED status
2869 
2870             -- rmunjulu 6795295 Check if billing or accrual concurrent programs running
2871             OPEN conc_details_csr (l_org_id);
2872             FETCH conc_details_csr INTO conc_details_rec;
2873             IF conc_details_csr%found THEN
2874               l_conc_req_found := 'Y';
2875             END IF;
2876             CLOSE conc_details_csr;
2877 
2878             IF l_conc_req_found = 'Y' THEN
2879 
2880               -- get the phase using FND API
2881               l_success := FND_CONCURRENT.get_request_status(
2882                   request_id  => conc_details_rec.request_id,
2883      	    		      phase       => l_phase_meaning,
2884          			      status      => l_status_meaning,
2885          			      dev_phase   => l_dev_phase,
2886          			      dev_status  => l_dev_status,
2887          			      message     => l_fnd_message);
2888 
2889               -- Termination Quote 'QUOTE_NUMBER' cannot be accepted at this time as
2890               -- the concurrent program 'PROGRAM_NAME'
2891               -- (Request Id = 'REQUEST_ID') is 'PHASE'.
2892               -- Please accept the termination quote after the program has completed.
2893               OKL_API.set_message (
2894                    p_app_name  	  => OKL_API.G_APP_NAME,
2895         	          p_msg_name  	  => 'OKL_AM_CONC_REC_FOUND',
2896                    p_token1       => 'QUOTE_NUMBER',
2897                    p_token1_value => db_quote_number,
2898                    p_token2       => 'PROGRAM_NAME',
2899                    p_token2_value => conc_details_rec.user_concurrent_program_name,
2900                    p_token3       => 'REQUEST_ID',
2901                    p_token3_value => conc_details_rec.request_id,
2902                    p_token4       => 'PHASE',
2903                    p_token4_value => l_phase_meaning);
2904 
2905               RAISE OKL_API.G_EXCEPTION_ERROR;
2906             END IF;
2907 
2908              -- set the accrual_rec
2909              l_accrual_rec.contract_id := l_contract_id;
2910              l_accrual_rec.accrual_date := l_final_accrual_date;
2911              l_accrual_rec.source_trx_id := lp_term_rec.id; -- quote_id
2912              l_accrual_rec.source_trx_type := 'QTE';
2913 
2914              IF (is_debug_statement_on) THEN
2915                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2916                'calling OKL_GENERATE_ACCRUALS_PVT.generate_accruals');
2917              END IF;
2918 
2919              -- Call Accruals API
2920              OKL_GENERATE_ACCRUALS_PVT.generate_accruals (
2921                			p_api_version		    => p_api_version,
2922                			p_init_msg_list		  => OKL_API.G_FALSE,
2923                			x_return_status		  => l_return_status,
2924                			x_msg_count		      => x_msg_count,
2925                			x_msg_data		       => x_msg_data,
2926                   p_accrual_rec      => l_accrual_rec);
2927 
2928              IF (is_debug_statement_on) THEN
2929                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2930                'called OKL_GENERATE_ACCRUALS_PVT.generate_accruals');
2931 
2932                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,
2933                'l_return_status: ' || l_return_status);
2934              END IF;
2935 
2936              IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2937                 -- Error during running accrual for the contract.
2938                 OKL_API.set_message (
2939          			               p_app_name  	  => OKL_API.G_APP_NAME,
2940               			          p_msg_name  	  => 'OKL_AM_ACCRUAL_ERROR');
2941              END IF;
2942 
2943              -- raise exception if error
2944              IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2945                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2946              ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2947                RAISE OKL_API.G_EXCEPTION_ERROR;
2948              END IF;
2949           -- rmunjulu 6736148 -- end
2950           ELSE -- RevRec IS NOT STREAMS or IntCalc IS NOT FIXED
2951 
2952              IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN -- rmunjulu 4769094 continue with current message
2953 
2954                -- Quote QUOTE_NUMBER can not be accepted. Please process accrual
2955                -- for contract CONTRACT_NUMBER up to the quote effective from date.
2956                OKL_API.set_message (
2957                  			       p_app_name  	  => OKL_API.G_APP_NAME,
2958                      			   p_msg_name  	  => 'OKL_AM_ACCEPT_TQ_RUN_ACCRUAL',
2959                            p_token1       => 'QUOTE_NUMBER',
2960                            p_token1_value => db_quote_number,
2961                            p_token2       => 'CONTRACT_NUMBER',
2962                            p_token2_value => l_contract_number);
2963 
2964              ELSE -- rmunjulu 4769094 new message check till quote eff dates previous month last date
2965                -- Quote QUOTE_NUMBER can not be accepted. Please process accrual
2966                -- for contract CONTRACT_NUMBER up to the DATE.
2967                OKL_API.set_message (
2968          		        	       p_app_name  	  => OKL_API.G_APP_NAME,
2969               			          p_msg_name  	  => 'OKL_AM_ACCEPT_TQ_RUN_ACCR_NEW',
2970                            p_token1       => 'QUOTE_NUMBER',
2971                            p_token1_value => db_quote_number,
2972                            p_token2       => 'CONTRACT_NUMBER',
2973                            p_token2_value => l_contract_number,
2974                   						   p_token3       => 'DATE',
2975                            p_token3_value => l_previous_mnth_last_date);
2976              END IF;
2977 
2978              RAISE OKL_API.G_EXCEPTION_ERROR;
2979            END IF;
2980         END IF;
2981 
2982         -- RMUNJULU 30-DEC-02 2699412 Added code to set currency conversion columns
2983 
2984         -- *****************
2985         -- SET the currency cols if acceptance date different from currency_conversion_date
2986         -- *****************
2987 
2988 
2989         IF TRUNC(db_sysdate) <> TRUNC(db_currency_conversion_date) THEN
2990 
2991 
2992           -- If the functional currency is different from contract currency then set
2993           -- currency conversion columns
2994           IF db_functional_currency_code <> db_contract_currency_code THEN
2995 
2996              IF (is_debug_statement_on) THEN
2997                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_ACCOUNTING_UTIL.convert_to_functional_currency');
2998              END IF;
2999              -- Get the currency conversion details from ACCOUNTING_Util
3000              OKL_ACCOUNTING_UTIL.convert_to_functional_currency(
3001                      p_khr_id  		  	          => l_contract_id,
3002                      p_to_currency   		        => db_functional_currency_code,
3003                      p_transaction_date 		    => db_sysdate,
3004                      p_amount 			            => l_hard_coded_amount,
3005                      x_return_status            => l_return_status,
3006                      x_contract_currency		    => db_contract_currency_code,
3007                      x_currency_conversion_type	=> l_currency_conversion_type,
3008                      x_currency_conversion_rate	=> l_currency_conversion_rate,
3009                      x_currency_conversion_date	=> l_currency_conversion_date,
3010                      x_converted_amount 		    => l_converted_amount);
3011              IF (is_debug_statement_on) THEN
3012                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_ACCOUNTING_UTIL.convert_to_functional_currency , return status: ' || l_return_status);
3013                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'db_contract_currency_code: ' || db_contract_currency_code);
3014                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_type: ' || l_currency_conversion_type);
3015                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_rate: ' || l_currency_conversion_rate);
3016                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_date: ' || l_currency_conversion_date);
3017                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_converted_amount: ' || l_converted_amount);
3018              END IF;
3019 
3020              IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3021 
3022                 -- The currency conversion rate could not be
3023                 -- identified for specified currency.
3024                 OKL_API.set_message(
3025                           p_app_name     => 'OKL',
3026                           p_msg_name     => 'OKL_CONV_RATE_NOT_FOUND');
3027 
3028              END IF;
3029 
3030              -- raise exception if error
3031              IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3032                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3033              ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3034                 RAISE OKL_API.G_EXCEPTION_ERROR;
3035              END IF;
3036 
3037              -- Set the currency conversion columns
3038              lp_term_rec.currency_conversion_type := l_currency_conversion_type;
3039              lp_term_rec.currency_conversion_rate := l_currency_conversion_rate;
3040              lp_term_rec.currency_conversion_date := l_currency_conversion_date;
3041 
3042           END IF;
3043 
3044 
3045         END IF;
3046 
3047         -- Setting the quote values
3048         lp_term_rec.qst_code := 'ACCEPTED';
3049         lp_term_rec.date_accepted := db_sysdate;
3050 
3051 
3052     -- if already accepted and trying to change then raise error
3053     ELSIF  lp_term_rec.accepted_yn IS NOT NULL
3054     AND lp_term_rec.accepted_yn <> OKL_API.G_MISS_CHAR
3055     AND lp_term_rec.accepted_yn = G_NO
3056     AND db_accepted_yn = G_YES THEN
3057 
3058         --Quote QUOTE_NUMBER is already accepted.
3059         OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
3060                              p_msg_name      => 'OKL_AM_QUOTE_ALREADY_ACCP',
3061                              p_token1        => 'QUOTE_NUMBER',
3062                              p_token1_value  => db_quote_number);
3063 
3064         RAISE OKL_API.G_EXCEPTION_ERROR;
3065 
3066 	-- rmunjulu 4128965 Added this additional check
3067     -- if already accepted and trying to accept again
3068     -- Could happen when same rollover quote was added to 2 contracts and
3069 	-- accepted from one activation and then trying to accept from other activation
3070     ELSIF  lp_term_rec.accepted_yn IS NOT NULL
3071     AND lp_term_rec.accepted_yn <> OKL_API.G_MISS_CHAR
3072     AND lp_term_rec.accepted_yn = G_YES
3073     AND db_accepted_yn = G_YES THEN
3074 
3075         --Quote QUOTE_NUMBER is already accepted.
3076         OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
3077                              p_msg_name      => 'OKL_AM_QUOTE_ALREADY_ACCP',
3078                              p_token1        => 'QUOTE_NUMBER',
3079                              p_token1_value  => db_quote_number);
3080 
3081         RAISE OKL_API.G_EXCEPTION_ERROR;
3082 
3083 
3084     END IF; -- end if quote being accepted now
3085 
3086     -- RMUNJULU -- 12-DEC-02 Bug # 2484327 -- END --
3087 
3088 
3089 
3090     -----------------------
3091     -- CALL TO UPDATE QUOTE --
3092     -----------------------
3093 
3094     IF (is_debug_statement_on) THEN
3095       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TRX_QUOTES_PUB.update_trx_quotes');
3096     END IF;
3097     -- update the quote
3098     OKL_TRX_QUOTES_PUB.update_trx_quotes(
3099              p_api_version                  => p_api_version,
3100              p_init_msg_list                => p_init_msg_list,
3101              x_return_status                => l_return_status,
3102              x_msg_count                    => x_msg_count,
3103              x_msg_data                     => x_msg_data,
3104              p_qtev_rec                     => lp_term_rec,
3105              x_qtev_rec                     => lx_term_rec);
3106     IF (is_debug_statement_on) THEN
3107       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_TRX_QUOTES_PUB.update_trx_quotes , return status: ' || l_return_status);
3108     END IF;
3109 
3110      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3111        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3112      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3113        RAISE OKL_API.G_EXCEPTION_ERROR;
3114      END IF;
3115 
3116     --*************
3117     -- launch WF
3118     --*************
3119 
3120     -- if the quote is accepted now
3121     IF (lp_term_rec.accepted_yn = G_YES AND db_accepted_yn = G_NO)
3122 	AND nvl(p_acceptance_source,'*') <> 'ROLLOVER' THEN -- rmunjulu 4128965 Launch WF only for Non Rollover
3123 
3124       -- Trigger the launch of WFs
3125       IF lp_term_rec.preproceeds_yn = G_YES THEN
3126         IF (is_debug_statement_on) THEN
3127           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_WF.raise_business_event');
3128           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'lp_term_rec.id: ' || lp_term_rec.id);
3129           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'event: oracle.apps.okl.am.preproceeds');
3130         END IF;
3131         -- Launch the pre-proceeds WF
3132         OKL_AM_WF.raise_business_event (
3133                        	p_transaction_id => lp_term_rec.id,
3134                         p_event_name	   => 'oracle.apps.okl.am.preproceeds');
3135         IF (is_debug_statement_on) THEN
3136           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_WF.raise_business_event');
3137         END IF;
3138 
3139         -- Get the event name
3140         l_event_name := OKL_AM_UTIL_PVT.get_wf_event_name(
3141                             p_wf_process_type => 'OKLAMPPT',
3142                             p_wf_process_name => 'OKL_AM_PRE_PRO_TER',
3143                             x_return_status   => l_return_status);
3144         IF (is_debug_statement_on) THEN
3145           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_event_name: ' || l_event_name);
3146           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_return_status: ' || l_return_status);
3147         END IF;
3148 
3149         -- raise exception if error
3150         IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3151           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3152         END IF;
3153 
3154       ELSE
3155         IF (is_debug_statement_on) THEN
3156           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_WF.raise_business_event');
3157           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'lp_term_rec.id: ' || lp_term_rec.id);
3158           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'event: oracle.apps.okl.am.postproceeds');
3159         END IF;
3160         -- Launch the post-proceeds WF
3161         OKL_AM_WF.raise_business_event (
3162                         p_transaction_id => lp_term_rec.id,
3163                         p_event_name	   => 'oracle.apps.okl.am.postproceeds');
3164         IF (is_debug_statement_on) THEN
3165           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_WF.raise_business_event');
3166         END IF;
3167 
3168         -- Get the event name
3169         l_event_name := OKL_AM_UTIL_PVT.get_wf_event_name(
3170                             p_wf_process_type => 'OKLAMPPT',
3171                             p_wf_process_name => 'OKL_AM_POST_PRO_TER',
3172                             x_return_status   => l_return_status);
3173         IF (is_debug_statement_on) THEN
3174           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_event_name: ' || l_event_name);
3175           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_return_status: ' || l_return_status);
3176         END IF;
3177 
3178         -- raise exception if error
3179         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3180           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3181         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3182           RAISE OKL_API.G_EXCEPTION_ERROR;
3183         END IF;
3184 
3185       END IF;
3186 
3187       -- Set message on stack
3188       -- Workflow event EVENT_NAME has been requested.
3189       OKL_API.set_message(p_app_name     => OKL_API.G_APP_NAME,
3190                           p_msg_name     => 'OKL_AM_WF_EVENT_MSG',
3191                           p_token1       => 'EVENT_NAME',
3192                           p_token1_value => l_event_name);
3193 
3194 
3195       IF (is_debug_statement_on) THEN
3196         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.process_messages');
3197       END IF;
3198       -- Save message from stack into transaction message table
3199       OKL_AM_UTIL_PVT.process_messages(
3200   	                      p_trx_source_table	=> 'OKL_TRX_QUOTES_V',
3201     	                    p_trx_id		        => lp_term_rec.id,
3202     	                    x_return_status     => l_return_status);
3203       IF (is_debug_statement_on) THEN
3204         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.process_messages , return status: ' || l_return_status);
3205       END IF;
3206 
3207       -- raise exception if error
3208       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3209         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3210       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3211         RAISE OKL_API.G_EXCEPTION_ERROR;
3212       END IF;
3213 
3214     END IF;
3215 
3216      -- set return variables
3217      x_return_status := l_return_status;
3218      x_term_rec      := lx_term_rec;
3219      x_err_msg       := l_err_msg;
3220 
3221      -- end the transaction
3222      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3223     IF (is_debug_procedure_on) THEN
3224       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
3225     END IF;
3226 
3227   EXCEPTION
3228     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3229       IF (is_debug_exception_on) THEN
3230         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
3231       END IF;
3232       IF qte_db_vals_csr%ISOPEN THEN
3233         CLOSE qte_db_vals_csr;
3234       END IF;
3235       IF get_k_num_csr%ISOPEN THEN
3236         CLOSE get_k_num_csr;
3237       END IF;
3238 
3239       IF get_qte_lines_csr%ISOPEN THEN
3240         CLOSE get_qte_lines_csr;
3241       END IF;
3242       IF get_ib_lines_cnt_csr%ISOPEN THEN
3243         CLOSE get_ib_lines_cnt_csr;
3244       END IF;
3245       -- RMUNJULU 03-APR-03 2880556
3246       IF get_unbill_strms_csr%ISOPEN THEN
3247         CLOSE get_unbill_strms_csr;
3248       END IF;
3249 
3250       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3251       (
3252         l_api_name,
3253         G_PKG_NAME,
3254         'OKL_API.G_RET_STS_ERROR',
3255         x_msg_count,
3256         x_msg_data,
3257         '_PVT'
3258       );
3259     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3260       IF (is_debug_exception_on) THEN
3261         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
3262       END IF;
3263       IF qte_db_vals_csr%ISOPEN THEN
3264         CLOSE qte_db_vals_csr;
3265       END IF;
3266       IF get_k_num_csr%ISOPEN THEN
3267         CLOSE get_k_num_csr;
3268       END IF;
3269 
3270       IF get_qte_lines_csr%ISOPEN THEN
3271         CLOSE get_qte_lines_csr;
3272       END IF;
3273       IF get_ib_lines_cnt_csr%ISOPEN THEN
3274         CLOSE get_ib_lines_cnt_csr;
3275       END IF;
3276       -- RMUNJULU 03-APR-03 2880556
3277       IF get_unbill_strms_csr%ISOPEN THEN
3278         CLOSE get_unbill_strms_csr;
3279       END IF;
3280 
3281       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3282       (
3283         l_api_name,
3284         G_PKG_NAME,
3285         'OKL_API.G_RET_STS_UNEXP_ERROR',
3286         x_msg_count,
3287         x_msg_data,
3288         '_PVT'
3289       );
3290     WHEN OTHERS THEN
3291       IF (is_debug_exception_on) THEN
3292         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3293  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
3294       END IF;
3295       IF qte_db_vals_csr%ISOPEN THEN
3296         CLOSE qte_db_vals_csr;
3297       END IF;
3298       IF get_k_num_csr%ISOPEN THEN
3299         CLOSE get_k_num_csr;
3300       END IF;
3301 
3302       IF get_qte_lines_csr%ISOPEN THEN
3303         CLOSE get_qte_lines_csr;
3304       END IF;
3305       IF get_ib_lines_cnt_csr%ISOPEN THEN
3306         CLOSE get_ib_lines_cnt_csr;
3307       END IF;
3308       -- RMUNJULU 03-APR-03 2880556
3309       IF get_unbill_strms_csr%ISOPEN THEN
3310         CLOSE get_unbill_strms_csr;
3311       END IF;
3312 
3313       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3314       (
3315         l_api_name,
3316         G_PKG_NAME,
3317         'OTHERS',
3318         x_msg_count,
3319         x_msg_data,
3320         '_PVT'
3321       );
3322   END terminate_quote;
3323 
3324   -- Start of comments
3325   --
3326   -- Procedure Name	: terminate_quote
3327   -- Description	  : terminates the quote for a input of tbl type
3328   --
3329   -- Business Rules	:
3330   -- Parameters		  :
3331   -- History        : PAGARG   29-SEP-04 Bug #3921591
3332   --                           Added additional parameter p_acceptance_source
3333   --                           This is to identify the source from where this
3334   --                           procedure is being called. Default value for this
3335   --                           is null.
3336   --                           Rollover quote can be accepted only through
3337   --                           ativiation of rolled over contract. So, as part
3338   --                           of that of that process, this procedure should be
3339   --                           called with p_acceptance_source as 'ROLLOVER'
3340   --                   rmunjulu 19-Jan-05 4128965 Modified to Call Term Qte Rec
3341   --                           in a separate loop for ROLLOVER and Launch WFs at the end
3342   -- Version		    : 1.0
3343   --
3344   -- End of comments
3345   PROCEDURE terminate_quote(
3346     p_api_version                  	IN  NUMBER,
3347     p_init_msg_list                	IN  VARCHAR2,
3348     x_return_status                	OUT NOCOPY VARCHAR2,
3349     x_msg_count                    	OUT NOCOPY NUMBER,
3350     x_msg_data                     	OUT NOCOPY VARCHAR2,
3351     p_term_tbl                      IN  term_tbl_type,
3352     x_term_tbl                      OUT NOCOPY term_tbl_type,
3353     x_err_msg                       OUT NOCOPY VARCHAR2,
3354     p_acceptance_source             IN  VARCHAR2 DEFAULT NULL)  AS
3355 
3356     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3357     i                              NUMBER := 0;
3358     l_overall_status               VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3359     l_api_name               CONSTANT VARCHAR2(30) := 'terminate_quote';
3360     l_api_version            CONSTANT NUMBER := 1;
3361 
3362     -- rmunjulu 4128965 Get quote details
3363     CURSOR get_qte_dtls_csr ( p_qte_id IN NUMBER) IS
3364        SELECT qte.accepted_yn
3365        FROM okl_trx_quotes_v qte
3366 	   WHERE qte.id = p_qte_id;
3367 
3368     -- rmunjulu 4128965
3369 	get_qte_dtls_rec get_qte_dtls_csr%ROWTYPE;
3370 	l_event_name VARCHAR2(320);
3371 
3372     TYPE accepted_yn_tbl IS TABLE OF VARCHAR2(3) INDEX BY BINARY_INTEGER;
3373     l_accepted_yn_tbl accepted_yn_tbl;
3374     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'terminate_quote';
3375     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3376     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3377     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3378 
3379   BEGIN
3380     IF (is_debug_procedure_on) THEN
3381       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
3382     END IF;
3383     IF (is_debug_statement_on) THEN
3384       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_acceptance_source: ' || p_acceptance_source);
3385       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_tbl.COUNT: ' || p_term_tbl.COUNT);
3386     END IF;
3387 
3388     --Check API version, initialize message list and create savepoint.
3389     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
3390                                               G_PKG_NAME,
3391                                               p_init_msg_list,
3392                                               l_api_version,
3393                                               p_api_version,
3394                                               '_PVT',
3395                                               x_return_status);
3396 
3397     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3398       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3399     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3400       RAISE OKL_API.G_EXCEPTION_ERROR;
3401     END IF;
3402 
3403     IF (p_term_tbl.COUNT > 0) THEN
3404       i := p_term_tbl.FIRST;
3405       LOOP
3406 
3407           -- rmunjulu 4128965 Get Quote details and store for later use
3408 	      OPEN   get_qte_dtls_csr (p_term_tbl(i).id);
3409 		  FETCH  get_qte_dtls_csr INTO get_qte_dtls_rec;
3410 		  CLOSE  get_qte_dtls_csr;
3411 
3412 		  l_accepted_yn_tbl(i) := get_qte_dtls_rec.accepted_yn;
3413 
3414           terminate_quote (
3415           p_api_version                  => p_api_version,
3416           p_init_msg_list                => OKL_API.G_FALSE,
3417           x_return_status                => x_return_status,
3418           x_msg_count                    => x_msg_count,
3419           x_msg_data                     => x_msg_data,
3420           p_term_rec                     => p_term_tbl(i),
3421           x_term_rec                     => x_term_tbl(i),
3422           x_err_msg                      => x_err_msg,
3423           p_acceptance_source            => p_acceptance_source);
3424           IF (is_debug_statement_on) THEN
3425             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called terminate_quote , return status: ' || x_return_status);
3426           END IF;
3427 
3428        IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3429           IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
3430              l_overall_status := x_return_status;
3431           END IF;
3432        END IF;
3433 
3434        EXIT WHEN (i = p_term_tbl.LAST);
3435        i := p_term_tbl.NEXT(i);
3436      END LOOP;
3437      x_return_status := l_overall_status;
3438 
3439      -- rmunjulu 4128965 If Rollover Quotes then
3440      IF nvl(p_acceptance_source,'*') =  'ROLLOVER' THEN
3441 
3442        -- raise exception if error
3443        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3444           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3445        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3446           RAISE OKL_API.G_EXCEPTION_ERROR;
3447        END IF;
3448 
3449        -- rmunjulu 4128965 Loop through the table again to Launch the Termination Workflows, as they were not launched earlier
3450        i := p_term_tbl.FIRST;
3451        LOOP
3452 
3453           -- if the quote is accepted now Launch the workflows for all Termination Recs
3454           IF (nvl(p_term_tbl(i).accepted_yn,'*') = G_YES AND nvl(l_accepted_yn_tbl(i),'*') = G_NO) THEN
3455 
3456              -- Check Pre or Post Proceeds
3457              IF nvl(p_term_tbl(i).preproceeds_yn,'*') = G_YES THEN
3458 
3459                IF (is_debug_statement_on) THEN
3460                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_WF.raise_business_event');
3461                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_term_tbl(' || i || ').id : ' || p_term_tbl(i).id);
3462                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'event : oracle.apps.okl.am.preproceeds');
3463                END IF;
3464                -- Launch the pre-proceeds WF
3465                OKL_AM_WF.raise_business_event (
3466                        	p_transaction_id   => p_term_tbl(i).id,
3467                         p_event_name	   => 'oracle.apps.okl.am.preproceeds');
3468                IF (is_debug_statement_on) THEN
3469                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_WF.raise_business_event');
3470                END IF;
3471 
3472                -- Get the event name
3473                l_event_name := OKL_AM_UTIL_PVT.get_wf_event_name(
3474                             p_wf_process_type => 'OKLAMPPT',
3475                             p_wf_process_name => 'OKL_AM_PRE_PRO_TER',
3476                             x_return_status   => x_return_status);
3477                IF (is_debug_statement_on) THEN
3478                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_event_name : ' || l_event_name);
3479                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'x_return_status: ' || x_return_status);
3480                END IF;
3481 
3482                -- raise exception if error
3483                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3484                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3485                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3486                  RAISE OKL_API.G_EXCEPTION_ERROR;
3487                END IF;
3488 
3489                -- Set message on stack
3490                -- Workflow event EVENT_NAME has been requested.
3491                OKL_API.set_message(
3492 			              p_app_name     => OKL_API.G_APP_NAME,
3493                           p_msg_name     => 'OKL_AM_WF_EVENT_MSG',
3494                           p_token1       => 'EVENT_NAME',
3495                           p_token1_value => l_event_name);
3496 
3497              ELSE -- Post Proceeds
3498 
3499                IF (is_debug_statement_on) THEN
3500                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_WF.raise_business_event');
3501                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_term_tbl(' || i || ').id : ' || p_term_tbl(i).id);
3502                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'event : oracle.apps.okl.am.postproceeds');
3503                END IF;
3504                -- Launch the post-proceeds WF
3505                OKL_AM_WF.raise_business_event (
3506                         p_transaction_id   => p_term_tbl(i).id,
3507                         p_event_name	   => 'oracle.apps.okl.am.postproceeds');
3508 
3509                IF (is_debug_statement_on) THEN
3510                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_WF.raise_business_event');
3511                END IF;
3512                -- Get the event name
3513                l_event_name := OKL_AM_UTIL_PVT.get_wf_event_name(
3514                             p_wf_process_type => 'OKLAMPPT',
3515                             p_wf_process_name => 'OKL_AM_POST_PRO_TER',
3516                             x_return_status   => x_return_status);
3517                IF (is_debug_statement_on) THEN
3518                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_event_name : ' || l_event_name);
3519                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'x_return_status: ' || x_return_status);
3520                END IF;
3521 
3522                -- raise exception if error
3523                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3524                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3525                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3526                  RAISE OKL_API.G_EXCEPTION_ERROR;
3527                END IF;
3528 
3529                -- Set message on stack
3530                -- Workflow event EVENT_NAME has been requested.
3531                OKL_API.set_message(
3532 			              p_app_name     => OKL_API.G_APP_NAME,
3533                           p_msg_name     => 'OKL_AM_WF_EVENT_MSG',
3534                           p_token1       => 'EVENT_NAME',
3535                           p_token1_value => l_event_name);
3536 
3537              END IF;
3538 
3539              IF (is_debug_statement_on) THEN
3540                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.process_messages');
3541              END IF;
3542              -- Save message from stack into transaction message table
3543              OKL_AM_UTIL_PVT.process_messages(
3544   	                      p_trx_source_table  => 'OKL_TRX_QUOTES_V',
3545     	                  p_trx_id		      => p_term_tbl(i).id,
3546     	                  x_return_status     => x_return_status);
3547              IF (is_debug_statement_on) THEN
3548                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.process_messages , return status: ' || x_return_status);
3549              END IF;
3550 
3551              -- raise exception if error
3552              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3553                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3554              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3555                RAISE OKL_API.G_EXCEPTION_ERROR;
3556              END IF;
3557           END IF; -- End of If accepted now
3558 
3559           EXIT WHEN (i = p_term_tbl.LAST);
3560           i := p_term_tbl.NEXT(i);
3561           END LOOP;
3562 
3563     	  x_return_status := l_return_status;
3564 
3565        END IF; -- End of Rollover If
3566 
3567     END IF; -- End of Tbl count
3568 
3569     -- end the transaction
3570     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3571     IF (is_debug_procedure_on) THEN
3572       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
3573     END IF;
3574 
3575   EXCEPTION
3576     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3577       IF (is_debug_exception_on) THEN
3578         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
3579       END IF;
3580       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3581       (
3582         l_api_name,
3583         G_PKG_NAME,
3584         'OKL_API.G_RET_STS_ERROR',
3585         x_msg_count,
3586         x_msg_data,
3587         '_PVT'
3588       );
3589     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3590       IF (is_debug_exception_on) THEN
3591         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
3592       END IF;
3593       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3594       (
3595         l_api_name,
3596         G_PKG_NAME,
3597         'OKL_API.G_RET_STS_UNEXP_ERROR',
3598         x_msg_count,
3599         x_msg_data,
3600         '_PVT'
3601       );
3602     WHEN OTHERS THEN
3603       IF (is_debug_exception_on) THEN
3604         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3605  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
3606       END IF;
3607       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3608       (
3609         l_api_name,
3610         G_PKG_NAME,
3611         'OTHERS',
3612         x_msg_count,
3613         x_msg_data,
3614         '_PVT'
3615       );
3616   END terminate_quote;
3617 
3618   -- Start of comments
3619   --
3620   -- Procedure Name : submit_for_approval
3621   -- Description    : New procedure to support manual termination quote approval via workflow.
3622   -- Business Rules :
3623   -- Parameters     : IN quote record structure using only quote id and quote status
3624   -- Version        : 1.0
3625   -- History        : MDOKAL    25-NOV-02 - 2680558 : New procedure.
3626   --                  RMUNJULU 23-JAN-03 2762065 Get the qst_code from DB if not passed
3627   --                  RMUNJULU 13-May-04 3630826 Changed the business event being raised
3628   --                  from the submit process.
3629   -- End of comments
3630 
3631   PROCEDURE submit_for_approval(
3632     p_api_version                  	IN  NUMBER,
3633     p_init_msg_list                	IN  VARCHAR2,
3634     x_return_status                	OUT NOCOPY VARCHAR2,
3635     x_msg_count                    	OUT NOCOPY NUMBER,
3636     x_msg_data                     	OUT NOCOPY VARCHAR2,
3637     p_term_rec                      IN  term_rec_type,
3638     x_term_rec                      OUT NOCOPY term_rec_type) AS
3639 
3640 
3641       -- RMUNJULU 23-JAN-03 2762065 Added cursor
3642       -- Get the quote status
3643       CURSOR get_quote_status_csr (p_qte_id IN NUMBER) IS
3644            SELECT QTE.qst_code
3645            FROM   OKL_TRX_QUOTES_V QTE
3646            WHERE  QTE.id = p_qte_id;
3647 
3648     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3649     l_api_name             CONSTANT VARCHAR2(30) := 'submit_for_approval';
3650     l_api_version          CONSTANT NUMBER := 1;
3651     l_event_name                    VARCHAR2(2000);
3652 
3653 
3654        l_qst_code VARCHAR2(300);
3655    l_module_name VARCHAR2(500) := G_MODULE_NAME || 'submit_for_approval';
3656    is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3657    is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3658    is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3659 
3660 
3661     BEGIN
3662     IF (is_debug_procedure_on) THEN
3663       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
3664     END IF;
3665 	 IF (is_debug_statement_on) THEN
3666 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.id: ' || p_term_rec.id);
3667 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.qrs_code: ' || p_term_rec.qrs_code);
3668 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.qst_code: ' || p_term_rec.qst_code);
3669 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.qtp_code: ' || p_term_rec.qtp_code);
3670 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.trn_code: ' || p_term_rec.trn_code);
3671 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.pop_code_end: ' || p_term_rec.pop_code_end);
3672 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.pop_code_early: ' || p_term_rec.pop_code_early);
3673 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.consolidated_qte_id: ' || p_term_rec.consolidated_qte_id);
3674 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.khr_id: ' || p_term_rec.khr_id);
3675 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.art_id: ' || p_term_rec.art_id);
3676 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.pdt_id: ' || p_term_rec.pdt_id);
3677 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.early_termination_yn: ' || p_term_rec.early_termination_yn);
3678 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.partial_yn: ' || p_term_rec.partial_yn);
3679 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.preproceeds_yn: ' || p_term_rec.preproceeds_yn);
3680 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_requested: ' || p_term_rec.date_requested);
3681 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_proposal: ' || p_term_rec.date_proposal);
3682 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_effective_to: ' || p_term_rec.date_effective_to);
3683 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_accepted: ' || p_term_rec.date_accepted);
3684 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.summary_format_yn: ' || p_term_rec.summary_format_yn);
3685 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.consolidated_yn: ' || p_term_rec.consolidated_yn);
3686 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.principal_paydown_amount: ' || p_term_rec.principal_paydown_amount);
3687 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.residual_amount: ' || p_term_rec.residual_amount);
3688 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.yield: ' || p_term_rec.yield);
3689 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.rent_amount: ' || p_term_rec.rent_amount);
3690 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_restructure_end: ' || p_term_rec.date_restructure_end);
3691 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_restructure_start: ' || p_term_rec.date_restructure_start);
3692 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.term: ' || p_term_rec.term);
3693 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.purchase_percent: ' || p_term_rec.purchase_percent);
3694 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_due: ' || p_term_rec.date_due);
3695 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.payment_frequency: ' || p_term_rec.payment_frequency);
3696 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.remaining_payments: ' || p_term_rec.remaining_payments);
3697 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_effective_from: ' || p_term_rec.date_effective_from);
3698 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.quote_number: ' || p_term_rec.quote_number);
3699 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.approved_yn: ' || p_term_rec.approved_yn);
3700 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.accepted_yn: ' || p_term_rec.accepted_yn);
3701 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.payment_received_yn: ' || p_term_rec.payment_received_yn);
3702 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_payment_received: ' || p_term_rec.date_payment_received);
3703 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.date_approved: ' || p_term_rec.date_approved);
3704 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.approved_by: ' || p_term_rec.approved_by);
3705 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.org_id: ' || p_term_rec.org_id);
3706 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.purchase_amount: ' || p_term_rec.purchase_amount);
3707 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.purchase_formula: ' || p_term_rec.purchase_formula);
3708 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.asset_value: ' || p_term_rec.asset_value);
3709 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.residual_value: ' || p_term_rec.residual_value);
3710 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.unbilled_receivables: ' || p_term_rec.unbilled_receivables);
3711 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.gain_loss: ' || p_term_rec.gain_loss);
3712 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.PERDIEM_AMOUNT: ' || p_term_rec.PERDIEM_AMOUNT);
3713 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_code: ' || p_term_rec.currency_code);
3714 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_conversion_code: ' || p_term_rec.currency_conversion_code);
3715 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_conversion_type: ' || p_term_rec.currency_conversion_type);
3716 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_conversion_rate: ' || p_term_rec.currency_conversion_rate);
3717 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.currency_conversion_date: ' || p_term_rec.currency_conversion_date);
3718 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.legal_entity_id: ' || p_term_rec.legal_entity_id);
3719 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.repo_quote_indicator_yn: ' || p_term_rec.repo_quote_indicator_yn);
3720 	 END IF;
3721 
3722     --Check API version, initialize message list and create savepoint.
3723     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
3724                                               G_PKG_NAME,
3725                                               p_init_msg_list,
3726                                               l_api_version,
3727                                               p_api_version,
3728                                               '_PVT',
3729                                               x_return_status);
3730 
3731     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3732         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3733     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3734         RAISE OKL_API.G_EXCEPTION_ERROR;
3735     END IF;
3736 
3737     -- Check if quote id passed is valid
3738     IF p_term_rec.id IS NULL OR p_term_rec.id = OKL_API.G_MISS_NUM THEN
3739 
3740       OKL_API.set_message( p_app_name     => OKC_API.G_APP_NAME,
3741                            p_msg_name     => OKC_API.G_REQUIRED_VALUE,
3742                            p_token1       => OKC_API.G_COL_NAME_TOKEN,
3743                            p_token1_value => 'id');
3744 
3745       RAISE OKL_API.G_EXCEPTION_ERROR;
3746 
3747     END IF;
3748 
3749 
3750     -- RMUNJULU 23-JAN-03 2762065 Added IF to get the qst_code if not passed
3751     -- If qst code not passed get from DB
3752     IF   p_term_rec.qst_code IS NULL
3753     OR   p_term_rec.qst_code = OKL_API.G_MISS_CHAR THEN
3754 
3755        -- get qst code from DB
3756        FOR get_quote_status_rec IN get_quote_status_csr(p_term_rec.id) LOOP
3757 
3758            -- Set l_qst_code from DB value
3759            l_qst_code := get_quote_status_rec.qst_code;
3760 
3761        END LOOP;
3762 
3763     ELSE
3764 
3765       -- Set l_qst_code from parameter value
3766       l_qst_code := p_term_rec.qst_code;
3767 
3768     END IF;
3769 
3770     -- Check if quote status passed is valid
3771     -- RMUNJULU 23-JAN-03 2762065 commented out IF since always gets the qst_code
3772 --    IF p_term_rec.qst_code IS NOT NULL AND p_term_rec.qst_code <> OKL_API.G_MISS_CHAR THEN
3773         IF l_qst_code NOT IN ('DRAFTED','REJECTED') THEN
3774 
3775             -- Generate incorrect status message.
3776             OKL_API.set_message( p_app_name      => OKL_API.G_APP_NAME,
3777                                  p_msg_name      => 'OKL_AM_SUBMIT_FOR_APPROVAL');
3778 
3779             RAISE OKL_API.G_EXCEPTION_ERROR;
3780         ELSE
3781 
3782              IF (is_debug_statement_on) THEN
3783                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_WF.raise_business_event');
3784                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_term_rec.id : ' || p_term_rec.id);
3785                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'event : oracle.apps.okl.am.submitquoteforapproval');
3786              END IF;
3787             -- Launch the NSend Quote WF
3788             -- RMUNJULU 3630826 Changed the business event being raised to a new seeded one
3789             OKL_AM_WF.raise_business_event (
3790                     p_transaction_id => p_term_rec.id,
3791 		            p_event_name	 => 'oracle.apps.okl.am.submitquoteforapproval');
3792              IF (is_debug_statement_on) THEN
3793                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_WF.raise_business_event');
3794                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.process_messages');
3795              END IF;
3796             -- Save messages in database
3797             OKL_AM_UTIL_PVT.process_messages (
3798                 	    p_trx_source_table	=> 'OKL_TRX_QUOTES_V',
3799                 	    p_trx_id		=> p_term_rec.id,
3800                 	    x_return_status	=> l_return_status);
3801              IF (is_debug_statement_on) THEN
3802                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.process_messages , return status: ' || l_return_status);
3803              END IF;
3804 
3805         END IF;
3806 --    ELSE
3807 
3808 --      OKL_API.set_message( p_app_name     => OKC_API.G_APP_NAME,
3809 --                           p_msg_name     => OKC_API.G_REQUIRED_VALUE,
3810 --                           p_token1       => OKC_API.G_COL_NAME_TOKEN,
3811 --                           p_token1_value => 'qst_code');
3812 --
3813 --      RAISE OKL_API.G_EXCEPTION_ERROR;
3814 
3815 --    END IF;
3816 
3817     -- rmunjulu returning p_term_rec as x_term_rec for bug 4547970
3818     x_term_rec := p_term_rec;
3819 
3820     x_return_status := l_return_status;
3821 
3822     -- end the transaction
3823     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3824     IF (is_debug_procedure_on) THEN
3825       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
3826     END IF;
3827 
3828     EXCEPTION
3829     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3830       IF (is_debug_exception_on) THEN
3831         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
3832       END IF;
3833       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3834       (
3835         l_api_name,
3836         G_PKG_NAME,
3837         'OKL_API.G_RET_STS_ERROR',
3838         x_msg_count,
3839         x_msg_data,
3840         '_PVT'
3841       );
3842     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3843       IF (is_debug_exception_on) THEN
3844         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
3845       END IF;
3846       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3847       (
3848         l_api_name,
3849         G_PKG_NAME,
3850         'OKL_API.G_RET_STS_UNEXP_ERROR',
3851         x_msg_count,
3852         x_msg_data,
3853         '_PVT'
3854       );
3855     WHEN OTHERS THEN
3856       IF (is_debug_exception_on) THEN
3857         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3858  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
3859       END IF;
3860       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3861       (
3862         l_api_name,
3863         G_PKG_NAME,
3864         'OTHERS',
3865         x_msg_count,
3866         x_msg_data,
3867         '_PVT'
3868       );
3869     END submit_for_approval;
3870 --
3871 -- BAKUCHIB Bug 2484327 start
3872 --
3873 -------------------------------------------------------------------------------------------------
3874 -- Start of Commnets
3875 -- Badrinath Kuchibholta
3876 -- Procedure Name       : validate_qte_ln_dtls
3877 -- Description          : This Local Procedure is used for validate Quote Line Details Record.
3878 -- Business Rules       :
3879 -- Parameters           : PL/SQL table of record of qte_ln_dtl_tbl type
3880 --                        x_return_status OUT NOCOPY VARCHAR2
3881 -- Version              : 1.0
3882 -- History              : BAKUCHIB  10-DEC-02 - 2484327 created
3883 --                      : BAKUCHIB  13-DEC-02 - 2484327 Modified
3884 --                      : a) Corrected the cursor validate_qte_id_csr
3885 --                        to get the quote number.
3886 --                        b) Also changed to check the count of
3887 --                        select_yn = 'Y' matching quote qty outside
3888 --                        the loop.
3889 --                        c) Removed l_k_lines_validate_csr as not used.
3890 --                      : BAKUCHIB  16-DEC-02 - 2484327 Modified
3891 --                        Quote qty should always be less than or equal to
3892 --                        Asset qty. Earlier an error was been thrown when
3893 --                        Quote qty >= Asset qty.
3894 --                        RMUNJULU 09-JAN-03 2743604 Changed if to check for
3895 --                        assetqty <> qteqty and changed message token
3896 --                        RMUNJULU 14-JAN-03 2748581 Removed the check
3897 --                        assetqty <> qteqty
3898 --                        RMUNJULU 24-JAN-03 2759726 Added code to do proper
3899 --                        validations and raise proper exceptions
3900 --                        Added validations for quote and contract statuses
3901 -- End of Commnets
3902 
3903   PROCEDURE validate_qte_ln_dtls(
3904                     p_qld_tbl       IN OUT NOCOPY qte_ln_dtl_tbl,
3905                     x_return_status OUT NOCOPY VARCHAR2) IS
3906 
3907     ln_asset_qty              OKL_TXL_QUOTE_LINES_B.ASSET_QUANTITY%TYPE;
3908     ln_qte_qty                OKL_TXL_QUOTE_LINES_B.QUOTE_QUANTITY%TYPE;
3909     lv_asset_number           OKC_K_LINES_TL.NAME%TYPE := null;
3910     ln_dummy1                 NUMBER := 0;
3911     ln_dummy2                 NUMBER := 0;
3912     ln_quote_number           OKL_TRX_QUOTES_B.QUOTE_NUMBER%TYPE := null;
3913     i                         NUMBER := 0;
3914     l_qld_tbl                 qte_ln_dtl_tbl := p_qld_tbl;
3915     l_clev_tbl                CLEV_TBL_TYPE;
3916     lv_sno_yn                 VARCHAR2(3);
3917     lv_select_yn              VARCHAR2(3);
3918     l_return_status           VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
3919     ln_select_count           NUMBER := 0;
3920     ln_fin_line_id            OKC_K_LINES_B.ID%TYPE;
3921 
3922     G_QUOTE_ALREADY_ACCP      CONSTANT VARCHAR2(200) := 'OKL_AM_QUOTE_ALREADY_ACCP';
3923     G_INVALID_QUOTE_QTY       CONSTANT VARCHAR2(200) := 'OKL_AM_INVALID_QUOTE_QTY';
3924     G_QTE_QTY_SRL_CNT_ERR     CONSTANT VARCHAR2(200) := 'OKL_AM_QTE_QTY_SRL_CNT_ERR';
3925 
3926       -- RMUNJULU 24-JAN-03 2759726 Added variables
3927       ln_chr_id NUMBER;
3928       lx_contract_status VARCHAR2(300);
3929       l_api_version	 CONSTANT NUMBER	:= 1;
3930       l_msg_count NUMBER := OKL_API.G_MISS_NUM;
3931       l_msg_data VARCHAR2(2000);
3932 
3933 
3934     -- Get the asset qty, Quote qty and Asset Number
3935     -- RMUNJULU 24-JAN-03 2759726 Taken out the sts_code check
3936     CURSOR get_tql_csr(p_tql_id OKL_TXL_QUOTE_LINES_B.ID%TYPE) IS
3937     SELECT tql.asset_quantity,
3938            tql.quote_quantity,
3939            cle.name,
3940            cle.chr_id -- RMUNJULU 24-JAN-03 2759726 Added
3941     FROM OKL_TXL_QUOTE_LINES_B tql,
3942          OKC_K_LINES_V cle,
3943          OKC_LINE_STYLES_B lse
3944     WHERE tql.id = P_tql_id
3945     AND tql.qlt_code = 'AMCFIA'
3946     AND tql.kle_id = cle.id
3947     --AND cle.sts_code = 'BOOKED'
3948     AND cle.lse_id = lse.id
3949     AND lse.lty_code = G_FIN_LINE_LTY_CODE
3950     AND lse.lse_type = G_TLS_TYPE
3951     AND lse.lse_parent_id IS NULL;
3952 
3953     -- Validate the contract id
3954     -- RMUNJULU 24-JAN-03 2759726 Taken out the sts_code check
3955     CURSOR validate_chr_id_csr(p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
3956     SELECT 1
3957     FROM DUAL
3958     WHERE EXISTS (SELECT '1'
3959                   FROM OKC_K_HEADERS_B chr
3960                   WHERE chr.id = p_dnz_chr_id
3961                   AND scs_code = G_LEASE_SCS_CODE);
3962                   --AND sts_code = 'BOOKED');
3963 
3964     -- Validate the Install Base line id and contract id
3965     CURSOR validate_Ib_line_csr(p_ib_id      OKC_K_LINES_B.ID%TYPE,
3966                                 p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
3967     SELECT 1
3968     FROM DUAL
3969     WHERE EXISTS (SELECT '1'
3970                   FROM OKC_K_LINES_B cle,
3971                        OKC_LINE_STYLES_B lse
3972                   WHERE cle.id = p_ib_id
3973                   AND cle.dnz_chr_id = p_dnz_chr_id
3974                   AND cle.lse_id = lse.id
3975                   AND lse.lty_code = 'INST_ITEM');
3976 
3977     -- Get the Quote number for Qte id
3978     CURSOR validate_qte_id_csr(p_qte_id OKL_TRX_QUOTES_B.ID%TYPE) IS
3979     SELECT quote_number
3980     FROM OKL_TRX_QUOTES_B qte
3981     WHERE qte.id = p_qte_id;
3982    l_module_name VARCHAR2(500) := G_MODULE_NAME || 'validate_qte_ln_dtls';
3983    is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3984    is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3985    is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3986 
3987   BEGIN
3988     IF (is_debug_procedure_on) THEN
3989       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
3990     END IF;
3991 	 IF (is_debug_statement_on) THEN
3992 	   FOR i IN p_qld_tbl.FIRST..p_qld_tbl.LAST LOOP
3993 	     IF (p_qld_tbl.exists(i)) THEN
3994 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').qst_code: ' || p_qld_tbl(i).qst_code);
3995 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').qte_id: ' || p_qld_tbl(i).qte_id);
3996 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').instance_quantity: ' || p_qld_tbl(i).instance_quantity);
3997 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').tql_id: ' || p_qld_tbl(i).tql_id);
3998 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').tqd_id: ' || p_qld_tbl(i).tqd_id);
3999 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').select_yn: ' || p_qld_tbl(i).select_yn);
4000 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').ib_line_id: ' || p_qld_tbl(i).ib_line_id);
4001 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').fin_line_id: ' || p_qld_tbl(i).fin_line_id);
4002 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').dnz_chr_id: ' || p_qld_tbl(i).dnz_chr_id);
4003 	     END IF;
4004 	   END LOOP;
4005 	 END IF;
4006     -- initialize return status
4007     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4008 
4009     IF l_qld_tbl.COUNT > 0 THEN
4010 
4011       i := l_qld_tbl.FIRST;
4012 
4013       -- Looping the table of record to validate
4014       LOOP
4015 
4016         IF (l_qld_tbl(i).tql_id IS NULL OR
4017            l_qld_tbl(i).tql_id = OKL_API.G_MISS_NUM) THEN
4018           x_return_status := OKL_API.G_RET_STS_ERROR;
4019           OKL_API.set_message(p_app_name      => G_APP_NAME,
4020                               p_msg_name      => G_REQUIRED_VALUE,
4021                               p_token1        => G_COL_NAME_TOKEN,
4022                               p_token1_value  => 'TQL_ID');
4023           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4024         END IF;
4025 
4026         IF (l_qld_tbl(i).ib_line_id IS NULL OR
4027            l_qld_tbl(i).ib_line_id = OKL_API.G_MISS_NUM) THEN
4028           x_return_status := OKL_API.G_RET_STS_ERROR;
4029           OKL_API.set_message(p_app_name      => G_APP_NAME,
4030                               p_msg_name      => G_REQUIRED_VALUE,
4031                               p_token1        => G_COL_NAME_TOKEN,
4032                               p_token1_value  => 'IB_LINE_ID');
4033           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4034         END IF;
4035 
4036         IF (l_qld_tbl(i).fin_line_id IS NULL OR
4037            l_qld_tbl(i).fin_line_id = OKL_API.G_MISS_NUM) THEN
4038           x_return_status := OKL_API.G_RET_STS_ERROR;
4039           OKL_API.set_message(p_app_name      => G_APP_NAME,
4040                               p_msg_name      => G_REQUIRED_VALUE,
4041                               p_token1        => G_COL_NAME_TOKEN,
4042                               p_token1_value  => 'FIN_LINE_ID');
4043           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4044         END IF;
4045 
4046         IF (l_qld_tbl(i).dnz_chr_id IS NULL OR
4047            l_qld_tbl(i).dnz_chr_id = OKL_API.G_MISS_NUM) THEN
4048           x_return_status := OKL_API.G_RET_STS_ERROR;
4049           OKL_API.set_message(p_app_name      => G_APP_NAME,
4050                               p_msg_name      => G_REQUIRED_VALUE,
4051                               p_token1        => G_COL_NAME_TOKEN,
4052                               p_token1_value  => 'DNZ_CHR_ID');
4053           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4054         END IF;
4055 
4056         IF (l_qld_tbl(i).instance_quantity IS NULL OR
4057            l_qld_tbl(i).instance_quantity = OKL_API.G_MISS_NUM) THEN
4058           x_return_status := OKL_API.G_RET_STS_ERROR;
4059           OKL_API.set_message(p_app_name      => G_APP_NAME,
4060                               p_msg_name      => G_REQUIRED_VALUE,
4061                               p_token1        => G_COL_NAME_TOKEN,
4062                               p_token1_value  => 'INSTANCE_QUANTITY');
4063           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4064         END IF;
4065 
4066         -- Validating QTE ID
4067         OPEN  validate_qte_id_csr(p_qte_id => l_qld_tbl(i).qte_id);
4068         FETCH validate_qte_id_csr INTO ln_quote_number;
4069         IF validate_qte_id_csr%NOTFOUND THEN
4070           ln_quote_number := null;
4071         END IF;
4072         CLOSE validate_qte_id_csr;
4073 
4074         IF (ln_quote_number IS NULL OR
4075            ln_quote_number = OKL_API.G_MISS_NUM) THEN
4076           OKL_API.set_message(p_app_name      => G_APP_NAME,
4077                               p_msg_name      => G_INVALID_VALUE,
4078                               p_token1        => G_COL_NAME_TOKEN,
4079                               p_token1_value  => 'QTE_ID');
4080           -- RMUNJULU 24-JAN-03 2759726 Changed l_return_status to x_return_status
4081           x_return_status := OKL_API.G_RET_STS_ERROR;
4082           -- RMUNJULU 24-JAN-03 2759726 Added exit when
4083           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4084         END IF;
4085 
4086 -- RMUNJULU 24-JAN-03 2759726 commented out this code
4087 --        IF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4088 --          IF (x_return_status <> OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4089 --            x_return_status := l_return_status;
4090 --          END IF;
4091 --        END IF;
4092 
4093         -- Validating QST_CODE
4094         IF l_qld_tbl(i).qst_code IN ('ACCEPTED','COMPLETE') THEN
4095 
4096           -- Quote QUOTE_NUMBER is already accepted.
4097           OKL_API.set_message(p_app_name      => G_APP_NAME,
4098                               p_msg_name      => G_QUOTE_ALREADY_ACCP,
4099                               p_token1        => 'QUOTE_NUMBER',
4100                               p_token1_value  => TO_CHAR(ln_quote_number));
4101           -- RMUNJULU 24-JAN-03 2759726 Changed l_return_status to x_return_status
4102           x_return_status := OKL_API.G_RET_STS_ERROR;
4103           -- RMUNJULU 24-JAN-03 2759726 Added exit when
4104           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4105         END IF;
4106 
4107         -- RMUNJULU 24-JAN-03 2759726 Check if Quote is already canceled.
4108         IF l_qld_tbl(i).qst_code = 'CANCELLED' THEN
4109 
4110           -- Quote QUOTE_NUMBER is already canceled.
4111           OKL_API.set_message(p_app_name      => G_APP_NAME,
4112                               p_msg_name      => 'OKL_AM_QUOTE_ALREADY_CANCELED',
4113                               p_token1        => 'QUOTE_NUMBER',
4114                               p_token1_value  =>  TO_CHAR(ln_quote_number));
4115 
4116           x_return_status := OKL_API.G_RET_STS_ERROR;
4117 
4118           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4119 
4120         END IF;
4121 
4122 
4123 --        RMUNJULU 24-JAN-03 2759726 commented out this code
4124 --        IF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4125 --          IF (x_return_status <> OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4126 --            x_return_status := l_return_status;
4127 --          END IF;
4128 --        END IF;
4129 
4130         -- Validating TQL_ID
4131         OPEN  get_tql_csr(p_tql_id => l_qld_tbl(i).tql_id);
4132         FETCH get_tql_csr INTO ln_asset_qty,
4133                                ln_qte_qty,
4134                                lv_asset_number,
4135                                ln_chr_id; -- RMUNJULU 24-JAN-03 2759726 Added
4136         IF get_tql_csr%NOTFOUND THEN
4137           lv_asset_number := null;
4138         END IF;
4139         CLOSE get_tql_csr;
4140 
4141         IF (lv_asset_number IS NOT NULL AND --RMUNJULU 24-JAN-03 2759726 Changed OR to AND
4142             lv_asset_number <> OKL_API.G_MISS_CHAR) THEN
4143 
4144           IF (is_debug_statement_on) THEN
4145             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract');
4146           END IF;
4147           -- RMUNJULU 24-JAN-03 2759726 Added code to check if contract valid
4148           OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract(
4149                           p_api_version     => l_api_version,
4150                           p_init_msg_list   => OKL_API.G_FALSE,
4151                           x_return_status   => x_return_status,
4152                           x_msg_count       => l_msg_count,
4153                           x_msg_data        => l_msg_data,
4154                           p_contract_id     => ln_chr_id,
4155                           p_control_flag    => 'TRMNT_QUOTE_UPDATE',
4156                           x_contract_status => lx_contract_status);
4157           IF (is_debug_statement_on) THEN
4158             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract , lx_contract_status: ' || lx_contract_status);
4159           END IF;
4160 
4161 
4162           -- RMUNJULU 24-JAN-03 2759726 Added code to exit out of loop
4163           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR
4164                   OR x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4165 
4166 
4167           IF ln_qte_qty IS NOT NULL AND --RMUNJULU 24-JAN-03 2759726 Changed OR to AND
4168              ln_asset_qty IS NOT NULL THEN
4169 
4170             IF ln_qte_qty > ln_asset_qty THEN
4171 
4172               -- Asset ASSET_NUMBER quantity is less than the specified quote quantity.
4173               OKL_API.set_message(p_app_name      => G_APP_NAME,
4174                                   p_msg_name      => G_INVALID_QUOTE_QTY,
4175                                   p_token1        => 'ASSET_NUMBER',
4176                                   p_token1_value  => lv_asset_number);
4177 
4178               -- RMUNJULU 24-JAN-03 2759726 Changed l_return_status to x_return_status
4179               x_return_status := OKL_API.G_RET_STS_ERROR;
4180 
4181               -- RMUNJULU 24-JAN-03 2759726 Added exit when
4182               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4183 
4184             END IF;
4185 
4186           ELSE
4187 
4188             OKL_API.set_message(p_app_name      => G_APP_NAME,
4189                                 p_msg_name      => G_INVALID_VALUE, -- RMUNJULU 24-JAN-03 2759726 Changed
4190                                 p_token1        => G_COL_NAME_TOKEN,
4191                                 p_token1_value  => 'TQL_ID');
4192 
4193             -- RMUNJULU 24-JAN-03 2759726 Changed l_return_status to x_return_status
4194             x_return_status := OKL_API.G_RET_STS_ERROR;
4195 
4196             -- RMUNJULU 24-JAN-03 2759726 Added exit when
4197             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4198 
4199           END IF;
4200         ELSE
4201           OKL_API.set_message(p_app_name      => G_APP_NAME,
4202                               p_msg_name      => G_INVALID_VALUE,
4203                               p_token1        => G_COL_NAME_TOKEN,
4204                               p_token1_value  => 'TQL_ID');
4205           -- RMUNJULU 24-JAN-03 2759726 Changed l_return_status to x_return_status
4206           x_return_status := OKL_API.G_RET_STS_ERROR;
4207           -- RMUNJULU 24-JAN-03 2759726 Added exit when
4208           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4209         END IF;
4210 
4211 --        RMUNJULU 24-JAN-03 2759726 commented out this code
4212 --        IF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4213 --          IF (x_return_status <> OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4214 --            x_return_status := l_return_status;
4215 --          END IF;
4216 --        END IF;
4217 
4218         -- Validating SELECT YN
4219         IF upper(nvl(l_qld_tbl(i).select_yn,'N')) NOT in ('Y','N') THEN
4220           OKL_API.set_message(p_app_name      => G_APP_NAME,
4221                               p_msg_name      => G_INVALID_VALUE,
4222                               p_token1        => G_COL_NAME_TOKEN,
4223                               p_token1_value  => 'SELECT_YN');
4224           -- RMUNJULU 24-JAN-03 2759726 Changed l_return_status to x_return_status
4225           x_return_status := OKL_API.G_RET_STS_ERROR;
4226           -- RMUNJULU 24-JAN-03 2759726 Added exit when
4227           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4228         ELSE
4229           l_qld_tbl(i).select_yn := upper(nvl(l_qld_tbl(i).select_yn,'N'));
4230           IF l_qld_tbl(i).select_yn = 'Y' THEN
4231             ln_select_count := ln_select_count + 1;
4232           END IF;
4233         END IF;
4234 
4235 --        RMUNJULU 24-JAN-03 2759726 commented out this code
4236 --        IF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4237 --          IF (x_return_status <> OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4238 --            x_return_status := l_return_status;
4239 --          END IF;
4240 --        END IF;
4241 
4242         -- Validating DNZ CHR ID
4243         OPEN  validate_chr_id_csr(p_dnz_chr_id => l_qld_tbl(i).dnz_chr_id);
4244         FETCH validate_chr_id_csr INTO ln_dummy2;
4245         IF validate_chr_id_csr%NOTFOUND THEN
4246           ln_dummy2 := 0;
4247         END IF;
4248         CLOSE validate_chr_id_csr;
4249 
4250         IF ln_dummy2 = 0 THEN
4251           OKL_API.set_message(p_app_name      => G_APP_NAME,
4252                               p_msg_name      => G_INVALID_VALUE,
4253                               p_token1        => G_COL_NAME_TOKEN,
4254                               p_token1_value  => 'DNZ_CHR_ID');
4255           -- RMUNJULU 24-JAN-03 2759726 Changed l_return_status to x_return_status
4256           x_return_status := OKL_API.G_RET_STS_ERROR;
4257           -- RMUNJULU 24-JAN-03 2759726 Added exit when
4258           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4259         END IF;
4260 
4261 --        RMUNJULU 24-JAN-03 2759726 commented out this code
4262 --        IF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4263 --          IF (x_return_status <> OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4264 --            x_return_status := l_return_status;
4265 --          END IF;
4266 --        END IF;
4267 
4268         -- Validating Ib LINE ID
4269         OPEN  validate_Ib_line_csr(p_ib_id      => l_qld_tbl(i).ib_line_id,
4270                                    p_dnz_chr_id => l_qld_tbl(i).dnz_chr_id);
4271         FETCH validate_Ib_line_csr INTO ln_dummy1;
4272         IF validate_Ib_line_csr%NOTFOUND THEN
4273           ln_dummy1 := 0;
4274         END IF;
4275         CLOSE validate_Ib_line_csr;
4276 
4277         IF ln_dummy1 = 0 THEN
4278           OKL_API.set_message(p_app_name      => G_APP_NAME,
4279                               p_msg_name      => G_INVALID_VALUE,
4280                               p_token1        => G_COL_NAME_TOKEN,
4281                               p_token1_value  => 'IB_LINE_ID');
4282           -- RMUNJULU 24-JAN-03 2759726 Changed l_return_status to x_return_status
4283           x_return_status := OKL_API.G_RET_STS_ERROR;
4284           -- RMUNJULU 24-JAN-03 2759726 Added exit when
4285           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4286         END IF;
4287 
4288 --        RMUNJULU 24-JAN-03 2759726 commented out this code
4289 --        IF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4290 --          IF (x_return_status <> OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4291 --            x_return_status := l_return_status;
4292 --          END IF;
4293 --        END IF;
4294 
4295         -- We will validate the Financial Asset Line out of the loop, since
4296         -- We need to check if the count of the quote qty equal to count of select_yn = 'Y'
4297         ln_fin_line_id  := l_qld_tbl(i).fin_line_id;
4298 
4299         IF x_return_status = OKL_API.G_RET_STS_ERROR OR
4300            l_return_status = OKL_API.G_RET_STS_ERROR THEN
4301           x_return_status := OKL_API.G_RET_STS_ERROR;
4302           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4303         ELSIF x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR OR
4304               l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
4305           x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4306           EXIT WHEN (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR);
4307         END IF;
4308 
4309         EXIT WHEN (i = l_qld_tbl.LAST);
4310 
4311         i := l_qld_tbl.NEXT(i);
4312 
4313       END LOOP;
4314 
4315       -- RMUNJULU 24-JAN-03 2759726 Changed = to <> and 'E' to 'S'
4316       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4317         RAISE G_EXCEPTION_HALT_VALIDATION;
4318       END IF;
4319 
4320       -- Validate Fin Line id by checking the asset is Serialized
4321       x_return_status := check_asset_sno(p_asset_line => ln_fin_line_id,
4322                                          x_sno_yn     => lv_sno_yn,
4323                                          x_clev_tbl   => l_clev_tbl);
4324       IF (is_debug_statement_on) THEN
4325         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_asset_sno , x_return_status : ' || x_return_status);
4326         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'lv_sno_yn : ' || lv_sno_yn);
4327       END IF;
4328 
4329       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
4330         RAISE G_EXCEPTION_HALT_VALIDATION;
4331       END IF;
4332 
4333 
4334       IF lv_sno_yn = OKL_API.G_TRUE THEN
4335 
4336         -- Check if selected assets count not the same as quote quantity
4337         -- RMUNJULU 09-JAN-03 2743604 Added additional condition to check if
4338         -- asset qty not the same as quote qty
4339         -- RMUNJULU 14-JAN-03 2748581 Removed the check ln_asset_qty <> ln_qte_qty
4340         IF  ln_select_count <> ln_qte_qty  THEN
4341         --AND ln_asset_qty <> ln_qte_qty THEN
4342 
4343           -- Asset ASSET_NUMBER is serialized. Quote quantity QUOTE_QUANTITY
4344           -- does not match the number of selected asset units ASSET_UNITS.
4345           OKL_API.set_message(p_app_name      => G_APP_NAME,
4346                               p_msg_name      => G_QTE_QTY_SRL_CNT_ERR,
4347                               p_token1        => 'ASSET_NUMBER',
4348                               p_token1_value  => lv_asset_number,
4349                               p_token2        => 'QUOTE_QUANTITY',
4350                               p_token2_value  => ln_qte_qty,
4351                               p_token3        => 'ASSET_UNITS',
4352                               p_token3_value  => ln_select_count); -- RMUNJULU 2743604
4353 
4354           RAISE G_EXCEPTION_HALT_VALIDATION;
4355 
4356         END IF;
4357 
4358       END IF;
4359 
4360       p_qld_tbl := l_qld_tbl;
4361 
4362     ELSE -- table has no records
4363 
4364      -- RMUNJULU 24-JAN-03 2759726 Added set msg
4365      OKL_API.set_message(p_app_name      => G_APP_NAME,
4366                          p_msg_name      => G_INVALID_VALUE,
4367                          p_token1        => G_COL_NAME_TOKEN,
4368                          p_token1_value  => 'p_qld_tbl');
4369 
4370       x_return_status := OKL_API.G_RET_STS_ERROR;
4371 
4372     END IF;
4373     IF (is_debug_procedure_on) THEN
4374       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
4375     END IF;
4376 
4377   EXCEPTION
4378 
4379     WHEN G_EXCEPTION_HALT_VALIDATION then
4380       IF (is_debug_exception_on) THEN
4381         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_HALT_VALIDATION');
4382       END IF;
4383       IF get_tql_csr%ISOPEN THEN
4384         CLOSE get_tql_csr;
4385       END IF;
4386       IF validate_chr_id_csr%ISOPEN THEN
4387         CLOSE validate_chr_id_csr;
4388       END IF;
4389       IF validate_Ib_line_csr%ISOPEN THEN
4390         CLOSE validate_Ib_line_csr;
4391       END IF;
4392       IF validate_qte_id_csr%ISOPEN THEN
4393         CLOSE validate_qte_id_csr;
4394       END IF;
4395       x_return_status := OKL_API.G_RET_STS_ERROR;
4396 
4397     WHEN OTHERS THEN
4398       IF (is_debug_exception_on) THEN
4399         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4400  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
4401       END IF;
4402       IF get_tql_csr%ISOPEN THEN
4403         CLOSE get_tql_csr;
4404       END IF;
4405       IF validate_chr_id_csr%ISOPEN THEN
4406         CLOSE validate_chr_id_csr;
4407       END IF;
4408       IF validate_Ib_line_csr%ISOPEN THEN
4409         CLOSE validate_Ib_line_csr;
4410       END IF;
4411       IF validate_qte_id_csr%ISOPEN THEN
4412         CLOSE validate_qte_id_csr;
4413       END IF;
4414       -- store SQL error message on message stack
4415       OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4416                           p_msg_name     => G_UNEXPECTED_ERROR,
4417                           p_token1       => G_SQLCODE_TOKEN,
4418                           p_token1_value => SQLCODE,
4419                           p_token2       => G_SQLERRM_TOKEN,
4420                           p_token2_value => SQLERRM);
4421       -- notify caller of an error as UNEXPETED error
4422       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4423 
4424   END validate_qte_ln_dtls;
4425 --------------------------------------------------------------------------------------------------------
4426 
4427 -- Start of Commnets
4428 -- Badrinath Kuchibholta
4429 -- Procedure Name       : quote_line_dtls
4430 -- Description          : Used for creation of DML on Quote Line details record
4431 -- Business Rules       : After Validtion of the PL/SQL table of records, If Select YN is select
4432 --                        'Y' and tqd_id is null then we create a record in OKL_TXD_QUOTE_LINE_DTLS
4433 --                       , If Select YN is N and tqd_id is not null then we delete the record in
4434 --                       OKL_TXD_QUOTE_LINE_DTLS
4435 -- Parameters           : PL/SQL table of record of qte_ln_dtl_tbl type
4436 -- Version              : 1.0
4437 -- History              : BAKUCHIB 10-DEC-2002 Bug 2484327 Created
4438 -- End of Commnets
4439 
4440   PROCEDURE quote_line_dtls(p_api_version      IN  NUMBER,
4441                             p_init_msg_list    IN  VARCHAR2,
4442                             x_return_status    OUT NOCOPY VARCHAR2,
4443                             x_msg_count        OUT NOCOPY NUMBER,
4444                             x_msg_data         OUT NOCOPY VARCHAR2,
4445                             p_qld_tbl          IN OUT NOCOPY qte_ln_dtl_tbl) IS
4446 
4447     l_qld_tbl               qte_ln_dtl_tbl :=p_qld_tbl ;
4448     l_api_name              VARCHAR2(200) := 'QUOTE_LINE_DTLS';
4449     i                       NUMBER := 0;
4450     l_tqdv_rec              tqdv_rec_type;
4451     lx_tqdv_rec             tqdv_rec_type;
4452     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'quote_line_dtls';
4453     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4454     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4455     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4456 
4457   BEGIN
4458     IF (is_debug_procedure_on) THEN
4459       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
4460     END IF;
4461 	 IF (is_debug_statement_on) THEN
4462 	   FOR i IN p_qld_tbl.FIRST..p_qld_tbl.LAST LOOP
4463 	     IF (p_qld_tbl.exists(i)) THEN
4464 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').qst_code: ' || p_qld_tbl(i).qst_code);
4465 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').qte_id: ' || p_qld_tbl(i).qte_id);
4466 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').instance_quantity: ' || p_qld_tbl(i).instance_quantity);
4467 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').tql_id: ' || p_qld_tbl(i).tql_id);
4468 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').tqd_id: ' || p_qld_tbl(i).tqd_id);
4469 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').select_yn: ' || p_qld_tbl(i).select_yn);
4470 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').ib_line_id: ' || p_qld_tbl(i).ib_line_id);
4471 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').fin_line_id: ' || p_qld_tbl(i).fin_line_id);
4472 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qld_tbl(' || i || ').dnz_chr_id: ' || p_qld_tbl(i).dnz_chr_id);
4473 	     END IF;
4474 	   END LOOP;
4475 	 END IF;
4476     -- Call start_activity to create savepoint, check compatibility
4477     -- and initialize message list
4478     x_return_status := OKL_API.START_ACTIVITY (
4479                                l_api_name
4480                                ,p_init_msg_list
4481                                ,'_PVT'
4482                                ,x_return_status);
4483     -- Check if activity started successfully
4484     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4485        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4486     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4487        RAISE OKL_API.G_EXCEPTION_ERROR;
4488     END IF;
4489     -- Validate the table of record
4490     validate_qte_ln_dtls(p_qld_tbl       => l_qld_tbl,
4491                          x_return_status => x_return_status);
4492     IF (is_debug_statement_on) THEN
4493       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called validate_qte_ln_dtls , x_return_status : ' || x_return_status);
4494     END IF;
4495     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4496        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4497     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4498        RAISE OKL_API.G_EXCEPTION_ERROR;
4499     END IF;
4500     IF l_qld_tbl.COUNT > 0 THEN
4501       i := l_qld_tbl.FIRST;
4502       -- looping the table of record to decide weather to
4503       -- Create or Delete OKL_TXD_QUOTE_LINE_DTLS record
4504       LOOP
4505         IF l_qld_tbl(i).select_yn = 'Y' AND
4506            (l_qld_tbl(i).tqd_id IS NULL OR
4507            l_qld_tbl(i).tqd_id = OKL_API.G_MISS_NUM) THEN
4508           l_tqdv_rec.number_of_units := l_qld_tbl(i).instance_quantity;
4509           l_tqdv_rec.kle_id          := l_qld_tbl(i).ib_line_id;
4510           l_tqdv_rec.tql_id          := l_qld_tbl(i).tql_id;
4511           IF (is_debug_statement_on) THEN
4512             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TXD_QTE_LN_DTLS_PUB.create_txd_qte_ln_dtls');
4513           END IF;
4514           OKL_TXD_QTE_LN_DTLS_PUB.create_txd_qte_ln_dtls(
4515                                   p_api_version    => p_api_version,
4516                                   p_init_msg_list  => p_init_msg_list,
4517                                   x_return_status  => x_return_status,
4518                                   x_msg_count      => x_msg_count,
4519                                   x_msg_data       => x_msg_data,
4520                                   p_tqdv_rec       => l_tqdv_rec,
4521                                   x_tqdv_rec       => lx_tqdv_rec);
4522           IF (is_debug_statement_on) THEN
4523             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TXD_QTE_LN_DTLS_PUB.create_txd_qte_ln_dtls , return status: ' || x_return_status);
4524           END IF;
4525           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4526             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4527           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4528             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4529           END IF;
4530           l_qld_tbl(i).tqd_id := lx_tqdv_rec.id;
4531         ELSIF l_qld_tbl(i).select_yn = 'N' AND
4532            (l_qld_tbl(i).tqd_id IS NOT NULL OR
4533            l_qld_tbl(i).tqd_id <> OKL_API.G_MISS_NUM) THEN
4534           l_tqdv_rec.id          := l_qld_tbl(i).tqd_id;
4535           IF (is_debug_statement_on) THEN
4536             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TXD_QTE_LN_DTLS_PUB.delete_txd_qte_ln_dtls');
4537           END IF;
4538           OKL_TXD_QTE_LN_DTLS_PUB.delete_txd_qte_ln_dtls(
4539                                   p_api_version    => p_api_version,
4540                                   p_init_msg_list  => p_init_msg_list,
4541                                   x_return_status  => x_return_status,
4542                                   x_msg_count      => x_msg_count,
4543                                   x_msg_data       => x_msg_data,
4544                                   p_tqdv_rec       => l_tqdv_rec);
4545           IF (is_debug_statement_on) THEN
4546             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_TXD_QTE_LN_DTLS_PUB.delete_txd_qte_ln_dtls , return status: ' || x_return_status);
4547           END IF;
4548           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4549             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4550           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4551             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4552           END IF;
4553           l_qld_tbl(i).tqd_id := null;
4554         END IF;
4555         EXIT WHEN (i = l_qld_tbl.LAST);
4556         i := l_qld_tbl.NEXT(i);
4557       END LOOP;
4558       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4559         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4560       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4561         RAISE OKL_API.G_EXCEPTION_ERROR;
4562       END IF;
4563       p_qld_tbl := l_qld_tbl;
4564     END IF;
4565     OKL_API.END_ACTIVITY (x_msg_count,
4566                          x_msg_data );
4567     IF (is_debug_procedure_on) THEN
4568       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
4569     END IF;
4570 
4571   EXCEPTION
4572     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4573       IF (is_debug_exception_on) THEN
4574         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
4575       END IF;
4576       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4577                                  l_api_name,
4578                                  G_PKG_NAME,
4579                                  'OKL_API.G_RET_STS_ERROR',
4580                                  x_msg_count,
4581                                  x_msg_data,
4582                                  '_PVT');
4583     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4584       IF (is_debug_exception_on) THEN
4585         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
4586       END IF;
4587       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4588                                 l_api_name,
4589                                 G_PKG_NAME,
4590                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
4591                                 x_msg_count,
4592                                 x_msg_data,
4593                                 '_PVT');
4594     WHEN OTHERS THEN
4595       IF (is_debug_exception_on) THEN
4596         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4597  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
4598       END IF;
4599       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4600                                 l_api_name,
4601                                 G_PKG_NAME,
4602                                 'OTHERS',
4603                                 x_msg_count,
4604                                 x_msg_data,
4605                                 '_PVT');
4606 
4607   END quote_line_dtls;
4608 --
4609 -- BAKUCHIB Bug 2484327 end
4610 --
4611 
4612 
4613 
4614 
4615 
4616   -- Start of comments
4617   --
4618   -- Function  Name  : validate_quote_line
4619   -- Description     : Validates quote line
4620   -- Business Rules  :
4621   -- Parameters      : Input parameters : p_tqlv_rec
4622   --                   Output Parameters : x_return_status
4623   -- Version         : 1.0
4624   -- History         : 23-DEC-02 RMUNJULU 2726739 Created
4625   --                   30-DEC-02 RMUNJULU 2726739 Changed OKC to OKL for msgs
4626   --                   05-FEB-03 RMUNJULU 2788257 Added code to check if type and amount null
4627   -- End of comments
4628   PROCEDURE validate_quote_line(
4629                p_tqlv_rec       IN tqlv_rec_type,
4630                x_return_status  OUT NOCOPY VARCHAR2) IS
4631 
4632      CURSOR get_qte_lines_csr ( p_qte_id IN NUMBER) IS
4633         SELECT TQL.kle_id kle_id
4634         FROM   OKL_TXL_QUOTE_LINES_V TQL
4635         WHERE  TQL.qte_id = p_qte_id
4636         AND    TQL.qlt_code = 'AMCFIA';
4637 
4638 
4639      l_kle_id_found VARCHAR2(1) := 'N';
4640 
4641      l_module_name VARCHAR2(500) := G_MODULE_NAME || 'validate_quote_line';
4642      is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4643      is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4644      is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4645 
4646 
4647   BEGIN
4648     IF (is_debug_procedure_on) THEN
4649       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
4650     END IF;
4651 	 IF (is_debug_statement_on) THEN
4652 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.id: ' || p_tqlv_rec.id);
4653 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qlt_code: ' || p_tqlv_rec.qlt_code);
4654 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.kle_id: ' || p_tqlv_rec.kle_id);
4655 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.sty_id: ' || p_tqlv_rec.sty_id);
4656 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qte_id: ' || p_tqlv_rec.qte_id);
4657 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.line_number: ' || p_tqlv_rec.line_number);
4658 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.amount: ' || p_tqlv_rec.amount);
4659 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.modified_yn: ' || p_tqlv_rec.modified_yn);
4660 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.taxed_yn: ' || p_tqlv_rec.taxed_yn);
4661 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.defaulted_yn: ' || p_tqlv_rec.defaulted_yn);
4662 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.org_id: ' || p_tqlv_rec.org_id);
4663 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.start_date: ' || p_tqlv_rec.start_date);
4664 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.period: ' || p_tqlv_rec.period);
4665 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.number_of_periods: ' || p_tqlv_rec.number_of_periods);
4666 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.lock_level_step: ' || p_tqlv_rec.lock_level_step);
4667 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.advance_or_arrears: ' || p_tqlv_rec.advance_or_arrears);
4668 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_name: ' || p_tqlv_rec.yield_name);
4669 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_value: ' || p_tqlv_rec.yield_value);
4670 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.implicit_interest_rate: ' || p_tqlv_rec.implicit_interest_rate);
4671 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_value: ' || p_tqlv_rec.asset_value);
4672 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.residual_value: ' || p_tqlv_rec.residual_value);
4673 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.unbilled_receivables: ' || p_tqlv_rec.unbilled_receivables);
4674 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_quantity: ' || p_tqlv_rec.asset_quantity);
4675 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.quote_quantity: ' || p_tqlv_rec.quote_quantity);
4676 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_id: ' || p_tqlv_rec.split_kle_id);
4677 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_name: ' || p_tqlv_rec.split_kle_name);
4678 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_code: ' || p_tqlv_rec.currency_code);
4679 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_code: ' || p_tqlv_rec.currency_conversion_code);
4680 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_type: ' || p_tqlv_rec.currency_conversion_type);
4681 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_rate: ' || p_tqlv_rec.currency_conversion_rate);
4682 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_date: ' || p_tqlv_rec.currency_conversion_date);
4683 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.due_date: ' || p_tqlv_rec.due_date);
4684 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.try_id: ' || p_tqlv_rec.try_id);
4685 	 END IF;
4686 
4687 
4688     -- If no qte_id then error
4689     IF p_tqlv_rec.qte_id IS NULL
4690     OR p_tqlv_rec.qte_id = OKL_API.G_MISS_NUM THEN
4691 
4692       -- Required value for kle_id
4693       OKL_API.set_message(
4694                     p_app_name     => 'OKL', -- RMUNJULU 30-DEC-02 2726739
4695                     p_msg_name     => G_REQUIRED_VALUE,
4696                     p_token1       => G_COL_NAME_TOKEN,
4697                     p_token1_value => 'qte_id');
4698 
4699       RAISE OKL_API.G_EXCEPTION_ERROR;
4700 
4701     END IF;
4702 
4703 
4704     -- If kle_id is passed
4705     IF  p_tqlv_rec.kle_id IS NOT NULL
4706     AND p_tqlv_rec.kle_id <> OKL_API.G_MISS_NUM THEN
4707 
4708        -- Check that kle_id passed is one of the assets quoted
4709        FOR get_qte_lines_rec IN get_qte_lines_csr(p_tqlv_rec.qte_id) LOOP
4710 
4711          IF get_qte_lines_rec.kle_id = p_tqlv_rec.kle_id THEN
4712             l_kle_id_found := 'Y';
4713          END IF;
4714 
4715        END LOOP;
4716 
4717 
4718        -- If the asset is not a quoted asset then error
4719        IF l_kle_id_found <> 'Y' THEN
4720 
4721          -- Invalid value for kle_id
4722          OKL_API.set_message(
4723                     p_app_name     => 'OKL', -- RMUNJULU 30-DEC-02 2726739
4724                     p_msg_name     => G_INVALID_VALUE,
4725                     p_token1       => G_COL_NAME_TOKEN,
4726                     p_token1_value => 'kle_id');
4727 
4728          RAISE OKL_API.G_EXCEPTION_ERROR;
4729 
4730        END IF;
4731     END IF;
4732 
4733 
4734     -- RMUNJULU 05-FEB-03 2788257 Added code to check if type and amount are null
4735     -- Check if qlt_code is NULL
4736     IF p_tqlv_rec.qlt_code IS NULL
4737     OR p_tqlv_rec.qlt_code = OKL_API.G_MISS_CHAR THEN
4738 
4739       -- You must enter a value for PROMPT
4740       OKL_API.set_message(
4741                  p_app_name     => OKL_API.G_APP_NAME,
4742                  p_msg_name     => 'OKL_AM_REQ_FIELD_ERR',
4743                  p_token1       => 'PROMPT',
4744                  p_token1_value => OKL_AM_UTIL_PVT.get_ak_attribute('OKL_TYPE'));
4745 
4746        RAISE OKL_API.G_EXCEPTION_ERROR;
4747 
4748     END IF;
4749 
4750     -- Check if amount is NULL
4751     IF p_tqlv_rec.amount IS NULL
4752     OR p_tqlv_rec.amount = OKL_API.G_MISS_NUM THEN
4753 
4754       -- You must enter a value for PROMPT
4755       OKL_API.set_message(
4756                  p_app_name     => OKL_API.G_APP_NAME,
4757                  p_msg_name     => 'OKL_AM_REQ_FIELD_ERR',
4758                  p_token1       => 'PROMPT',
4759                  p_token1_value => OKL_AM_UTIL_PVT.get_ak_attribute('OKL_AMOUNT'));
4760 
4761        RAISE OKL_API.G_EXCEPTION_ERROR;
4762 
4763     END IF;
4764     IF (is_debug_procedure_on) THEN
4765       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
4766     END IF;
4767 
4768   EXCEPTION
4769 
4770      WHEN OKL_API.G_EXCEPTION_ERROR THEN
4771          IF (is_debug_exception_on) THEN
4772            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
4773          END IF;
4774 
4775          IF get_qte_lines_csr%ISOPEN THEN
4776             CLOSE get_qte_lines_csr;
4777          END IF;
4778 
4779          x_return_status := OKL_API.G_RET_STS_ERROR;
4780 
4781      WHEN OTHERS THEN
4782         IF (is_debug_exception_on) THEN
4783           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4784  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
4785         END IF;
4786 
4787          IF get_qte_lines_csr%ISOPEN THEN
4788             CLOSE get_qte_lines_csr;
4789          END IF;
4790 
4791          -- unexpected error
4792          OKL_API.set_message(
4793                          p_app_name      => 'OKC',
4794                          p_msg_name      => g_unexpected_error,
4795                          p_token1        => g_sqlcode_token,
4796                          p_token1_value  => sqlcode,
4797                          p_token2        => g_sqlerrm_token,
4798                          p_token2_value  => sqlerrm);
4799 
4800           x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4801 
4802   END validate_quote_line;
4803 
4804 
4805 
4806   -- Start of comments
4807   --
4808   -- Function  Name  : set_line_currency_defaults
4809   -- Description     : Sets the currency cols for quote line
4810   -- Business Rules  :
4811   -- Parameters      : Input parameters : px_tqlv_rec, p_sys_date
4812   --                   Output Parameters : x_return_status
4813   -- Version         : 1.0
4814   -- History         : 23-DEC-02 RMUNJULU 2726739 Created
4815   --                   30-DEC-02 RMUNJULU 2699412 Added msg
4816   --                   31-JAN-03 RMUNJULU 2780539 changed cursor
4817   -- End of comments
4818   PROCEDURE set_line_currency_defaults(
4819                p_sys_date       IN DATE,
4820                px_tqlv_rec      IN OUT NOCOPY tqlv_rec_type,
4821                x_return_status  OUT NOCOPY VARCHAR2) IS
4822 
4823 
4824        -- get the contract id for the quote line
4825        -- RMUNJULU 31-JAN-03 2780539 changed cursor
4826        -- get the contract id for the quote, since the quote line id does not
4827        -- exist during create
4828        CURSOR get_khr_id_csr (p_qte_id IN NUMBER) IS
4829           SELECT QTE.khr_id khr_id
4830           FROM   OKL_TRX_QUOTES_V QTE
4831           WHERE  QTE.id = p_qte_id;
4832 
4833        l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4834        l_functional_currency_code VARCHAR2(15);
4835        l_contract_currency_code VARCHAR2(15);
4836        l_currency_conversion_type VARCHAR2(30);
4837        l_currency_conversion_rate NUMBER;
4838        l_currency_conversion_date DATE;
4839 
4840        l_converted_amount NUMBER;
4841        l_khr_id NUMBER;
4842 
4843        -- Since we do not use the amount or converted amount in TRX_Quotes table
4844        -- set a hardcoded value for the amount (and pass to to
4845        -- OKL_ACCOUNTING_UTIL.convert_to_functional_currency and get back
4846        -- conversion values )
4847        l_hard_coded_amount NUMBER := 100;
4848        l_module_name VARCHAR2(500) := G_MODULE_NAME || 'set_line_currency_defaults';
4849        is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4850        is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4851        is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4852 
4853 
4854 
4855   BEGIN
4856     IF (is_debug_procedure_on) THEN
4857       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
4858     END IF;
4859 	 IF (is_debug_statement_on) THEN
4860 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_sys_date: ' || p_sys_date);
4861 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.id: ' || px_tqlv_rec.id);
4862 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.qlt_code: ' || px_tqlv_rec.qlt_code);
4863 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.kle_id: ' || px_tqlv_rec.kle_id);
4864 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.sty_id: ' || px_tqlv_rec.sty_id);
4865 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.qte_id: ' || px_tqlv_rec.qte_id);
4866 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.line_number: ' || px_tqlv_rec.line_number);
4867 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.amount: ' || px_tqlv_rec.amount);
4868 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.modified_yn: ' || px_tqlv_rec.modified_yn);
4869 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.taxed_yn: ' || px_tqlv_rec.taxed_yn);
4870 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.defaulted_yn: ' || px_tqlv_rec.defaulted_yn);
4871 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.org_id: ' || px_tqlv_rec.org_id);
4872 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.start_date: ' || px_tqlv_rec.start_date);
4873 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.period: ' || px_tqlv_rec.period);
4874 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.number_of_periods: ' || px_tqlv_rec.number_of_periods);
4875 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.lock_level_step: ' || px_tqlv_rec.lock_level_step);
4876 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.advance_or_arrears: ' || px_tqlv_rec.advance_or_arrears);
4877 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.yield_name: ' || px_tqlv_rec.yield_name);
4878 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.yield_value: ' || px_tqlv_rec.yield_value);
4879 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.implicit_interest_rate: ' || px_tqlv_rec.implicit_interest_rate);
4880 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.asset_value: ' || px_tqlv_rec.asset_value);
4881 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.residual_value: ' || px_tqlv_rec.residual_value);
4882 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.unbilled_receivables: ' || px_tqlv_rec.unbilled_receivables);
4883 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.asset_quantity: ' || px_tqlv_rec.asset_quantity);
4884 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.quote_quantity: ' || px_tqlv_rec.quote_quantity);
4885 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.split_kle_id: ' || px_tqlv_rec.split_kle_id);
4886 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.split_kle_name: ' || px_tqlv_rec.split_kle_name);
4887 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.currency_code: ' || px_tqlv_rec.currency_code);
4888 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.currency_conversion_code: ' || px_tqlv_rec.currency_conversion_code);
4889 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.currency_conversion_type: ' || px_tqlv_rec.currency_conversion_type);
4890 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.currency_conversion_rate: ' || px_tqlv_rec.currency_conversion_rate);
4891 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.currency_conversion_date: ' || px_tqlv_rec.currency_conversion_date);
4892 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.due_date: ' || px_tqlv_rec.due_date);
4893 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, px_tqlv_rec.try_id: ' || px_tqlv_rec.try_id);
4894 	 END IF;
4895 
4896      -- Get the functional currency from AM_Util
4897      -- RMUNJULU 30-DEC-02 2699412 changed to call right function
4898      l_functional_currency_code := OKL_AM_UTIL_PVT.get_functional_currency;
4899 
4900 
4901      -- Get the contract id for the quote line
4902      -- RMUNJULU 31-JAN-03 2780539 Changed to send the qte_id to cursor
4903      OPEN get_khr_id_csr(px_tqlv_rec.qte_id);
4904      FETCH get_khr_id_csr INTO l_khr_id;
4905      CLOSE get_khr_id_csr;
4906 
4907 
4908      IF (is_debug_statement_on) THEN
4909        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_ACCOUNTING_UTIL.convert_to_functional_currency');
4910      END IF;
4911      -- Get the contract currency details from ACCOUNTING_Util
4912      OKL_ACCOUNTING_UTIL.convert_to_functional_currency(
4913                      p_khr_id  		  	          => l_khr_id,
4914                      p_to_currency   		        => l_functional_currency_code,
4915                      p_transaction_date 		    => p_sys_date,
4916                      p_amount 			            => l_hard_coded_amount,
4917                      x_return_status            => l_return_status,
4918                      x_contract_currency		    => l_contract_currency_code,
4919                      x_currency_conversion_type	=> l_currency_conversion_type,
4920                      x_currency_conversion_rate	=> l_currency_conversion_rate,
4921                      x_currency_conversion_date	=> l_currency_conversion_date,
4922                      x_converted_amount 		    => l_converted_amount);
4923      IF (is_debug_statement_on) THEN
4924        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_ACCOUNTING_UTIL.convert_to_functional_currency , return status: ' || l_return_status);
4925        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_contract_currency_code: ' || l_contract_currency_code);
4926        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_type: ' || l_currency_conversion_type);
4927        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_rate: ' || l_currency_conversion_rate);
4928        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_date: ' || l_currency_conversion_date);
4929        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_converted_amount: ' || l_converted_amount);
4930      END IF;
4931 
4932 
4933     -- RMUNJULU 30-DEC-02 2699412 Added msg
4934     IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4935 
4936        -- The currency conversion rate could not be identified for specified currency.
4937        OKL_API.set_message(
4938                   p_app_name     => 'OKL',
4939                   p_msg_name     => 'OKL_CONV_RATE_NOT_FOUND');
4940 
4941      END IF;
4942 
4943      -- raise exception if error
4944      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4945        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4946      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4947        RAISE OKL_API.G_EXCEPTION_ERROR;
4948      END IF;
4949 
4950      px_tqlv_rec.currency_code := l_contract_currency_code;
4951      px_tqlv_rec.currency_conversion_code := l_functional_currency_code;
4952 
4953      -- If the functional currency is different from contract currency then set
4954      -- currency conversion columns
4955      IF l_functional_currency_code <> l_contract_currency_code THEN
4956 
4957         -- Set the currency conversion columns
4958         px_tqlv_rec.currency_conversion_type := l_currency_conversion_type;
4959         px_tqlv_rec.currency_conversion_rate := l_currency_conversion_rate;
4960         px_tqlv_rec.currency_conversion_date := l_currency_conversion_date;
4961 
4962      END IF;
4963 
4964      -- Set the return status
4965      x_return_status := l_return_status;
4966      IF (is_debug_procedure_on) THEN
4967        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
4968      END IF;
4969 
4970   EXCEPTION
4971 
4972      WHEN OKL_API.G_EXCEPTION_ERROR THEN
4973          IF (is_debug_exception_on) THEN
4974            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
4975          END IF;
4976 
4977          IF get_khr_id_csr%ISOPEN THEN
4978             CLOSE get_khr_id_csr;
4979          END IF;
4980 
4981          x_return_status := OKL_API.G_RET_STS_ERROR;
4982 
4983      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4984          IF (is_debug_exception_on) THEN
4985            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
4986          END IF;
4987 
4988          IF get_khr_id_csr%ISOPEN THEN
4989             CLOSE get_khr_id_csr;
4990          END IF;
4991 
4992          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4993 
4994      WHEN OTHERS THEN
4995         IF (is_debug_exception_on) THEN
4996           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4997  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
4998         END IF;
4999 
5000          IF get_khr_id_csr%ISOPEN THEN
5001             CLOSE get_khr_id_csr;
5002          END IF;
5003 
5004          -- unexpected error
5005          OKL_API.set_message(
5006                          p_app_name      => 'OKC',
5007                          p_msg_name      => g_unexpected_error,
5008                          p_token1        => g_sqlcode_token,
5009                          p_token1_value  => sqlcode,
5010                          p_token2        => g_sqlerrm_token,
5011                          p_token2_value  => sqlerrm);
5012 
5013           x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5014 
5015   END set_line_currency_defaults;
5016 
5017 
5018   -- Start of comments
5019   --
5020   -- Function  Name  : create_quote_line
5021   -- Description     : Creates quote line
5022   -- Business Rules  :
5023   -- Parameters      : Input parameters : p_tqlv_rec
5024   --                   Output Parameters : X_tqlv_rec
5025   -- Version         : 1.0
5026   -- History         : 23-DEC-02 RMUNJULU 2726739 Created
5027   --                 : 11-Jan-05 PAGARG Bug 4104815 Added call to recalculate_quote
5028   --                 : rmunjulu Sales_Tax_Enhancement
5029   -- End of comments
5030   PROCEDURE create_quote_line(
5031                p_api_version    IN NUMBER,
5032                p_init_msg_list  IN VARCHAR2 DEFAULT G_FALSE,
5033                x_return_status  OUT NOCOPY VARCHAR2,
5034                x_msg_count      OUT NOCOPY NUMBER,
5035                x_msg_data       OUT NOCOPY VARCHAR2,
5036                p_tqlv_rec       IN tqlv_rec_type,
5037                x_tqlv_rec       OUT NOCOPY tqlv_rec_type) IS
5038 
5039 
5040     l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5041     lp_tqlv_rec tqlv_rec_type := p_tqlv_rec;
5042     lx_tqlv_rec tqlv_rec_type := p_tqlv_rec;
5043     l_api_name VARCHAR2(30) := 'create_quote_line';
5044     l_api_version CONSTANT NUMBER := 1;
5045     l_sys_date DATE;
5046 
5047     -- Added by rravikir (eBTax enhancement) Bug 5866207
5048     CURSOR get_try_id_csr (p_trx_name IN VARCHAR2) IS
5049     SELECT try.id
5050     FROM   okl_trx_types_v try
5051     WHERE  try.name = p_trx_name;
5052 
5053     l_try_id NUMBER;
5054     -- End (eBTax enhancement) Bug 5866207
5055      --akrangan Bug# 5485331:Start
5056       -- get the max line_number within a quote
5057      CURSOR get_max_tql_line_num_csr(p_qte_id IN NUMBER) IS
5058 	 select max(line_number) from OKL_TXL_QUOTE_LINES_B
5059 	 where qte_id = p_qte_id;
5060      l_new_line_number NUMBER;
5061      --akrangan Bug# 5485331:End
5062      l_module_name VARCHAR2(500) := G_MODULE_NAME || 'create_quote_line';
5063      is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5064      is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5065      is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5066   BEGIN
5067      IF (is_debug_procedure_on) THEN
5068        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
5069      END IF;
5070 	 IF (is_debug_statement_on) THEN
5071 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.id: ' || p_tqlv_rec.id);
5072 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qlt_code: ' || p_tqlv_rec.qlt_code);
5073 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.kle_id: ' || p_tqlv_rec.kle_id);
5074 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.sty_id: ' || p_tqlv_rec.sty_id);
5075 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qte_id: ' || p_tqlv_rec.qte_id);
5076 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.line_number: ' || p_tqlv_rec.line_number);
5077 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.amount: ' || p_tqlv_rec.amount);
5078 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.modified_yn: ' || p_tqlv_rec.modified_yn);
5079 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.taxed_yn: ' || p_tqlv_rec.taxed_yn);
5080 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.defaulted_yn: ' || p_tqlv_rec.defaulted_yn);
5081 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.org_id: ' || p_tqlv_rec.org_id);
5082 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.start_date: ' || p_tqlv_rec.start_date);
5083 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.period: ' || p_tqlv_rec.period);
5084 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.number_of_periods: ' || p_tqlv_rec.number_of_periods);
5085 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.lock_level_step: ' || p_tqlv_rec.lock_level_step);
5086 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.advance_or_arrears: ' || p_tqlv_rec.advance_or_arrears);
5087 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_name: ' || p_tqlv_rec.yield_name);
5088 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_value: ' || p_tqlv_rec.yield_value);
5089 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.implicit_interest_rate: ' || p_tqlv_rec.implicit_interest_rate);
5090 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_value: ' || p_tqlv_rec.asset_value);
5091 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.residual_value: ' || p_tqlv_rec.residual_value);
5092 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.unbilled_receivables: ' || p_tqlv_rec.unbilled_receivables);
5093 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_quantity: ' || p_tqlv_rec.asset_quantity);
5094 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.quote_quantity: ' || p_tqlv_rec.quote_quantity);
5095 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_id: ' || p_tqlv_rec.split_kle_id);
5096 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_name: ' || p_tqlv_rec.split_kle_name);
5097 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_code: ' || p_tqlv_rec.currency_code);
5098 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_code: ' || p_tqlv_rec.currency_conversion_code);
5099 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_type: ' || p_tqlv_rec.currency_conversion_type);
5100 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_rate: ' || p_tqlv_rec.currency_conversion_rate);
5101 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_date: ' || p_tqlv_rec.currency_conversion_date);
5102 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.due_date: ' || p_tqlv_rec.due_date);
5103 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.try_id: ' || p_tqlv_rec.try_id);
5104 	 END IF;
5105      --Check API version, initialize message list and create savepoint.
5106      l_return_status := OKL_API.START_ACTIVITY(l_api_name,
5107                                                G_PKG_NAME,
5108                                                p_init_msg_list,
5109                                                l_api_version,
5110                                                p_api_version,
5111                                                '_PVT',
5112                                                x_return_status);
5113 
5114      -- raise exception if error
5115      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5116        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5117      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5118        RAISE OKL_API.G_EXCEPTION_ERROR;
5119      END IF;
5120 
5121     SELECT SYSDATE INTO l_sys_date FROM DUAL;
5122 
5123      -- Validate the quote line
5124      validate_quote_line(
5125                   p_tqlv_rec      => lp_tqlv_rec,
5126                   x_return_status => l_return_status);
5127 
5128      -- raise exception if error
5129      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5130        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5131      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5132        RAISE OKL_API.G_EXCEPTION_ERROR;
5133      END IF;
5134 
5135      -- Set the quote line currency columns
5136      set_line_currency_defaults(
5137                   p_sys_date      => l_sys_date,
5138                   px_tqlv_rec     => lp_tqlv_rec,
5139                   x_return_status => l_return_status);
5140      IF (is_debug_statement_on) THEN
5141        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called  set_line_currency_defaults , return status: ' || l_return_status);
5142      END IF;
5143 
5144      -- raise exception if error
5145      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5146        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5147      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5148        RAISE OKL_API.G_EXCEPTION_ERROR;
5149      END IF;
5150 
5151      -- Added by rravikir (eBTax enhancement) Bug 5866207
5152      OPEN  get_try_id_csr ('Estimated Billing');
5153      FETCH get_try_id_csr INTO l_try_id;
5154 	 CLOSE get_try_id_csr;
5155 
5156      lp_tqlv_rec.try_id := l_try_id;
5157      -- End (eBTax enhancement) Bug 5866207
5158     -- akrangan Bug# 5468781:Start
5159      IF lp_tqlv_rec.LINE_NUMBER IS NULL OR lp_tqlv_rec.LINE_NUMBER = OKL_API.G_MISS_NUM THEN
5160      -- get current max line number and increment it by one as the new line#
5161 	 OPEN get_max_tql_line_num_csr (lp_tqlv_rec.QTE_ID);
5162 	 FETCH get_max_tql_line_num_csr INTO l_new_line_number;
5163 
5164 	 IF get_max_tql_line_num_csr%NOTFOUND THEN
5165 	   l_new_line_number := 1;
5166 	 ELSE
5167 	   l_new_line_number := l_new_line_number + 1;
5168 	 END IF;
5169 
5170 	 CLOSE get_max_tql_line_num_csr;
5171 
5172 	 lp_tqlv_rec.line_number := l_new_line_number;
5173      END IF;
5174    --akrangan Bug# 5468781:End
5175      IF (is_debug_statement_on) THEN
5176        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TXL_QUOTE_LINES_PUB.insert_txl_quote_lines');
5177      END IF;
5178      -- Insert line into table using TAPI
5179      OKL_TXL_QUOTE_LINES_PUB.insert_txl_quote_lines(
5180                                p_api_version   => p_api_version,
5181                                p_init_msg_list => G_FALSE,
5182                                x_return_status => l_return_status,
5183                                x_msg_count     => x_msg_count,
5184                                x_msg_data      => x_msg_data,
5185                                p_tqlv_rec      => lp_tqlv_rec,
5186                                x_tqlv_rec      => lx_tqlv_rec);
5187      IF (is_debug_statement_on) THEN
5188        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called  OKL_TXL_QUOTE_LINES_PUB.insert_txl_quote_lines , return status: ' || l_return_status);
5189      END IF;
5190 
5191      -- raise exception if error
5192      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5193        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5194      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5195        RAISE OKL_API.G_EXCEPTION_ERROR;
5196      END IF;
5197 
5198      IF (is_debug_statement_on) THEN
5199        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax');
5200      END IF;
5201     -- rmunjulu Sales_Tax_Enhancement
5202     -- Call the new OKL Tax engine to RECALCULATE tax for all quote lines
5203 	OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax(
5204     	p_api_version          => l_api_version,
5205     	p_init_msg_list        => OKL_API.G_FALSE,
5206     	x_return_status        => l_return_status,
5207     	x_msg_count            => x_msg_count,
5208     	x_msg_data             => x_msg_data,
5209     	p_source_trx_id		   => lx_tqlv_rec.qte_id, -- TRX_ID is QUOTE_ID
5210     	p_source_trx_name      => 'Estimated Billing',	-- TRX_NAME IS NULL
5211     	p_source_table         => 'OKL_TRX_QUOTES_B');  -- SOURCE_TABLE IS OKL_TRX_QUOTES_B
5212      IF (is_debug_statement_on) THEN
5213        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax , return status: ' || l_return_status);
5214      END IF;
5215 
5216       IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
5217         -- Tax Processing failed.
5218         OKL_API.set_message( p_app_name      => 'OKL',
5219                              p_msg_name      =>'OKL_AM_PROCESS_TAX_ERR');
5220       END IF;
5221 
5222      -- raise exception if error
5223      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5224        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5225      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5226        RAISE OKL_API.G_EXCEPTION_ERROR;
5227      END IF;
5228 
5229      -- PAGARG 4102565 Recalculate quote header elements and update quote header
5230      recalculate_quote(
5231                x_return_status  => l_return_status,
5232                p_tqlv_rec       => lx_tqlv_rec);
5233      IF (is_debug_statement_on) THEN
5234        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called recalculate_quote , return status: ' || l_return_status);
5235      END IF;
5236 
5237      -- PAGARG 4102565 raise exception if error
5238      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
5239      THEN
5240        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5241      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
5242      THEN
5243        RAISE OKL_API.G_EXCEPTION_ERROR;
5244      END IF;
5245 
5246      -- set the return status and out variables
5247      x_return_status := l_return_status;
5248      x_tqlv_rec      := lx_tqlv_rec;
5249 
5250      -- end the transaction
5251      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5252      IF (is_debug_procedure_on) THEN
5253        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
5254      END IF;
5255 
5256   EXCEPTION
5257     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5258       IF (is_debug_exception_on) THEN
5259         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
5260       END IF;
5261 
5262       IF (get_try_id_csr%isopen) THEN
5263         CLOSE get_try_id_csr;
5264       END IF;
5265 
5266       x_return_status := OKL_API.HANDLE_EXCEPTIONS
5267       (
5268         l_api_name,
5269         G_PKG_NAME,
5270         'OKL_API.G_RET_STS_ERROR',
5271         x_msg_count,
5272         x_msg_data,
5273         '_PVT'
5274       );
5275 
5276     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5277       IF (is_debug_exception_on) THEN
5278         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
5279       END IF;
5280 
5281       IF (get_try_id_csr%isopen) THEN
5282         CLOSE get_try_id_csr;
5283       END IF;
5284 
5285       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5286       (
5287         l_api_name,
5288         G_PKG_NAME,
5289         'OKL_API.G_RET_STS_UNEXP_ERROR',
5290         x_msg_count,
5291         x_msg_data,
5292         '_PVT'
5293       );
5294 
5295 
5296     WHEN OTHERS THEN
5297       IF (is_debug_exception_on) THEN
5298         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5299  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
5300       END IF;
5301 
5302       IF (get_try_id_csr%isopen) THEN
5303         CLOSE get_try_id_csr;
5304       END IF;
5305 
5306       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5307       (
5308         l_api_name,
5309         G_PKG_NAME,
5310         'OTHERS',
5311         x_msg_count,
5312         x_msg_data,
5313         '_PVT'
5314       );
5315 
5316   END create_quote_line ;
5317 
5318 
5319   -- Start of comments
5320   --
5321   -- Function  Name  : create_quote_line
5322   -- Description     : Creates multiple quote lines
5323   -- Business Rules  :
5324   -- Parameters      : Input parameters : p_tqlv_tbl
5325   --                   Output Parameters : x_tqlv_tbl
5326   -- Version         : 1.0
5327   -- History         : 23-DEC-02 RMUNJULU 2726739 Created
5328   -- End of comments
5329   PROCEDURE create_quote_line(
5330                p_api_version    IN NUMBER,
5331                p_init_msg_list  IN VARCHAR2 DEFAULT G_FALSE,
5332                x_return_status  OUT NOCOPY VARCHAR2,
5333                x_msg_count      OUT NOCOPY NUMBER,
5334                x_msg_data       OUT NOCOPY VARCHAR2,
5335                p_tqlv_tbl       IN tqlv_tbl_type,
5336                x_tqlv_tbl       OUT NOCOPY tqlv_tbl_type) IS
5337 
5338 
5339 
5340     l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5341     lp_tqlv_tbl tqlv_tbl_type := p_tqlv_tbl;
5342     lx_tqlv_tbl tqlv_tbl_type := p_tqlv_tbl;
5343     l_api_name VARCHAR2(30) := 'create_quote_line';
5344     l_api_version CONSTANT NUMBER := 1;
5345     i NUMBER;
5346 
5347     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'create_quote_line';
5348     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5349     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5350     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5351 
5352   BEGIN
5353      IF (is_debug_procedure_on) THEN
5354        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
5355      END IF;
5356 	 IF (is_debug_statement_on) THEN
5357 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_tbl.COUNT: ' || p_tqlv_tbl.COUNT);
5358 	 END IF;
5359 
5360      --Check API version, initialize message list and create savepoint.
5361      l_return_status := OKL_API.START_ACTIVITY(l_api_name,
5362                                                G_PKG_NAME,
5363                                                p_init_msg_list,
5364                                                l_api_version,
5365                                                p_api_version,
5366                                                '_PVT',
5367                                                x_return_status);
5368 
5369 
5370      -- raise exception if error
5371      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5372        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5373      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5374        RAISE OKL_API.G_EXCEPTION_ERROR;
5375      END IF;
5376 
5377 
5378      -- Loop thru the input tbl and call the rec type API
5379      IF (lp_tqlv_tbl.COUNT > 0) THEN
5380 
5381        i := lp_tqlv_tbl.FIRST;
5382 
5383        LOOP
5384 
5385          -- Insert line into table using rec type API
5386          create_quote_line(
5387                p_api_version   => p_api_version,
5388                p_init_msg_list => G_FALSE,
5389                x_return_status => l_return_status,
5390                x_msg_count     => x_msg_count,
5391                x_msg_data      => x_msg_data,
5392                p_tqlv_rec      => lp_tqlv_tbl(i),
5393                x_tqlv_rec      => lx_tqlv_tbl(i));
5394          IF (is_debug_statement_on) THEN
5395            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called create_quote_line , return status: ' || l_return_status);
5396          END IF;
5397 
5398          -- raise exception if error
5399          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5400            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5401          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5402            RAISE OKL_API.G_EXCEPTION_ERROR;
5403          END IF;
5404 
5405          EXIT WHEN (i = lp_tqlv_tbl.LAST);
5406          i := lp_tqlv_tbl.NEXT(i);
5407        END LOOP;
5408 
5409      END IF;
5410 
5411 
5412      -- set the return status and out variables
5413      x_return_status := l_return_status;
5414      x_tqlv_tbl      := lx_tqlv_tbl;
5415 
5416 
5417      -- end the transaction
5418      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5419      IF (is_debug_procedure_on) THEN
5420        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
5421      END IF;
5422 
5423   EXCEPTION
5424 
5425 
5426     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5427       IF (is_debug_exception_on) THEN
5428         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
5429       END IF;
5430 
5431       x_return_status := OKL_API.HANDLE_EXCEPTIONS
5432       (
5433         l_api_name,
5434         G_PKG_NAME,
5435         'OKL_API.G_RET_STS_ERROR',
5436         x_msg_count,
5437         x_msg_data,
5438         '_PVT'
5439       );
5440 
5441 
5442     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5443       IF (is_debug_exception_on) THEN
5444         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
5445       END IF;
5446 
5447       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5448       (
5449         l_api_name,
5450         G_PKG_NAME,
5451         'OKL_API.G_RET_STS_UNEXP_ERROR',
5452         x_msg_count,
5453         x_msg_data,
5454         '_PVT'
5455       );
5456 
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 
5464       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5465       (
5466         l_api_name,
5467         G_PKG_NAME,
5468         'OTHERS',
5469         x_msg_count,
5470         x_msg_data,
5471         '_PVT'
5472       );
5473 
5474   END create_quote_line ;
5475 
5476 
5477   -- Start of comments
5478   --
5479   -- Function  Name  : update_quote_line
5480   -- Description     : Updates quote line
5481   -- Business Rules  :
5482   -- Parameters      : Input parameters : p_tqlv_rec
5483   --                   Output Parameters : X_tqlv_rec
5484   -- Version         : 1.0
5485   -- History         : 23-DEC-02 RMUNJULU 2726739 Created
5486   --                   16-JAN-03 RMUNJULU 2754574 Added quote status condition
5487   -- GKADARKA bug 3825037, default currency_conversion_date, start_date, creation_date and
5488   -- program_update_date to NULL/G_MISS_DATE so that correct date is stamped.
5489   -- issue occurs when g_miss_date passed from rossetta layer does not match okl_api.g_miss_date
5490   --                 : PAGARG 4102565 Added call to validate_upd_quote_line to validate the amounts
5491   --                 : PAGARG 4102565 Added call to recalculate_quote
5492   --                 : rmunjulu Sales_Tax_Enhancement
5493   -- End of comments
5494   PROCEDURE update_quote_line(
5495                p_api_version    IN NUMBER,
5496                p_init_msg_list  IN VARCHAR2 DEFAULT G_FALSE,
5497                x_return_status  OUT NOCOPY VARCHAR2,
5498                x_msg_count      OUT NOCOPY NUMBER,
5499                x_msg_data       OUT NOCOPY VARCHAR2,
5500                p_tqlv_rec       IN tqlv_rec_type,
5501                x_tqlv_rec       OUT NOCOPY tqlv_rec_type) IS
5502 
5503 
5504     -- RMUNJULU 16-JAN-03 2754574   Added cursor to get quote status
5505     -- Get the quote details
5506     CURSOR get_quote_dtls_csr ( p_tql_id IN NUMBER) IS
5507         SELECT QTE.qst_code,
5508         	   QTE.id qte_id, -- rmunjulu Sales_Tax_Enhancement
5509                TQL.amount -- rmunjulu Sales_Tax_Enhancement
5510         FROM   OKL_TRX_QUOTES_V QTE,
5511                OKL_TXL_QUOTE_LINES_V TQL
5512         WHERE  TQL.id = p_tql_id
5513         AND    TQL.qte_id = QTE.id;
5514 
5515     l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5516     lp_tqlv_rec tqlv_rec_type := p_tqlv_rec;
5517     lx_tqlv_rec tqlv_rec_type := p_tqlv_rec;
5518     l_api_name VARCHAR2(30) := 'update_quote_line';
5519     l_api_version CONSTANT NUMBER := 1;
5520 
5521     -- RMUNJULU 16-JAN-03 2754574 Added variable
5522     l_qst_code VARCHAR2(30);
5523 
5524     -- rmunjulu Sales_Tax_Enhancement
5525     CURSOR get_try_id_csr (p_trx_name IN VARCHAR2) IS
5526     SELECT try.id
5527     FROM   okl_trx_types_v try
5528     WHERE  try.name = p_trx_name;
5529 
5530     -- rmunjulu Sales_Tax_Enhancement
5531     l_qte_id NUMBER;
5532     l_amount NUMBER;
5533     l_try_id NUMBER;
5534     l_trx_name okl_trx_types_v.name%TYPE;
5535     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'update_quote_line';
5536     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5537     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5538     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5539 
5540   BEGIN
5541      IF (is_debug_procedure_on) THEN
5542        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
5543      END IF;
5544 	 IF (is_debug_statement_on) THEN
5545 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.id: ' || p_tqlv_rec.id);
5546 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qlt_code: ' || p_tqlv_rec.qlt_code);
5547 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.kle_id: ' || p_tqlv_rec.kle_id);
5548 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.sty_id: ' || p_tqlv_rec.sty_id);
5549 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qte_id: ' || p_tqlv_rec.qte_id);
5550 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.line_number: ' || p_tqlv_rec.line_number);
5551 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.amount: ' || p_tqlv_rec.amount);
5552 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.modified_yn: ' || p_tqlv_rec.modified_yn);
5553 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.taxed_yn: ' || p_tqlv_rec.taxed_yn);
5554 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.defaulted_yn: ' || p_tqlv_rec.defaulted_yn);
5555 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.org_id: ' || p_tqlv_rec.org_id);
5556 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.start_date: ' || p_tqlv_rec.start_date);
5557 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.period: ' || p_tqlv_rec.period);
5558 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.number_of_periods: ' || p_tqlv_rec.number_of_periods);
5559 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.lock_level_step: ' || p_tqlv_rec.lock_level_step);
5560 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.advance_or_arrears: ' || p_tqlv_rec.advance_or_arrears);
5561 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_name: ' || p_tqlv_rec.yield_name);
5562 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_value: ' || p_tqlv_rec.yield_value);
5563 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.implicit_interest_rate: ' || p_tqlv_rec.implicit_interest_rate);
5564 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_value: ' || p_tqlv_rec.asset_value);
5565 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.residual_value: ' || p_tqlv_rec.residual_value);
5566 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.unbilled_receivables: ' || p_tqlv_rec.unbilled_receivables);
5567 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_quantity: ' || p_tqlv_rec.asset_quantity);
5568 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.quote_quantity: ' || p_tqlv_rec.quote_quantity);
5569 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_id: ' || p_tqlv_rec.split_kle_id);
5570 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_name: ' || p_tqlv_rec.split_kle_name);
5571 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_code: ' || p_tqlv_rec.currency_code);
5572 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_code: ' || p_tqlv_rec.currency_conversion_code);
5573 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_type: ' || p_tqlv_rec.currency_conversion_type);
5574 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_rate: ' || p_tqlv_rec.currency_conversion_rate);
5575 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_date: ' || p_tqlv_rec.currency_conversion_date);
5576 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.due_date: ' || p_tqlv_rec.due_date);
5577 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.try_id: ' || p_tqlv_rec.try_id);
5578 	 END IF;
5579 
5580      --Check API version, initialize message list and create savepoint.
5581      l_return_status := OKL_API.START_ACTIVITY(l_api_name,
5582                                                G_PKG_NAME,
5583                                                p_init_msg_list,
5584                                                l_api_version,
5585                                                p_api_version,
5586                                                '_PVT',
5587                                                x_return_status);
5588 
5589      -- raise exception if error
5590      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5591        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5592      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5593        RAISE OKL_API.G_EXCEPTION_ERROR;
5594      END IF;
5595 
5596      -- RMUNJULU 16-JAN-03 2754574 Added code to get quote status and check if
5597      -- DRAFTED or REJECTED.
5598      -- Get the quote status
5599      FOR get_quote_dtls_rec IN get_quote_dtls_csr(p_tqlv_rec.id) LOOP
5600 
5601          l_qst_code := get_quote_dtls_rec.qst_code;
5602          l_qte_id := get_quote_dtls_rec.qte_id; -- rmunjulu Sales_Tax_Enhancement
5603          l_amount := get_quote_dtls_rec.amount; -- rmunjulu Sales_Tax_Enhancement
5604 
5605      END LOOP;
5606 
5607      -- If the quote is not DRAFTED or REJECTED, can not delete lines.
5608      IF l_qst_code NOT IN ('DRAFTED','REJECTED' ) THEN
5609 
5610         -- Quote status must be either Drafted or Rejected.
5611         OKL_API.set_message (
5612               			 p_app_name  	  => 'OKL',
5613               			 p_msg_name  	  => 'OKL_AM_SUBMIT_FOR_APPROVAL');
5614 
5615         RAISE OKL_API.G_EXCEPTION_ERROR;
5616 
5617      END IF;
5618 
5619     -- GKADARKA bug 3825037, default currency_conversion_date, start_date, creation_date and
5620     -- program_update_date to NULL/G_MISS_DATE so that correct date is stamped.
5621     -- issue occurs when g_miss_date passed from rossetta layer does not match okl_api.g_miss_date
5622 
5623      lp_tqlv_rec.currency_conversion_date := OKL_API.G_MISS_DATE;
5624      lp_tqlv_rec.creation_date := OKL_API.G_MISS_DATE;
5625      lp_tqlv_rec.start_date := null;
5626      lp_tqlv_rec.program_update_date := null;
5627 
5628      -- PAGARG 4102565 Added validate quote line to check for rules during updates
5629      validate_upd_quote_line(
5630          x_return_status  => l_return_status,
5631          p_tqlv_rec       => lp_tqlv_rec);
5632      IF (is_debug_statement_on) THEN
5633        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called validate_upd_quote_line , return status: ' || l_return_status);
5634      END IF;
5635 
5636      -- PAGARG 4102565 raise exception if error
5637      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
5638      THEN
5639        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5640      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
5641      THEN
5642        RAISE OKL_API.G_EXCEPTION_ERROR;
5643      END IF;
5644 
5645      -- rmunjulu Sales_Tax_Enhancement
5646      IF l_amount >= 0 THEN
5647 
5648 		   l_trx_name := 'Estimated Billing';
5649 
5650 		   --get and set try_id with try_id of billing transaction
5651 		   OPEN  get_try_id_csr (l_trx_name );
5652 		   FETCH get_try_id_csr INTO l_try_id;
5653 		   CLOSE get_try_id_csr;
5654 
5655      ELSE -- amount < 0
5656 
5657 		   l_trx_name := 'Estimated Billing';
5658 
5659 		   --get and set try_id with try_id of billing transaction
5660 		   OPEN  get_try_id_csr (l_trx_name );
5661 		   FETCH get_try_id_csr INTO l_try_id;
5662 		   CLOSE get_try_id_csr;
5663 
5664  	 END IF;
5665 
5666      -- rmunjulu Sales_Tax_Enhancement
5667      lp_tqlv_rec.try_id := l_try_id;
5668 
5669      IF (is_debug_statement_on) THEN
5670        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TXL_QUOTE_LINES_PUB.update_txl_quote_lines');
5671      END IF;
5672      -- Insert line into table using TAPI
5673      OKL_TXL_QUOTE_LINES_PUB.update_txl_quote_lines(
5674                                p_api_version   => p_api_version,
5675                                p_init_msg_list => G_FALSE,
5676                                x_return_status => l_return_status,
5677                                x_msg_count     => x_msg_count,
5678                                x_msg_data      => x_msg_data,
5679                                p_tqlv_rec      => lp_tqlv_rec,
5680                                x_tqlv_rec      => lx_tqlv_rec);
5681      IF (is_debug_statement_on) THEN
5682        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_TXL_QUOTE_LINES_PUB.update_txl_quote_lines , return status: ' || l_return_status);
5683      END IF;
5684 
5685      -- raise exception if error
5686      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5687        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5688      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5689        RAISE OKL_API.G_EXCEPTION_ERROR;
5690      END IF;
5691 
5692      IF (is_debug_statement_on) THEN
5693        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax');
5694      END IF;
5695     -- rmunjulu Sales_Tax_Enhancement
5696     -- Call the new OKL Tax engine to RECALCULATE tax for all quote lines
5697 	OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax(
5698     	p_api_version          => l_api_version,
5699     	p_init_msg_list        => OKL_API.G_FALSE,
5700     	x_return_status        => l_return_status,
5701     	x_msg_count            => x_msg_count,
5702     	x_msg_data             => x_msg_data,
5703     	p_source_trx_id		   => l_qte_id, -- TRX_ID is QUOTE_ID
5704     	p_source_trx_name      => 'Estimated Billing',	-- TRX_NAME IS NULL
5705     	p_source_table         => 'OKL_TRX_QUOTES_B');  -- SOURCE_TABLE IS OKL_TRX_QUOTES_B
5706      IF (is_debug_statement_on) THEN
5707        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax , return status: ' || l_return_status);
5708      END IF;
5709 
5710       IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
5711         -- Tax Processing failed.
5712         OKL_API.set_message( p_app_name      => 'OKL',
5713                              p_msg_name      =>'OKL_AM_PROCESS_TAX_ERR');
5714       END IF;
5715 
5716      -- raise exception if error
5717      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5718        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5719      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5720        RAISE OKL_API.G_EXCEPTION_ERROR;
5721      END IF;
5722 
5723      -- PAGARG 4102565 Recalculate quote header elements and update quote header
5724      recalculate_quote(
5725          x_return_status  => l_return_status,
5726          p_tqlv_rec       => lx_tqlv_rec);
5727      IF (is_debug_statement_on) THEN
5728        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called recalculate_quote , return status: ' || l_return_status);
5729      END IF;
5730 
5731      -- PAGARG 4102565  raise exception if error
5732      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
5733      THEN
5734        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5735      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
5736      THEN
5737        RAISE OKL_API.G_EXCEPTION_ERROR;
5738      END IF;
5739 
5740      -- set the return status and out variables
5741      x_return_status := l_return_status;
5742      x_tqlv_rec      := lx_tqlv_rec;
5743 
5744      -- end the transaction
5745      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5746      IF (is_debug_procedure_on) THEN
5747        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
5748      END IF;
5749 
5750   EXCEPTION
5751     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5752       IF (is_debug_exception_on) THEN
5753         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
5754       END IF;
5755 
5756       x_return_status := OKL_API.HANDLE_EXCEPTIONS
5757       (
5758         l_api_name,
5759         G_PKG_NAME,
5760         'OKL_API.G_RET_STS_ERROR',
5761         x_msg_count,
5762         x_msg_data,
5763         '_PVT'
5764       );
5765 
5766     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5767       IF (is_debug_exception_on) THEN
5768         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
5769       END IF;
5770 
5771       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5772       (
5773         l_api_name,
5774         G_PKG_NAME,
5775         'OKL_API.G_RET_STS_UNEXP_ERROR',
5776         x_msg_count,
5777         x_msg_data,
5778         '_PVT'
5779       );
5780 
5781     WHEN OTHERS THEN
5782       IF (is_debug_exception_on) THEN
5783         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5784  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
5785       END IF;
5786 
5787       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5788       (
5789         l_api_name,
5790         G_PKG_NAME,
5791         'OTHERS',
5792         x_msg_count,
5793         x_msg_data,
5794         '_PVT'
5795       );
5796 
5797   END update_quote_line ;
5798 
5799 
5800   -- Start of comments
5801   --
5802   -- Function  Name  : update_quote_line
5803   -- Description     : Updates multiple quote lines
5804   -- Business Rules  :
5805   -- Parameters      : Input parameters : p_tqlv_tbl
5806   --                   Output Parameters : x_tqlv_tbl
5807   -- Version         : 1.0
5808   -- History         : 23-DEC-02 RMUNJULU 2726739 Created
5809   -- End of comments
5810   PROCEDURE update_quote_line(
5811                p_api_version    IN NUMBER,
5812                p_init_msg_list  IN VARCHAR2 DEFAULT G_FALSE,
5813                x_return_status  OUT NOCOPY VARCHAR2,
5814                x_msg_count      OUT NOCOPY NUMBER,
5815                x_msg_data       OUT NOCOPY VARCHAR2,
5816                p_tqlv_tbl       IN tqlv_tbl_type,
5817                x_tqlv_tbl       OUT NOCOPY tqlv_tbl_type) IS
5818 
5819 
5820 
5821     l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5822     lp_tqlv_tbl tqlv_tbl_type := p_tqlv_tbl;
5823     lx_tqlv_tbl tqlv_tbl_type := p_tqlv_tbl;
5824     l_api_name VARCHAR2(30) := 'update_quote_line';
5825     l_api_version CONSTANT NUMBER := 1;
5826     i NUMBER;
5827     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'update_quote_line';
5828     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5829     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5830     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5831 
5832 
5833   BEGIN
5834      IF (is_debug_procedure_on) THEN
5835        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
5836      END IF;
5837 	 IF (is_debug_statement_on) THEN
5838 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_tbl.COUNT: ' || p_tqlv_tbl.COUNT);
5839 	 END IF;
5840 
5841      --Check API version, initialize message list and create savepoint.
5842      l_return_status := OKL_API.START_ACTIVITY(l_api_name,
5843                                                G_PKG_NAME,
5844                                                p_init_msg_list,
5845                                                l_api_version,
5846                                                p_api_version,
5847                                                '_PVT',
5848                                                x_return_status);
5849 
5850 
5851      -- raise exception if error
5852      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5853        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5854      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5855        RAISE OKL_API.G_EXCEPTION_ERROR;
5856      END IF;
5857 
5858 
5859      -- Loop thru the input tbl and call the rec type API
5860      IF (lp_tqlv_tbl.COUNT > 0) THEN
5861 
5862        i := lp_tqlv_tbl.FIRST;
5863 
5864        LOOP
5865 
5866          -- Update line of table using rec type API
5867          update_quote_line(
5868                p_api_version   => p_api_version,
5869                p_init_msg_list => G_FALSE,
5870                x_return_status => l_return_status,
5871                x_msg_count     => x_msg_count,
5872                x_msg_data      => x_msg_data,
5873                p_tqlv_rec      => lp_tqlv_tbl(i),
5874                x_tqlv_rec      => lx_tqlv_tbl(i));
5875          IF (is_debug_statement_on) THEN
5876            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called update_quote_line , return status: ' || l_return_status);
5877          END IF;
5878 
5879          -- raise exception if error
5880          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5881            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5882          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5883            RAISE OKL_API.G_EXCEPTION_ERROR;
5884          END IF;
5885 
5886          EXIT WHEN (i = lp_tqlv_tbl.LAST);
5887          i := lp_tqlv_tbl.NEXT(i);
5888        END LOOP;
5889 
5890      END IF;
5891 
5892 
5893      -- set the return status and out variables
5894      x_return_status := l_return_status;
5895      x_tqlv_tbl      := lx_tqlv_tbl;
5896 
5897 
5898      -- end the transaction
5899      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5900      IF (is_debug_procedure_on) THEN
5901        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
5902      END IF;
5903 
5904   EXCEPTION
5905 
5906 
5907     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5908       IF (is_debug_exception_on) THEN
5909         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
5910       END IF;
5911 
5912       x_return_status := OKL_API.HANDLE_EXCEPTIONS
5913       (
5914         l_api_name,
5915         G_PKG_NAME,
5916         'OKL_API.G_RET_STS_ERROR',
5917         x_msg_count,
5918         x_msg_data,
5919         '_PVT'
5920       );
5921 
5922 
5923     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5924       IF (is_debug_exception_on) THEN
5925         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
5926       END IF;
5927 
5928       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5929       (
5930         l_api_name,
5931         G_PKG_NAME,
5932         'OKL_API.G_RET_STS_UNEXP_ERROR',
5933         x_msg_count,
5934         x_msg_data,
5935         '_PVT'
5936       );
5937 
5938 
5939     WHEN OTHERS THEN
5940       IF (is_debug_exception_on) THEN
5941         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5942  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
5943       END IF;
5944 
5945       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5946       (
5947         l_api_name,
5948         G_PKG_NAME,
5949         'OTHERS',
5950         x_msg_count,
5951         x_msg_data,
5952         '_PVT'
5953       );
5954 
5955   END update_quote_line ;
5956 
5957 
5958   -- Start of comments
5959   --
5960   -- Function  Name  : get_quote_units
5961   -- Description     : Returns the quote units for the TQL id passed
5962   -- Business Rules  :
5963   -- Parameters      : Input parameters : p_tql_id
5964   --                   Output Parameters : x_unit_tbl
5965   -- Version         : 1.0
5966   -- History         : RMUNJULU 08-JAN-03 2736865 Created
5967   -- End of comments
5968   PROCEDURE get_quote_units(
5969                p_api_version    IN NUMBER,
5970                p_init_msg_list  IN VARCHAR2 DEFAULT G_FALSE,
5971                x_return_status  OUT NOCOPY VARCHAR2,
5972                x_msg_count      OUT NOCOPY NUMBER,
5973                x_msg_data       OUT NOCOPY VARCHAR2,
5974                p_tql_id         IN NUMBER,
5975                x_unit_tbl       OUT NOCOPY unit_tbl_type) IS
5976 
5977 
5978 
5979        -- Cursor to check if quote units exists
5980        CURSOR check_quote_units_exist_csr( p_tql_id IN NUMBER) IS
5981          SELECT TQD.id
5982          FROM   OKL_TXD_QUOTE_LINE_DTLS TQD
5983          WHERE  TQD.tql_id = p_tql_id;
5984 
5985 
5986       -- Cursor to return data when quote units not populated -- get from IB INST
5987        CURSOR get_ib_instances_csr( p_tql_id IN NUMBER) IS
5988           SELECT QTE.QUOTE_NUMBER QUOTE_NUMBER,
5989                  QTE.QST_CODE QST_CODE,
5990                  QTE.QTP_CODE QTP_CODE,
5991                  TQL.ID TQL_ID,
5992                  NULL TQD_ID,
5993                  TQL.ASSET_QUANTITY ASSET_QUANTITY,
5994                  TQL.QUOTE_QUANTITY QUOTE_QUANTITY,
5995                  CLE_IB.ID IB_LINE_ID,
5996                  CLE_FIN.ID FIN_LINE_ID,
5997                  CLE_FIN.DNZ_CHR_ID DNZ_CHR_ID,
5998                  CSI.SERIAL_NUMBER SERIAL_NUMBER,
5999                  CSI.QUANTITY INSTANCE_QUANTITY,
6000                  CSI.INSTANCE_NUMBER INSTANCE_NUMBER,
6001                  CLET_FIN.NAME ASSET_NUMBER,
6002                  CLET_FIN.ITEM_DESCRIPTION ASSET_DESCRIPTION,
6003                  SUBSTR(ARP_ADDR_LABEL_PKG.FORMAT_ADDRESS(NULL,
6004                                                           HL.ADDRESS1,
6005                                                           HL.ADDRESS2,
6006                                                           HL.ADDRESS3,
6007                                                           HL.ADDRESS4,
6008                                                           HL.CITY,
6009                                                           HL.COUNTY,
6010                                                           HL.STATE,
6011                                                           HL.PROVINCE,
6012                                                           HL.POSTAL_CODE,
6013                                                           NULL,
6014                                                           HL.COUNTRY,
6015                                                           NULL,
6016                                                           NULL,
6017                                                           NULL,
6018                                                           NULL,
6019                                                           NULL,
6020                                                           NULL,
6021                                                           NULL,
6022                                                           'N',
6023                                                           'N',
6024                                                           80,1,1),1,80) LOCATION_DESCRIPTION,
6025                   QTE.ID QTE_ID
6026           FROM HZ_LOCATIONS HL,
6027                HZ_PARTY_SITES HPS,
6028                HZ_PARTY_SITE_USES HPSU,
6029                CSI_ITEM_INSTANCES CSI,
6030                OKC_K_ITEMS CIM_IB,
6031                OKC_LINE_STYLES_B LSE_IB,
6032                OKC_K_LINES_B CLE_IB,
6033                OKC_LINE_STYLES_B LSE_INST,
6034                OKC_K_LINES_B CLE_INST,
6035                OKC_LINE_STYLES_B LSE_FIN,
6036                OKL_TXL_QUOTE_LINES_B TQL,
6037                OKL_TRX_QUOTES_B QTE,
6038                OKC_K_LINES_TL CLET_FIN,
6039                OKC_K_LINES_B CLE_FIN
6040          WHERE CLE_FIN.CLE_ID IS NULL
6041          AND   CLE_FIN.CHR_ID = CLE_FIN.DNZ_CHR_ID
6042          AND   CLE_FIN.ID = CLET_FIN.ID
6043          AND   CLET_FIN.LANGUAGE = USERENV('LANG')
6044          AND   CLE_FIN.ID = TQL.KLE_ID
6045          AND   TQL.QLT_CODE = 'AMCFIA'
6046          AND   LSE_FIN.ID = CLE_FIN.LSE_ID
6047          AND   LSE_FIN.LTY_CODE = 'FREE_FORM1'
6048          AND   CLE_INST.CLE_ID = CLE_FIN.ID
6049          AND   CLE_INST.LSE_ID = LSE_INST.ID
6050          AND   LSE_INST.LTY_CODE = 'FREE_FORM2'
6051          AND   CLE_IB.CLE_ID = CLE_INST.ID
6052          AND   CLE_IB.LSE_ID = LSE_IB.ID
6053          AND   LSE_IB.LTY_CODE = 'INST_ITEM'
6054          AND   CIM_IB.CLE_ID = CLE_IB.ID
6055          AND   CIM_IB.OBJECT1_ID1 = CSI.INSTANCE_ID
6056          AND   CIM_IB.OBJECT1_ID2 = '#'
6057          AND   CIM_IB.JTOT_OBJECT1_CODE = 'OKX_IB_ITEM'
6058          AND   CSI.INSTALL_LOCATION_ID = HPSU.PARTY_SITE_ID
6059          AND   HPSU.SITE_USE_TYPE = 'INSTALL_AT'
6060          AND   HPSU.PARTY_SITE_ID = HPS.PARTY_SITE_ID
6061          AND   HPS.LOCATION_ID = HL.LOCATION_ID
6062          AND   TQL.QTE_ID = QTE.ID
6063          AND   TQL.ID = p_tql_id;
6064 
6065 
6066       -- Cursor to return data when quote units populated -- get from TQD
6067        CURSOR get_quote_units_csr( p_tql_id IN NUMBER) IS
6068           SELECT QTE.QUOTE_NUMBER QUOTE_NUMBER,
6069                  QTE.QST_CODE QST_CODE,
6070                  QTE.QTP_CODE QTP_CODE,
6071                  TQL.ID TQL_ID,
6072                  TQD.ID TQD_ID,
6073                  TQL.ASSET_QUANTITY ASSET_QUANTITY,
6074                  TQL.QUOTE_QUANTITY QUOTE_QUANTITY,
6075                  CLE_IB.ID IB_LINE_ID,
6076                  CLE_FIN.ID FIN_LINE_ID,
6077                  CLE_FIN.DNZ_CHR_ID DNZ_CHR_ID,
6078                  CSI.SERIAL_NUMBER SERIAL_NUMBER,
6079                  CSI.QUANTITY INSTANCE_QUANTITY,
6080                  CSI.INSTANCE_NUMBER INSTANCE_NUMBER,
6081                  CLET_FIN.NAME ASSET_NUMBER,
6082                  CLET_FIN.ITEM_DESCRIPTION ASSET_DESCRIPTION,
6083                  SUBSTR(ARP_ADDR_LABEL_PKG.FORMAT_ADDRESS(NULL,
6084                                                           HL.ADDRESS1,
6085                                                           HL.ADDRESS2,
6086                                                           HL.ADDRESS3,
6087                                                           HL.ADDRESS4,
6088                                                           HL.CITY,
6089                                                           HL.COUNTY,
6090                                                           HL.STATE,
6091                                                           HL.PROVINCE,
6092                                                           HL.POSTAL_CODE,
6093                                                           NULL,
6094                                                           HL.COUNTRY,
6095                                                           NULL,
6096                                                           NULL,
6097                                                           NULL,
6098                                                           NULL,
6099                                                           NULL,
6100                                                           NULL,
6101                                                           NULL,
6102                                                           'N',
6103                                                           'N',
6104                                                           80,1,1),1,80) LOCATION_DESCRIPTION,
6105                   QTE.ID QTE_ID
6106           FROM HZ_LOCATIONS HL,
6107                HZ_PARTY_SITES HPS,
6108                HZ_PARTY_SITE_USES HPSU,
6109                CSI_ITEM_INSTANCES CSI,
6110                OKC_K_ITEMS CIM_IB,
6111                OKC_LINE_STYLES_B LSE_IB,
6112                OKC_K_LINES_B CLE_IB,
6113                OKC_LINE_STYLES_B LSE_INST,
6114                OKC_K_LINES_B CLE_INST,
6115                OKC_LINE_STYLES_B LSE_FIN,
6116                OKL_TXL_QUOTE_LINES_B TQL,
6117                OKL_TRX_QUOTES_B QTE,
6118                OKC_K_LINES_TL CLET_FIN,
6119                OKC_K_LINES_B CLE_FIN,
6120                OKL_TXD_QUOTE_LINE_DTLS TQD
6121          WHERE CLE_FIN.CLE_ID IS NULL
6122          AND   CLE_FIN.CHR_ID = CLE_FIN.DNZ_CHR_ID
6123          AND   CLE_FIN.ID = CLET_FIN.ID
6124          AND   CLET_FIN.LANGUAGE = USERENV('LANG')
6125          AND   CLE_FIN.ID = TQL.KLE_ID
6126          AND   TQL.QLT_CODE = 'AMCFIA'
6127          AND   LSE_FIN.ID = CLE_FIN.LSE_ID
6128          AND   LSE_FIN.LTY_CODE = 'FREE_FORM1'
6129          AND   CLE_INST.CLE_ID = CLE_FIN.ID
6130          AND   CLE_INST.LSE_ID = LSE_INST.ID
6131          AND   LSE_INST.LTY_CODE = 'FREE_FORM2'
6132          AND   CLE_IB.CLE_ID = CLE_INST.ID
6133          AND   CLE_IB.LSE_ID = LSE_IB.ID
6134          AND   LSE_IB.LTY_CODE = 'INST_ITEM'
6135          AND   CIM_IB.CLE_ID = CLE_IB.ID
6136          AND   CIM_IB.OBJECT1_ID1 = CSI.INSTANCE_ID
6137          AND   CIM_IB.OBJECT1_ID2 = '#'
6138          AND   CIM_IB.JTOT_OBJECT1_CODE = 'OKX_IB_ITEM'
6139          AND   CSI.INSTALL_LOCATION_ID = HPSU.PARTY_SITE_ID
6140          AND   HPSU.SITE_USE_TYPE = 'INSTALL_AT'
6141          AND   HPSU.PARTY_SITE_ID = HPS.PARTY_SITE_ID
6142          AND   HPS.LOCATION_ID = HL.LOCATION_ID
6143          AND   TQL.QTE_ID = QTE.ID
6144          AND   TQD.TQL_ID = TQL.ID
6145          AND   TQD.KLE_ID = CLE_IB.ID
6146          AND   TQL.ID = p_tql_id;
6147 
6148       l_unit_tbl unit_tbl_type;
6149       i NUMBER;
6150       l_id NUMBER;
6151       l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6152       l_api_name VARCHAR2(30) := 'get_quote_units';
6153       l_api_version NUMBER := 1;
6154 
6155     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_quote_units';
6156     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6157     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6158     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6159 
6160 
6161   BEGIN
6162      IF (is_debug_procedure_on) THEN
6163        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
6164      END IF;
6165 	 IF (is_debug_statement_on) THEN
6166 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tql_id: ' || p_tql_id);
6167 	 END IF;
6168 
6169      --Check API version, initialize message list and create savepoint.
6170      l_return_status := OKL_API.START_ACTIVITY(l_api_name,
6171                                                G_PKG_NAME,
6172                                                p_init_msg_list,
6173                                                l_api_version,
6174                                                p_api_version,
6175                                                '_PVT',
6176                                                x_return_status);
6177 
6178 
6179      -- raise exception if error
6180      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6181        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6182      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6183        RAISE OKL_API.G_EXCEPTION_ERROR;
6184      END IF;
6185 
6186 
6187      -- Check if tqd populated
6188      OPEN check_quote_units_exist_csr(p_tql_id);
6189      FETCH check_quote_units_exist_csr INTO l_id;
6190 
6191      -- if TQD populated then use TQD cursor
6192      IF check_quote_units_exist_csr%FOUND THEN
6193 
6194        i := 0;
6195 
6196        -- for the quote units set the quote units tbl
6197        FOR get_quote_units_rec IN get_quote_units_csr(p_tql_id) LOOP
6198 
6199          -- Set the unit tbl with cursor values
6200          l_unit_tbl(i).quote_number := get_quote_units_rec.quote_number;
6201          l_unit_tbl(i).qst_code := get_quote_units_rec.qst_code;
6202          l_unit_tbl(i).qtp_code := get_quote_units_rec.qtp_code;
6203          l_unit_tbl(i).tql_id := get_quote_units_rec.tql_id;
6204          l_unit_tbl(i).tqd_id := get_quote_units_rec.tqd_id;
6205          l_unit_tbl(i).asset_quantity := get_quote_units_rec.asset_quantity;
6206          l_unit_tbl(i).quote_quantity := get_quote_units_rec.quote_quantity;
6207          l_unit_tbl(i).ib_line_id := get_quote_units_rec.ib_line_id;
6208          l_unit_tbl(i).fin_line_id := get_quote_units_rec.fin_line_id;
6209          l_unit_tbl(i).dnz_chr_id := get_quote_units_rec.dnz_chr_id;
6210          l_unit_tbl(i).serial_number := get_quote_units_rec.serial_number;
6211          l_unit_tbl(i).instance_quantity := get_quote_units_rec.instance_quantity;
6212          l_unit_tbl(i).instance_number := get_quote_units_rec.instance_number;
6213          l_unit_tbl(i).asset_number := get_quote_units_rec.asset_number;
6214          l_unit_tbl(i).asset_description := get_quote_units_rec.asset_description;
6215          l_unit_tbl(i).location_description := get_quote_units_rec.location_description;
6216          l_unit_tbl(i).qte_id := get_quote_units_rec.qte_id;
6217 
6218          i := i + 1;
6219 
6220        END LOOP;
6221 
6222      ELSE -- TQD not populated use IB cursor
6223 
6224        i := 0;
6225 
6226        -- for the IB lines set the quote units tbl
6227        FOR get_ib_instances_rec IN get_ib_instances_csr(p_tql_id) LOOP
6228 
6229          -- Set the unit tbl with cursor values
6230          l_unit_tbl(i).quote_number := get_ib_instances_rec.quote_number;
6231          l_unit_tbl(i).qst_code := get_ib_instances_rec.qst_code;
6232          l_unit_tbl(i).qtp_code := get_ib_instances_rec.qtp_code;
6233          l_unit_tbl(i).tql_id := get_ib_instances_rec.tql_id;
6234          l_unit_tbl(i).tqd_id := get_ib_instances_rec.tqd_id;
6235          l_unit_tbl(i).asset_quantity := get_ib_instances_rec.asset_quantity;
6236          l_unit_tbl(i).quote_quantity := get_ib_instances_rec.quote_quantity;
6237          l_unit_tbl(i).ib_line_id := get_ib_instances_rec.ib_line_id;
6238          l_unit_tbl(i).fin_line_id := get_ib_instances_rec.fin_line_id;
6239          l_unit_tbl(i).dnz_chr_id := get_ib_instances_rec.dnz_chr_id;
6240          l_unit_tbl(i).serial_number := get_ib_instances_rec.serial_number;
6241          l_unit_tbl(i).instance_quantity := get_ib_instances_rec.instance_quantity;
6242          l_unit_tbl(i).instance_number := get_ib_instances_rec.instance_number;
6243          l_unit_tbl(i).asset_number := get_ib_instances_rec.asset_number;
6244          l_unit_tbl(i).asset_description := get_ib_instances_rec.asset_description;
6245          l_unit_tbl(i).location_description := get_ib_instances_rec.location_description;
6246          l_unit_tbl(i).qte_id := get_ib_instances_rec.qte_id;
6247 
6248          i := i + 1;
6249 
6250        END LOOP;
6251 
6252      END IF;
6253      CLOSE check_quote_units_exist_csr;
6254 
6255      -- Set the return variables
6256      x_return_status := l_return_status;
6257      x_unit_tbl := l_unit_tbl;
6258 
6259      -- end the transaction
6260      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6261      IF (is_debug_procedure_on) THEN
6262        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
6263      END IF;
6264 
6265   EXCEPTION
6266 
6267 
6268     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6269       IF (is_debug_exception_on) THEN
6270         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
6271       END IF;
6272 
6273       IF check_quote_units_exist_csr%ISOPEN THEN
6274         CLOSE check_quote_units_exist_csr;
6275       END IF;
6276 
6277       IF get_ib_instances_csr%ISOPEN THEN
6278         CLOSE get_ib_instances_csr;
6279       END IF;
6280 
6281       IF get_quote_units_csr%ISOPEN THEN
6282         CLOSE get_quote_units_csr;
6283       END IF;
6284 
6285       x_return_status := OKL_API.HANDLE_EXCEPTIONS
6286       (
6287         l_api_name,
6288         G_PKG_NAME,
6289         'OKL_API.G_RET_STS_ERROR',
6290         x_msg_count,
6291         x_msg_data,
6292         '_PVT'
6293       );
6294 
6295 
6296     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6297       IF (is_debug_exception_on) THEN
6298         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
6299       END IF;
6300 
6301       IF check_quote_units_exist_csr%ISOPEN THEN
6302         CLOSE check_quote_units_exist_csr;
6303       END IF;
6304 
6305       IF get_ib_instances_csr%ISOPEN THEN
6306         CLOSE get_ib_instances_csr;
6307       END IF;
6308 
6309       IF get_quote_units_csr%ISOPEN THEN
6310         CLOSE get_quote_units_csr;
6311       END IF;
6312 
6313       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6314       (
6315         l_api_name,
6316         G_PKG_NAME,
6317         'OKL_API.G_RET_STS_UNEXP_ERROR',
6318         x_msg_count,
6319         x_msg_data,
6320         '_PVT'
6321       );
6322 
6323 
6324     WHEN OTHERS THEN
6325       IF (is_debug_exception_on) THEN
6326         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6327  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
6328       END IF;
6329 
6330       IF check_quote_units_exist_csr%ISOPEN THEN
6331         CLOSE check_quote_units_exist_csr;
6332       END IF;
6333 
6334       IF get_ib_instances_csr%ISOPEN THEN
6335         CLOSE get_ib_instances_csr;
6336       END IF;
6337 
6338       IF get_quote_units_csr%ISOPEN THEN
6339         CLOSE get_quote_units_csr;
6340       END IF;
6341 
6342       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6343       (
6344         l_api_name,
6345         G_PKG_NAME,
6346         'OTHERS',
6347         x_msg_count,
6348         x_msg_data,
6349         '_PVT'
6350       );
6351 
6352   END get_quote_units;
6353 
6354 
6355 
6356   -- Start of comments
6357   --
6358   -- Function  Name  : delete_quote_line
6359   -- Description     : Deletes quote line
6360   -- Business Rules  :
6361   -- Parameters      : Input parameters : p_tqlv_rec
6362   -- Version         : 1.0
6363   -- History         : 16-JAN-03 RMUNJULU 2754574 Created
6364   --                 : rmunjulu Sales_Tax_Enhancement
6365   -- End of comments
6366   PROCEDURE delete_quote_line(
6367                p_api_version    IN NUMBER,
6368                p_init_msg_list  IN VARCHAR2 DEFAULT G_FALSE,
6369                x_return_status  OUT NOCOPY VARCHAR2,
6370                x_msg_count      OUT NOCOPY NUMBER,
6371                x_msg_data       OUT NOCOPY VARCHAR2,
6372                p_tqlv_rec       IN tqlv_rec_type) IS
6373 
6374 
6375     -- Get the quote details
6376     CURSOR get_quote_dtls_csr ( p_tql_id IN NUMBER) IS
6377         SELECT QTE.qst_code,
6378         	   QTE.id qte_id -- rmunjulu Sales_Tax_Enhancement
6379         FROM   OKL_TRX_QUOTES_V QTE,
6380                OKL_TXL_QUOTE_LINES_V TQL
6381         WHERE  TQL.id = p_tql_id
6382         AND    TQL.qte_id = QTE.id;
6383 
6384 
6385     l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6386     lp_tqlv_rec tqlv_rec_type := p_tqlv_rec;
6387     l_api_name VARCHAR2(30) := 'delete_quote_line';
6388     l_api_version CONSTANT NUMBER := 1;
6389     l_qst_code VARCHAR2(30);
6390 
6391     -- rmunjulu Sales_Tax_Enhancement
6392     l_qte_id NUMBER;
6393 
6394     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'delete_quote_line';
6395     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6396     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6397     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6398 
6399   BEGIN
6400      IF (is_debug_procedure_on) THEN
6401        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
6402      END IF;
6403 	 IF (is_debug_statement_on) THEN
6404 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.id: ' || p_tqlv_rec.id);
6405 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qlt_code: ' || p_tqlv_rec.qlt_code);
6406 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.kle_id: ' || p_tqlv_rec.kle_id);
6407 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.sty_id: ' || p_tqlv_rec.sty_id);
6408 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.qte_id: ' || p_tqlv_rec.qte_id);
6409 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.line_number: ' || p_tqlv_rec.line_number);
6410 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.amount: ' || p_tqlv_rec.amount);
6411 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.modified_yn: ' || p_tqlv_rec.modified_yn);
6412 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.taxed_yn: ' || p_tqlv_rec.taxed_yn);
6413 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.defaulted_yn: ' || p_tqlv_rec.defaulted_yn);
6414 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.org_id: ' || p_tqlv_rec.org_id);
6415 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.start_date: ' || p_tqlv_rec.start_date);
6416 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.period: ' || p_tqlv_rec.period);
6417 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.number_of_periods: ' || p_tqlv_rec.number_of_periods);
6418 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.lock_level_step: ' || p_tqlv_rec.lock_level_step);
6419 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.advance_or_arrears: ' || p_tqlv_rec.advance_or_arrears);
6420 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_name: ' || p_tqlv_rec.yield_name);
6421 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.yield_value: ' || p_tqlv_rec.yield_value);
6422 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.implicit_interest_rate: ' || p_tqlv_rec.implicit_interest_rate);
6423 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_value: ' || p_tqlv_rec.asset_value);
6424 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.residual_value: ' || p_tqlv_rec.residual_value);
6425 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.unbilled_receivables: ' || p_tqlv_rec.unbilled_receivables);
6426 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.asset_quantity: ' || p_tqlv_rec.asset_quantity);
6427 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.quote_quantity: ' || p_tqlv_rec.quote_quantity);
6428 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_id: ' || p_tqlv_rec.split_kle_id);
6429 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.split_kle_name: ' || p_tqlv_rec.split_kle_name);
6430 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_code: ' || p_tqlv_rec.currency_code);
6431 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_code: ' || p_tqlv_rec.currency_conversion_code);
6432 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_type: ' || p_tqlv_rec.currency_conversion_type);
6433 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_rate: ' || p_tqlv_rec.currency_conversion_rate);
6434 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.currency_conversion_date: ' || p_tqlv_rec.currency_conversion_date);
6435 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.due_date: ' || p_tqlv_rec.due_date);
6436 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_rec.try_id: ' || p_tqlv_rec.try_id);
6437 	 END IF;
6438 
6439 
6440      --Check API version, initialize message list and create savepoint.
6441      l_return_status := OKL_API.START_ACTIVITY(l_api_name,
6442                                                G_PKG_NAME,
6443                                                p_init_msg_list,
6444                                                l_api_version,
6445                                                p_api_version,
6446                                                '_PVT',
6447                                                x_return_status);
6448 
6449 
6450      -- raise exception if error
6451      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6452        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6453      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6454        RAISE OKL_API.G_EXCEPTION_ERROR;
6455      END IF;
6456 
6457 
6458      -- Get the quote status
6459      FOR get_quote_dtls_rec IN get_quote_dtls_csr(p_tqlv_rec.id) LOOP
6460 
6461          l_qst_code := get_quote_dtls_rec.qst_code;
6462          l_qte_id := get_quote_dtls_rec.qte_id; -- rmunjulu Sales_Tax_Enhancement
6463 
6464      END LOOP;
6465 
6466 
6467      -- If the quote is not DRAFTED or REJECTED, can not delete lines.
6468      IF l_qst_code NOT IN ('DRAFTED','REJECTED' ) THEN
6469 
6470         -- Quote status must be either Drafted or Rejected.
6471         OKL_API.set_message (
6472               			 p_app_name  	  => 'OKL',
6473               			 p_msg_name  	  => 'OKL_AM_SUBMIT_FOR_APPROVAL');
6474 
6475         RAISE OKL_API.G_EXCEPTION_ERROR;
6476 
6477      END IF;
6478 
6479 
6480 
6481      IF (is_debug_statement_on) THEN
6482        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TXL_QUOTE_LINES_PUB.delete_txl_quote_lines');
6483      END IF;
6484      -- Delete line from table using TAPI
6485      OKL_TXL_QUOTE_LINES_PUB.delete_txl_quote_lines(
6486                                p_api_version   => p_api_version,
6487                                p_init_msg_list => G_FALSE,
6488                                x_return_status => l_return_status,
6489                                x_msg_count     => x_msg_count,
6490                                x_msg_data      => x_msg_data,
6491                                p_tqlv_rec      => lp_tqlv_rec);
6492      IF (is_debug_statement_on) THEN
6493        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_TXL_QUOTE_LINES_PUB.delete_txl_quote_lines , return status: ' || l_return_status);
6494      END IF;
6495 
6496 
6497 
6498      -- raise exception if error
6499      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6500        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6501      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6502        RAISE OKL_API.G_EXCEPTION_ERROR;
6503      END IF;
6504 
6505     IF (is_debug_statement_on) THEN
6506       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax');
6507     END IF;
6508     -- rmunjulu Sales_Tax_Enhancement
6509     -- Call the new OKL Tax engine to RECALCULATE tax for all quote lines
6510 	OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax(
6511     	p_api_version          => l_api_version,
6512     	p_init_msg_list        => OKL_API.G_FALSE,
6513     	x_return_status        => l_return_status,
6514     	x_msg_count            => x_msg_count,
6515     	x_msg_data             => x_msg_data,
6516     	p_source_trx_id		   => l_qte_id, -- TRX_ID is QUOTE_ID
6517     	p_source_trx_name      => 'Estimated Billing',	-- TRX_NAME IS NULL
6518     	p_source_table         => 'OKL_TRX_QUOTES_B');  -- SOURCE_TABLE IS OKL_TRX_QUOTES_B
6519     IF (is_debug_statement_on) THEN
6520       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax , return status: ' || l_return_status);
6521     END IF;
6522 
6523       IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
6524         -- Tax Processing failed.
6525         OKL_API.set_message( p_app_name      => 'OKL',
6526                              p_msg_name      =>'OKL_AM_PROCESS_TAX_ERR');
6527       END IF;
6528 
6529      -- raise exception if error
6530      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6531        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6532      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6533        RAISE OKL_API.G_EXCEPTION_ERROR;
6534      END IF;
6535 
6536      -- set the return status and out variables
6537      x_return_status := l_return_status;
6538 
6539 
6540      -- end the transaction
6541      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6542      IF (is_debug_procedure_on) THEN
6543        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
6544      END IF;
6545 
6546   EXCEPTION
6547 
6548 
6549     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6550       IF (is_debug_exception_on) THEN
6551         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
6552       END IF;
6553 
6554       x_return_status := OKL_API.HANDLE_EXCEPTIONS
6555       (
6556         l_api_name,
6557         G_PKG_NAME,
6558         'OKL_API.G_RET_STS_ERROR',
6559         x_msg_count,
6560         x_msg_data,
6561         '_PVT'
6562       );
6563 
6564 
6565     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6566       IF (is_debug_exception_on) THEN
6567         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
6568       END IF;
6569 
6570       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6571       (
6572         l_api_name,
6573         G_PKG_NAME,
6574         'OKL_API.G_RET_STS_UNEXP_ERROR',
6575         x_msg_count,
6576         x_msg_data,
6577         '_PVT'
6578       );
6579 
6580 
6581     WHEN OTHERS THEN
6582       IF (is_debug_exception_on) THEN
6583         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6584  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
6585       END IF;
6586 
6587       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6588       (
6589         l_api_name,
6590         G_PKG_NAME,
6591         'OTHERS',
6592         x_msg_count,
6593         x_msg_data,
6594         '_PVT'
6595       );
6596 
6597 
6598   END delete_quote_line ;
6599 
6600 
6601 
6602 
6603   -- Start of comments
6604   --
6605   -- Function  Name  : delete_quote_line
6606   -- Description     : Deletes multiple quote lines
6607   -- Business Rules  :
6608   -- Parameters      : Input parameters : p_tqlv_tbl
6609   -- Version         : 1.0
6610   -- History         : 16-JAN-03 RMUNJULU 2754574 Created
6611   -- End of comments
6612   PROCEDURE delete_quote_line(
6613                p_api_version    IN NUMBER,
6614                p_init_msg_list  IN VARCHAR2 DEFAULT G_FALSE,
6615                x_return_status  OUT NOCOPY VARCHAR2,
6616                x_msg_count      OUT NOCOPY NUMBER,
6617                x_msg_data       OUT NOCOPY VARCHAR2,
6618                p_tqlv_tbl       IN tqlv_tbl_type) IS
6619 
6620 
6621 
6622     l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6623     lp_tqlv_tbl tqlv_tbl_type := p_tqlv_tbl;
6624     l_api_name VARCHAR2(30) := 'delete_quote_line';
6625     l_api_version CONSTANT NUMBER := 1;
6626     i NUMBER;
6627     l_module_name VARCHAR2(500) := G_MODULE_NAME || 'delete_quote_line';
6628     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6629     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6630     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6631 
6632 
6633   BEGIN
6634      IF (is_debug_procedure_on) THEN
6635        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'Begin(+)');
6636      END IF;
6637 	 IF (is_debug_statement_on) THEN
6638 	   OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tqlv_tbl.COUNT: ' || p_tqlv_tbl.COUNT);
6639 	 END IF;
6640 
6641      --Check API version, initialize message list and create savepoint.
6642      l_return_status := OKL_API.START_ACTIVITY(l_api_name,
6643                                                G_PKG_NAME,
6644                                                p_init_msg_list,
6645                                                l_api_version,
6646                                                p_api_version,
6647                                                '_PVT',
6648                                                x_return_status);
6649 
6650 
6651      -- raise exception if error
6652      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6653        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6654      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6655        RAISE OKL_API.G_EXCEPTION_ERROR;
6656      END IF;
6657 
6658 
6659      -- Loop thru the input tbl and call the rec type API
6660      IF (lp_tqlv_tbl.COUNT > 0) THEN
6661 
6662        i := lp_tqlv_tbl.FIRST;
6663 
6664        LOOP
6665 
6666          -- Update line of table using rec type API
6667          delete_quote_line(
6668                p_api_version   => p_api_version,
6669                p_init_msg_list => G_FALSE,
6670                x_return_status => l_return_status,
6671                x_msg_count     => x_msg_count,
6672                x_msg_data      => x_msg_data,
6673                p_tqlv_rec      => lp_tqlv_tbl(i));
6674          IF (is_debug_statement_on) THEN
6675            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called delete_quote_line , return status: ' || l_return_status);
6676          END IF;
6677 
6678          -- raise exception if error
6679          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6680            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6681          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6682            RAISE OKL_API.G_EXCEPTION_ERROR;
6683          END IF;
6684 
6685          EXIT WHEN (i = lp_tqlv_tbl.LAST);
6686          i := lp_tqlv_tbl.NEXT(i);
6687        END LOOP;
6688 
6689      END IF;
6690 
6691 
6692      -- set the return status and out variables
6693      x_return_status := l_return_status;
6694 
6695 
6696      -- end the transaction
6697      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6698      IF (is_debug_procedure_on) THEN
6699        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name  ,'End(-)');
6700      END IF;
6701 
6702   EXCEPTION
6703 
6704 
6705     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6706       IF (is_debug_exception_on) THEN
6707         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
6708       END IF;
6709 
6710       x_return_status := OKL_API.HANDLE_EXCEPTIONS
6711       (
6712         l_api_name,
6713         G_PKG_NAME,
6714         'OKL_API.G_RET_STS_ERROR',
6715         x_msg_count,
6716         x_msg_data,
6717         '_PVT'
6718       );
6719 
6720 
6721     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6722       IF (is_debug_exception_on) THEN
6723         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
6724       END IF;
6725 
6726       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6727       (
6728         l_api_name,
6729         G_PKG_NAME,
6730         'OKL_API.G_RET_STS_UNEXP_ERROR',
6731         x_msg_count,
6732         x_msg_data,
6733         '_PVT'
6734       );
6735 
6736 
6737     WHEN OTHERS THEN
6738       IF (is_debug_exception_on) THEN
6739         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6740  			                || sqlcode || ' , SQLERRM : ' || sqlerrm);
6741       END IF;
6742 
6743       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6744       (
6745         l_api_name,
6746         G_PKG_NAME,
6747         'OTHERS',
6748         x_msg_count,
6749         x_msg_data,
6750         '_PVT'
6751       );
6752 
6753   END delete_quote_line ;
6754 
6755 END OKL_AM_TERMNT_QUOTE_PVT;