[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;