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