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