1 PACKAGE BODY OKL_AM_CREATE_QUOTE_PVT AS
2 /* $Header: OKLRCQTB.pls 120.31.12020000.2 2012/08/28 14:09:21 racheruv ship $ */
3
4 -- GLOBAL VARIABLES
5 G_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
6 G_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
7 G_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
8 G_MODULE_NAME CONSTANT VARCHAR2(500) := 'okl.am.plsql.okl_am_create_quote_pvt.';
9
10 SUBTYPE rulv_rec_type IS OKL_RULE_PUB.rulv_rec_type;
11 -- SUBTYPE asset_tbl_type IS OKL_AM_CALCULATE_QUOTE_PVT.asset_tbl_type;
12
13 -- Start of comments
14 --
15 -- Procedure Name : asset_number_exists
16 -- Desciption : Returns via x_asset_exists if the asset_number exists in FA
17 -- Business Rules :
18 -- Parameters :
19 -- Version : 1.0
20 -- History : RMUNJULU 2757312 created
21 -- : RMUNJULU 3241502 Added p_control + major revamp of the processing
22 -- IS NOW ALSO CALLED FROM OKL_AM_CNTRCT_LN_TRMNT_PVT
23 -- : RMUNJULU 3241502 Added UPPER to asset_number
24 --
25 -- End of comments
26 FUNCTION asset_number_exists(p_asset_number IN VARCHAR2,
27 p_control IN VARCHAR2 DEFAULT NULL,
28 x_asset_exists OUT NOCOPY VARCHAR2 ) RETURN VARCHAR2 IS
29
30 l_asset_exists VARCHAR2(1) DEFAULT 'N';
31 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
32
33 --chk for asset in FA
34 --Updated the sql statement for performance issue #5484903
35 -- by excluding UPPER function to do Index scan
36 CURSOR asset_chk_curs1 (p_asset_number IN VARCHAR2) IS
37 SELECT 'Y' a
38 FROM okx_assets_v okx
39 WHERE UPPER(okx.asset_number) = p_asset_number
40 and
41 ( okx.asset_number like Initcap(substr(p_asset_number,1,2))||'%'
42 or
43 okx.asset_number like lower(substr(p_asset_number,1))||Upper(substr(p_asset_number,2,1))||'%'
44 or
45 okx.asset_number like Upper(substr(p_asset_number,1,2))||'%'
46 or
47 okx.asset_number like lower(substr(p_asset_number,1,2))||'%'
48 );
49
50
51
52 --chk for asset on asset line
53 --Updated the sql statement for performance issue #5484903
54 -- by excluding UPPER function to do Index scan
55 CURSOR asset_chk_curs2 (p_asset_number IN VARCHAR2) IS
56 SELECT 'Y' a
57 FROM okc_k_lines_v kle,
58 okc_line_styles_b lse
59 WHERE kle.lse_id = lse.id
60 AND lse.lty_code = 'FREE_FORM1'
61 AND UPPER(kle.NAME) = p_asset_number -- RMUNJULU 3241502
62 AND ( kle.NAME like Initcap(substr(p_asset_number,1,2))||'%'
63 or
64 kle.NAME like lower(substr(p_asset_number,1))||Upper(substr(p_asset_number,2,1))||'%'
65 or
66 kle.NAME like Upper(substr(p_asset_number,1,2))||'%'
67 or
68 kle.NAME like lower(substr(p_asset_number,1,2))||'%'
69 ) ;
70
71
72
73 --check for asset on an split asset transaction
74 CURSOR asset_chk_curs3 (p_asset_number IN VARCHAR2) is
75 SELECT 'Y' a
76 FROM okl_txd_assets_b txd
77 WHERE NVL(UPPER(txd.asset_number),'-999999999999999') = UPPER(p_asset_number) -- RMUNJULU 3241502
78 AND EXISTS (SELECT NULL
79 FROM okl_trx_Assets trx,
80 okl_trx_types_tl ttyp,
81 okl_txl_assets_b txl
82 WHERE trx.id = txl.tas_id
83 AND trx.try_id = ttyp.id
84 AND ttyp.name = 'Split Asset'
85 AND ttyp.language = 'US'
86 AND txl.id = txd.tal_id);
87
88 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'asset_number_exists';
89 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
90 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
91 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
92
93
94 BEGIN
95
96 IF (is_debug_procedure_on) THEN
97 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
98 END IF;
99
100 FOR asset_chk_rec1 IN asset_chk_curs1 (p_asset_number) LOOP
101 l_asset_exists := asset_chk_rec1.a;
102 END LOOP;
103 IF l_asset_exists <> 'Y' THEN
104 FOR asset_chk_rec2 IN asset_chk_curs2 (p_asset_number) LOOP
105 l_asset_exists := asset_chk_rec2.a;
106 END LOOP;
107 END IF;
108 IF p_control = 'QUOTE' THEN
109 IF l_asset_exists <> 'Y' THEN
110 FOR asset_chk_rec3 IN asset_chk_curs3 (p_asset_number) LOOP
111 l_asset_exists := asset_chk_rec3.a;
112 END LOOP;
113 END IF;
114 END IF;
115 x_asset_exists := l_asset_exists;
116
117
118 IF (is_debug_procedure_on) THEN
119 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
120 END IF;
121
122 RETURN(l_return_status);
123 EXCEPTION
124 WHEN OTHERS THEN
125 -- store SQL error message on message stack for caller
126 OKL_API.set_message(
127 p_app_name => g_app_name,
128 p_msg_name => g_unexpected_error,
129 p_token1 => g_sqlcode_token,
130 p_token1_value => sqlcode,
131 p_token2 => g_sqlerrm_token,
132 p_token2_value => sqlerrm);
133 l_return_status := OKL_API.G_RET_STS_ERROR;
134 RETURN(l_return_status);
135 END asset_number_exists;
136
137
138
139 -------------------------------------------------------------------------------
140 -- Start of Commnets
141 -- Badrinath Kuchibholta
142 -- Procedure Name : advance_contract_search
143 -- Description : Procedure used for doing advance search on contract
144 -- details
145 -- Business Rules : The search critriea will be given thru achr_rec_type
146 -- in the form either contract number,
147 -- contract start date,contract end date,
148 -- asset number,serial number or customer name.
149 -- The output will PL/sql table of record of
150 -- achr_rec_type and will contain contract number,
151 -- chr_id, contract start date, contract end date,
152 -- customer name,authoring org id of the contract
153 -- or status of the contract.
154 -- To avoid the performance problem we use
155 -- this PKG instead of View.
156 -- Parameters : IN record of achr_rec_type
157 -- OUT PL/SQL Table of Record achr_tbl_type
158 -- x_return_status OUT NOCOPY VARCHAR2
159 -- Version : 1.0
160 -- History : BAKUCHIB 28-DEC-2002 - 2699412 created
161 -- SECHAWLA 02-JAN-03 - Moved this procedure from okl_am_util_pvt to this API
162 -- GKADARKA 06-JAN-03 2736875 Added order by contract number asc in advance_contract_search
163 -- porcedure cursor.
164 -- BAKUCHIB 16-JAN-03 2748110
165 -- Modified the Advance_contract_search procedure
166 -- by checking for addtionaly Contract Status and
167 -- Line Status. The Addional Contract Status and
168 -- Line status are 'EVERGREEN','BANKRUPTCY_HOLD',
169 -- 'LITIGATION_HOLD','TERMINATION_HOLD' other than
170 -- 'BOOKED'.Also modified the queries by adding
171 -- stripping by org_id.If the input org_id is null
172 -- then we set the org_id with the client info
173 -- BAKUCHIB 17-JAN-03 2748110
174 -- Modified the Advance_contract_search procedure
175 -- by removing Line Status checking.
176 -- BAKUCHIB 04-FEB-03 2781134
177 -- Modified the Advance_contract_search procedure
178 -- by adding case insenstive search on columns contract
179 -- number, asset number, start date, end date and party
180 -- name.
181 -- BAKUCHIB 19-Feb-2003 2807201
182 -- Modified the advance serach by removing the upper
183 -- in the where clause on start date and end date of all the cursors.
184 -- End of Commnets
185
186 Procedure advance_contract_search(
187 p_api_version IN NUMBER,
188 p_init_msg_list IN VARCHAR2,
189 x_return_status OUT NOCOPY VARCHAR2,
190 x_msg_count OUT NOCOPY NUMBER,
191 x_msg_data OUT NOCOPY VARCHAR2,
192 p_achr_rec IN achr_rec_type,
193 x_achr_tbl OUT NOCOPY achr_tbl_type) IS
194 l_api_version CONSTANT NUMBER := 1;
195 l_api_name CONSTANT VARCHAR2(30) := 'ADVANCE_CONTRACT_SEARCH';
196 i NUMBER := 0;
197 l_achr_rec achr_rec_type := p_achr_rec;
198 l_achr_tbl achr_tbl_type;
199
200 -- Get the contract details
201 CURSOR get_chr_dtls_csr(p_achr_rec IN achr_rec_type)
202 IS
203 SELECT chr.id chr_id,
204 chr.contract_number contract_number,
205 chr.start_date from_start_date,
206 chr.end_date from_end_date,
207 stl.code sts_code,
208 stl.meaning sts_meaning,
209 chr.authoring_org_id org_id,
210 hp.party_name party_name
211 FROM okc_statuses_tl stl,
212 hz_parties hp,
213 okc_k_party_roles_b cpl,
214 okc_k_headers_b chr
215 -- BAKUCHIB 2781134 start
216 WHERE upper(chr.contract_number) LIKE upper(nvl(p_achr_rec.contract_number,chr.contract_number))
217 -- BAKUCHIB 2807201 start
218 AND nvl(chr.start_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_start_date,nvl(chr.start_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_start_date,nvl(chr.start_date,to_date('1111','yyyy')))
219 AND nvl(chr.end_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_end_date,nvl(chr.end_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_end_date,nvl(chr.end_date,to_date('1111','yyyy')))
220 -- BAKUCHIB 2807201 end
221 -- BAKUCHIB 2781134 end
222 -- BAKUCHIB 2748110 Start
223 AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
224 AND chr.scs_code IN ('LEASE', 'LOAN')
225 AND chr.authoring_org_id = p_achr_rec.org_id
226 -- BAKUCHIB 2748110 end
227 AND chr.id = cpl.dnz_chr_id
228 AND cpl.chr_id = cpl.dnz_chr_id
229 AND cpl.object1_id1 = hp.party_id
230 AND cpl.object1_id2 = '#'
231 AND cpl.jtot_object1_code = 'OKX_PARTY'
232 AND cpl.rle_code = 'LESSEE'
233 AND cpl.cle_id IS NULL
234 -- BAKUCHIB 2781134 start
235 AND upper(hp.party_name) LIKE upper(nvl(p_achr_rec.party_name,hp.party_name))
236 -- BAKUCHIB 2781134 end
237 AND hp.party_type IN ( 'PERSON','ORGANIZATION')
238 AND chr.sts_code = stl.code
239 AND stl.LANGUAGE = userenv('LANG')
240 ORDER BY contract_number ASC;
241
242 -- Get the contract details for asset number
243 CURSOR get_for_asset_csr(p_achr_rec IN achr_rec_type)
244 IS
245 SELECT chr.id chr_id,
246 chr.contract_number contract_number,
247 chr.start_date from_start_date,
248 chr.end_date from_end_date,
249 stl.code sts_code,
250 stl.meaning sts_meaning,
251 chr.authoring_org_id org_id,
252 hp.party_name party_name
253 FROM okc_statuses_tl stl,
254 hz_parties hp,
255 okc_k_party_roles_b cpl,
256 okc_k_headers_b chr
257 -- BAKUCHIB 2781134 start
258 WHERE upper(chr.contract_number) LIKE upper(nvl(p_achr_rec.contract_number,chr.contract_number))
259 -- BAKUCHIB 2781134 end
260 -- BAKUCHIB 2748110 Start
261 AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
262 AND chr.scs_code IN ('LEASE', 'LOAN')
263 AND chr.authoring_org_id = p_achr_rec.org_id
264 -- BAKUCHIB 2748110 End
265 -- BAKUCHIB 2781134 start
266 -- BAKUCHIB 2807201 start
267 AND nvl(chr.start_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_start_date,nvl(chr.start_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_start_date,nvl(chr.start_date,to_date('1111','yyyy')))
268 AND nvl(chr.end_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_end_date,nvl(chr.end_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_end_date,nvl(chr.end_date,to_date('1111','yyyy')))
269 -- BAKUCHIB 2807201 end
270 -- BAKUCHIB 2781134 end
271 AND chr.id = cpl.dnz_chr_id
272 AND cpl.chr_id = cpl.dnz_chr_id
273 AND cpl.object1_id1 = hp.party_id
274 AND cpl.object1_id2 = '#'
275 AND cpl.jtot_object1_code = 'OKX_PARTY'
276 AND cpl.rle_code = 'LESSEE'
277 AND cpl.cle_id IS NULL
278 -- BAKUCHIB 2781134 start
279 AND upper(hp.party_name) LIKE upper(nvl(p_achr_rec.party_name,hp.party_name))
280 -- BAKUCHIB 2781134 end
281 AND hp.party_type IN ( 'PERSON','ORGANIZATION')
282 AND chr.sts_code = stl.code
283 AND stl.LANGUAGE = userenv('LANG')
284 AND chr.id IN (SELECT DISTINCT cle_fin.dnz_chr_id chr_id
285 FROM okc_line_styles_b lse_fin,
286 okc_k_lines_tl clet_fin,
287 okc_k_lines_b cle_fin,
288 okc_k_headers_b chr
289 WHERE cle_fin.cle_id IS NULL
290 AND cle_fin.chr_id = cle_fin.dnz_chr_id
291 AND cle_fin.dnz_chr_id = chr.id
292 AND cle_fin.id = clet_fin.id
293 AND clet_fin.LANGUAGE = userenv('LANG')
294 AND lse_fin.id = cle_fin.lse_id
295 AND lse_fin.lty_code = 'FREE_FORM1'
296 -- BAKUCHIB 2748110 Start
297 AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
298 AND chr.scs_code IN ('LEASE', 'LOAN')
299 AND chr.authoring_org_id = p_achr_rec.org_id
300 -- BAKUCHIB 2748110 End
301 -- BAKUCHIB 2781134 start
302 AND upper(nvl(clet_fin.name,'x')) LIKE upper(nvl(p_achr_rec.asset_number,nvl(clet_fin.name,'x'))))
303 -- BAKUCHIB 2781134 end
304 ORDER BY contract_number ASC;
305
306 -- Get the chr_id for serial number
307 CURSOR get_for_sno_csr(p_achr_rec IN achr_rec_type)
308 IS
309 SELECT chr.id chr_id,
310 chr.contract_number contract_number,
311 chr.start_date from_start_date,
312 chr.end_date from_end_date,
313 stl.code sts_code,
314 stl.meaning sts_meaning,
315 chr.authoring_org_id org_id,
316 hp.party_name party_name
317 FROM okc_statuses_tl stl,
318 hz_parties hp,
319 okc_k_party_roles_b cpl,
320 okc_k_headers_b chr
321 -- BAKUCHIB 2781134 start
322 WHERE upper(chr.contract_number) LIKE upper(nvl(p_achr_rec.contract_number,chr.contract_number))
323 -- BAKUCHIB 2781134 end
324 -- BAKUCHIB 2748110 Start
325 AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
326 AND chr.scs_code IN ('LEASE', 'LOAN')
327 AND chr.authoring_org_id = p_achr_rec.org_id
328 -- BAKUCHIB 2748110 End
329 -- BAKUCHIB 2781134 start
330 -- BAKUCHIB 2807201 start
331 AND nvl(chr.start_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_start_date,nvl(chr.start_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_start_date,nvl(chr.start_date,to_date('1111','yyyy')))
332 AND nvl(chr.end_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_end_date,nvl(chr.end_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_end_date,nvl(chr.end_date,to_date('1111','yyyy')))
333 -- BAKUCHIB 2807201 end
334 -- BAKUCHIB 2781134 end
335 AND chr.id = cpl.dnz_chr_id
336 AND cpl.chr_id = cpl.dnz_chr_id
337 AND cpl.object1_id1 = hp.party_id
338 AND cpl.object1_id2 = '#'
339 AND cpl.jtot_object1_code = 'OKX_PARTY'
340 AND cpl.rle_code = 'LESSEE'
341 AND cpl.cle_id IS NULL
342 -- BAKUCHIB 2781134 start
343 AND upper(hp.party_name) LIKE upper(nvl(p_achr_rec.party_name,hp.party_name))
344 -- BAKUCHIB 2781134 end
345 AND hp.party_type IN ( 'PERSON','ORGANIZATION')
346 AND chr.sts_code = stl.code
347 AND stl.LANGUAGE = userenv('LANG')
348 AND chr.id IN (SELECT DISTINCT cim_ib.dnz_chr_id chr_id
349 FROM csi_item_instances csi,
350 okc_k_items cim_ib,
351 okc_line_styles_b lse_ib,
352 okc_k_lines_b cle_ib,
353 okc_k_headers_b chr
354 WHERE cle_ib.lse_id = lse_ib.id
355 AND lse_ib.lty_code = 'INST_ITEM'
356 AND cim_ib.cle_id = cle_ib.id
357 AND cim_ib.dnz_chr_id = cle_ib.dnz_chr_id
358 AND cle_ib.dnz_chr_id = chr.id
359 -- BAKUCHIB 2748110 Start
360 AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
361 AND chr.scs_code IN ('LEASE', 'LOAN')
362 AND chr.authoring_org_id = p_achr_rec.org_id
363 -- BAKUCHIB 2748110 End
364 AND cim_ib.object1_id1 = csi.instance_id
365 AND cim_ib.object1_id2 = '#'
366 AND cim_ib.jtot_object1_code = 'OKX_IB_ITEM'
367 -- BAKUCHIB 2781134 start
368 AND upper(nvl(csi.serial_number,'x')) LIKE upper(nvl(p_achr_rec.serial_number,nvl(csi.serial_number,'x'))))
369 -- BAKUCHIB 2781134 end
370 ORDER BY contract_number ASC;
371
372 -- Get the chr_id for asset number and serial number
373 CURSOR get_for_asset_sno_csr(p_achr_rec IN achr_rec_type)
374 IS
375 SELECT chr.id chr_id,
376 chr.contract_number contract_number,
377 chr.start_date from_start_date,
378 chr.end_date from_end_date,
379 stl.code sts_code,
380 stl.meaning sts_meaning,
381 chr.authoring_org_id org_id,
382 hp.party_name party_name
383 FROM okc_statuses_tl stl,
384 hz_parties hp,
385 okc_k_party_roles_b cpl,
386 okc_k_headers_b chr
387 -- BAKUCHIB 2781134 start
388 WHERE upper(chr.contract_number) LIKE upper(nvl(p_achr_rec.contract_number,chr.contract_number))
389 -- BAKUCHIB 2781134 end
390 -- BAKUCHIB 2748110 Start
391 AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
392 AND chr.scs_code IN ('LEASE', 'LOAN')
393 AND chr.authoring_org_id = p_achr_rec.org_id
394 -- BAKUCHIB 2748110 End
395 -- BAKUCHIB 2781134 start
396 -- BAKUCHIB 2807201 start
397 AND nvl(chr.start_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_start_date,nvl(chr.start_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_start_date,nvl(chr.start_date,to_date('1111','yyyy')))
398 AND nvl(chr.end_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_end_date,nvl(chr.end_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_end_date,nvl(chr.end_date,to_date('1111','yyyy')))
399 -- BAKUCHIB 2807201 end
400 -- BAKUCHIB 2781134 end
401 AND chr.id = cpl.dnz_chr_id
402 AND cpl.chr_id = cpl.dnz_chr_id
403 AND cpl.object1_id1 = hp.party_id
404 AND cpl.object1_id2 = '#'
405 AND cpl.jtot_object1_code = 'OKX_PARTY'
406 AND cpl.rle_code = 'LESSEE'
407 AND cpl.cle_id IS NULL
408 -- BAKUCHIB 2781134 start
409 AND upper(hp.party_name)LIKE upper(nvl(p_achr_rec.party_name,hp.party_name))
410 -- BAKUCHIB 2781134 end
411 AND hp.party_type IN ( 'PERSON','ORGANIZATION')
412 AND chr.sts_code = stl.code
413 AND stl.LANGUAGE = userenv('LANG')
414 AND chr.id IN (SELECT DISTINCT cle_fin.dnz_chr_id chr_id
415 FROM csi_item_instances csi,
416 okc_k_items cim_ib,
417 okc_line_styles_b lse_ib,
418 okc_k_lines_b cle_ib,
419 okc_line_styles_b lse_inst,
420 okc_k_lines_b cle_inst,
421 okc_line_styles_b lse_fin,
422 okc_k_lines_tl clet_fin,
423 okc_k_lines_b cle_fin,
424 okc_k_headers_b chr
425 WHERE cle_fin.cle_id IS NULL
426 AND cle_fin.chr_id = cle_fin.dnz_chr_id
427 AND cle_fin.dnz_chr_id = chr.id
428 -- BAKUCHIB 2748110 Start
429 AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
430 AND chr.scs_code IN ('LEASE', 'LOAN')
431 AND chr.authoring_org_id = p_achr_rec.org_id
432 -- BAKUCHIB 2748110 End
433 AND cle_fin.id = clet_fin.id
434 AND clet_fin.LANGUAGE = userenv('LANG')
435 AND lse_fin.id = cle_fin.lse_id
436 AND lse_fin.lty_code = 'FREE_FORM1'
437 AND cle_inst.cle_id = cle_fin.id
438 AND cle_inst.dnz_chr_id = cle_fin.dnz_chr_id
439 AND cle_inst.lse_id = lse_inst.id
440 AND lse_inst.lty_code = 'FREE_FORM2'
441 AND cle_ib.cle_id = cle_inst.id
442 AND cle_ib.dnz_chr_id = cle_fin.dnz_chr_id
443 AND cle_ib.lse_id = lse_ib.id
444 AND lse_ib.lty_code = 'INST_ITEM'
445 AND cim_ib.cle_id = cle_ib.id
446 AND cim_ib.dnz_chr_id = cle_ib.dnz_chr_id
447 AND cim_ib.object1_id1 = csi.instance_id
448 AND cim_ib.object1_id2 = '#'
449 AND cim_ib.jtot_object1_code = 'OKX_IB_ITEM'
450 -- BAKUCHIB 2781134 start
451 AND upper(nvl(csi.serial_number,'x')) LIKE upper(nvl(p_achr_rec.serial_number,nvl(csi.serial_number,'x')))
452 AND upper(nvl(clet_fin.name,'x')) LIKE upper(nvl(p_achr_rec.asset_number,nvl(clet_fin.name,'x'))))
453 -- BAKUCHIB 2781134 end
454 ORDER BY contract_number ASC;
455 -- For debug logging
456 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'advance_contract_search';
457 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
458 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
459 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
460 BEGIN
461
462 IF (is_debug_procedure_on) THEN
463 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
464 END IF;
465 IF (is_debug_statement_on) THEN
466 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.asset_number :'||p_achr_rec.asset_number);
467 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.serial_number :'||p_achr_rec.serial_number);
468 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.chr_id :'||p_achr_rec.chr_id);
469 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.contract_number:'||p_achr_rec.contract_number );
470 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.from_start_date:'||p_achr_rec.from_start_date );
471 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.to_start_date :'||p_achr_rec.to_start_date );
472 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.from_end_date :'||p_achr_rec.from_end_date );
473 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.to_end_date :'||p_achr_rec.to_end_date );
474 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.sts_code :'||p_achr_rec.sts_code );
475 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.sts_meaning :'||p_achr_rec.sts_meaning );
476 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.org_id :'||p_achr_rec.org_id );
477 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.party_name :'||p_achr_rec.party_name );
478
479 END IF;
480
481
482
483 x_return_status := OKL_API.G_RET_STS_SUCCESS;
484 x_return_status := OKL_API.START_ACTIVITY(l_api_name,
485 G_PKG_NAME,
486 p_init_msg_list,
487 l_api_version,
488 p_api_version,
489 '_PVT',
490 x_return_status);
491 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
492 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
493 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
494 RAISE OKL_API.G_EXCEPTION_ERROR;
495 END IF;
496 -- BAKUCHIB 2748110 Start
497 -- Setting the org_id if the input org_id is null
498 IF (l_achr_rec.org_id IS NULL OR
499 l_achr_rec.org_id = OKL_API.G_MISS_NUM) THEN
500 l_achr_rec.org_id := MO_GLOBAL.GET_CURRENT_ORG_ID();
501 END IF;
502 -- BAKUCHIB 2748110 End
503 -- If the asset number and serial number when not given.
504 IF (l_achr_rec.asset_number = OKL_API.G_MISS_CHAR OR
505 l_achr_rec.asset_number IS NULL) AND
506 (l_achr_rec.serial_number = OKL_API.G_MISS_CHAR OR
507 l_achr_rec.serial_number IS NULL) THEN
508 -- Get the contract details
509 FOR r_get_chr_dtls_csr IN get_chr_dtls_csr(p_achr_rec => l_achr_rec) LOOP
510 IF get_chr_dtls_csr%NOTFOUND THEN
511 IF (l_achr_rec.contract_number IS NOT NULL OR
512 l_achr_rec.contract_number <> OKL_API.G_MISS_CHAR) THEN
513 OKL_API.set_message(p_app_name => G_APP_NAME,
514 p_msg_name => G_INVALID_VALUE1,
515 p_token1 => 'COL_NAME',
516 p_token1_value => 'Contract Number');
517 END IF;
518 IF (l_achr_rec.from_start_date IS NOT NULL OR
519 l_achr_rec.from_start_date <> OKL_API.G_MISS_DATE) OR
520 (l_achr_rec.to_start_date IS NOT NULL OR
521 l_achr_rec.to_start_date <> OKL_API.G_MISS_DATE) THEN
522 OKL_API.set_message(p_app_name => G_APP_NAME,
523 p_msg_name => G_INVALID_VALUE1,
524 p_token1 => 'COL_NAME',
525 p_token1_value => 'Start Date');
526 END IF;
527 IF (l_achr_rec.from_end_date IS NOT NULL OR
528 l_achr_rec.from_end_date <> OKL_API.G_MISS_DATE) OR
529 (l_achr_rec.to_end_date IS NOT NULL OR
530 l_achr_rec.to_end_date <> OKL_API.G_MISS_DATE) THEN
531 OKL_API.set_message(p_app_name => G_APP_NAME,
532 p_msg_name => G_INVALID_VALUE1,
533 p_token1 => 'COL_NAME',
534 p_token1_value => 'End Date');
535 END IF;
536 IF (l_achr_rec.party_name IS NOT NULL OR
537 l_achr_rec.party_name <> OKL_API.G_MISS_CHAR) THEN
538 OKL_API.set_message(p_app_name => G_APP_NAME,
539 p_msg_name => G_INVALID_VALUE1,
540 p_token1 => 'COL_NAME',
541 p_token1_value => 'Party Name');
542 END IF;
543 x_return_status := OKL_API.G_RET_STS_ERROR;
544 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
545 END IF;
546 x_achr_tbl(i).contract_number := r_get_chr_dtls_csr.contract_number;
547 x_achr_tbl(i).chr_id := r_get_chr_dtls_csr.chr_id;
548 x_achr_tbl(i).from_start_date := r_get_chr_dtls_csr.from_start_date;
549 x_achr_tbl(i).from_end_date := r_get_chr_dtls_csr.from_end_Date;
550 x_achr_tbl(i).sts_code := r_get_chr_dtls_csr.sts_code;
551 x_achr_tbl(i).sts_meaning := r_get_chr_dtls_csr.sts_meaning;
552 x_achr_tbl(i).org_id := r_get_chr_dtls_csr.org_id;
553 x_achr_tbl(i).party_name := r_get_chr_dtls_csr.party_name;
554 i := i + 1;
555 END LOOP;
556 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
557 RAISE OKL_API.G_EXCEPTION_ERROR;
558 END IF;
559 -- If the asset number given and serial number when not given.
560 ELSIF (l_achr_rec.asset_number <> OKL_API.G_MISS_CHAR OR
561 l_achr_rec.asset_number IS NOT NULL) AND
562 (l_achr_rec.serial_number = OKL_API.G_MISS_CHAR OR
563 l_achr_rec.serial_number IS NULL) THEN
564 -- Get the contract details for asset number
565 FOR r_get_for_asset_csr IN get_for_asset_csr(p_achr_rec => l_achr_rec) LOOP
566 IF get_for_asset_csr%NOTFOUND THEN
567 OKL_API.set_message(p_app_name => G_APP_NAME,
568 p_msg_name => G_INVALID_VALUE1,
569 p_token1 => 'COL_NAME',
570 p_token1_value => 'Asset Number');
571 x_return_status := OKL_API.G_RET_STS_ERROR;
572 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
573 END IF;
574 x_achr_tbl(i).contract_number := r_get_for_asset_csr.contract_number;
575 x_achr_tbl(i).chr_id := r_get_for_asset_csr.chr_id;
576 x_achr_tbl(i).from_start_date := r_get_for_asset_csr.from_start_date;
577 x_achr_tbl(i).from_end_date := r_get_for_asset_csr.from_end_Date;
578 x_achr_tbl(i).sts_code := r_get_for_asset_csr.sts_code;
579 x_achr_tbl(i).sts_meaning := r_get_for_asset_csr.sts_meaning;
580 x_achr_tbl(i).org_id := r_get_for_asset_csr.org_id;
581 x_achr_tbl(i).party_name := r_get_for_asset_csr.party_name;
582 i := i + 1;
583 END LOOP;
584 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
585 RAISE OKL_API.G_EXCEPTION_ERROR;
586 END IF;
587 -- If the asset number not given and serial number given.
588 ELSIF (l_achr_rec.asset_number = OKL_API.G_MISS_CHAR OR
589 l_achr_rec.asset_number IS NULL) AND
590 (l_achr_rec.serial_number <> OKL_API.G_MISS_CHAR OR
591 l_achr_rec.serial_number IS NOT NULL) THEN
592 -- Get the contract details for serial number
593 FOR r_get_for_sno_csr IN get_for_sno_csr(p_achr_rec => l_achr_rec) LOOP
594 IF get_for_sno_csr%NOTFOUND THEN
595 OKL_API.set_message(p_app_name => G_APP_NAME,
596 p_msg_name => G_INVALID_VALUE1,
597 p_token1 => 'COL_NAME',
598 p_token1_value => 'Serial Number');
599 x_return_status := OKL_API.G_RET_STS_ERROR;
600 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
601 END IF;
602 x_achr_tbl(i).contract_number := r_get_for_sno_csr.contract_number;
603 x_achr_tbl(i).chr_id := r_get_for_sno_csr.chr_id;
604 x_achr_tbl(i).from_start_date := r_get_for_sno_csr.from_start_date;
605 x_achr_tbl(i).from_end_date := r_get_for_sno_csr.from_end_Date;
606 x_achr_tbl(i).sts_code := r_get_for_sno_csr.sts_code;
607 x_achr_tbl(i).sts_meaning := r_get_for_sno_csr.sts_meaning;
608 x_achr_tbl(i).org_id := r_get_for_sno_csr.org_id;
609 x_achr_tbl(i).party_name := r_get_for_sno_csr.party_name;
610 i := i + 1;
611 END LOOP;
612 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
613 RAISE OKL_API.G_EXCEPTION_ERROR;
614 END IF;
615 -- If the asset number and serial number when given.
616 ELSIF (l_achr_rec.asset_number <> OKL_API.G_MISS_CHAR OR
617 l_achr_rec.asset_number IS NOT NULL) AND
618 (l_achr_rec.serial_number <> OKL_API.G_MISS_CHAR OR
619 l_achr_rec.serial_number IS NOT NULL) THEN
620 -- Get the contract details for asset number and serial number
621 FOR r_get_for_asset_sno_csr IN get_for_asset_sno_csr(p_achr_rec => l_achr_rec) LOOP
622 IF get_for_asset_sno_csr%NOTFOUND THEN
623 OKL_API.set_message(p_app_name => G_APP_NAME,
624 p_msg_name => G_INVALID_VALUE1,
625 p_token1 => 'COL_NAME',
626 p_token1_value => 'Asset Number or Serial Number');
627 x_return_status := OKL_API.G_RET_STS_ERROR;
628 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
629 END IF;
630 x_achr_tbl(i).contract_number := r_get_for_asset_sno_csr.contract_number;
631 x_achr_tbl(i).chr_id := r_get_for_asset_sno_csr.chr_id;
632 x_achr_tbl(i).from_start_date := r_get_for_asset_sno_csr.from_start_date;
633 x_achr_tbl(i).from_end_date := r_get_for_asset_sno_csr.from_end_Date;
634 x_achr_tbl(i).sts_code := r_get_for_asset_sno_csr.sts_code;
635 x_achr_tbl(i).sts_meaning := r_get_for_asset_sno_csr.sts_meaning;
636 x_achr_tbl(i).org_id := r_get_for_asset_sno_csr.org_id;
637 x_achr_tbl(i).party_name := r_get_for_asset_sno_csr.party_name;
638 i := i + 1;
639 END LOOP;
640 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
641 RAISE OKL_API.G_EXCEPTION_ERROR;
642 END IF;
643 END IF;
644 OKL_API.END_ACTIVITY (x_msg_count,
645 x_msg_data );
646
647 IF (is_debug_procedure_on) THEN
648 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,G_MODULE_NAME||'advance_contract_search','End(-)');
649 END IF;
650
651 EXCEPTION
652 WHEN OKL_API.G_EXCEPTION_ERROR THEN
653 IF get_chr_dtls_csr%ISOPEN THEN
654 CLOSE get_chr_dtls_csr;
655 END IF;
656 IF get_for_sno_csr%ISOPEN THEN
657 CLOSE get_for_sno_csr;
658 END IF;
659 IF get_for_asset_csr%ISOPEN THEN
660 CLOSE get_for_asset_csr;
661 END IF;
662 IF get_for_asset_sno_csr%ISOPEN THEN
663 CLOSE get_for_asset_sno_csr;
664 END IF;
665
666 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
667 l_api_name,
668 G_PKG_NAME,
669 'OKL_API.G_RET_STS_ERROR',
670 x_msg_count,
671 x_msg_data,
672 '_PVT');
673
674
675 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
676 IF get_chr_dtls_csr%ISOPEN THEN
677 CLOSE get_chr_dtls_csr;
678 END IF;
679 IF get_for_sno_csr%ISOPEN THEN
680 CLOSE get_for_sno_csr;
681 END IF;
682 IF get_for_asset_csr%ISOPEN THEN
683 CLOSE get_for_asset_csr;
684 END IF;
685 IF get_for_asset_sno_csr%ISOPEN THEN
686 CLOSE get_for_asset_sno_csr;
687 END IF;
688 IF (is_debug_exception_on) THEN
689 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
690 || sqlcode || ' , SQLERRM : ' || sqlerrm);
691 END IF;
692 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
693 l_api_name,
694 G_PKG_NAME,
695 'OKL_API.G_RET_STS_UNEXP_ERROR',
696 x_msg_count,
697 x_msg_data,
698 '_PVT');
699 WHEN OTHERS THEN
700 IF get_chr_dtls_csr%ISOPEN THEN
701 CLOSE get_chr_dtls_csr;
702 END IF;
703 IF get_for_sno_csr%ISOPEN THEN
704 CLOSE get_for_sno_csr;
705 END IF;
706 IF get_for_asset_csr%ISOPEN THEN
707 CLOSE get_for_asset_csr;
708 END IF;
709 IF get_for_asset_sno_csr%ISOPEN THEN
710 CLOSE get_for_asset_sno_csr;
711 END IF;
712 IF (is_debug_exception_on) THEN
713 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
714 || sqlcode || ' , SQLERRM : ' || sqlerrm);
715 END IF;
716 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
717 l_api_name,
718 G_PKG_NAME,
719 'OTHERS',
720 x_msg_count,
721 x_msg_data,
722 '_PVT');
723 END advance_contract_search;
724
725 ------------------------------------------------------------------------
726 -- PROCEDURE set_quote_defaults
727 -- Default the values of parameters if the values are not passed to this API
728 -- This assumption is necessary because this API can either be called from
729 -- a screen or from some other process api
730 -- rmunjulu EDT 3797384 made changes so that Quote Effective To Date is
731 -- properly defaulted
732 ------------------------------------------------------------------------
733 PROCEDURE set_quote_defaults(
734 px_quot_rec IN OUT NOCOPY quot_rec_type,
735 p_rule_chr_id IN NUMBER,
736 p_sys_date IN DATE,
737 x_return_status OUT NOCOPY VARCHAR2) IS
738
739 l_quote_eff_days NUMBER;
740 l_quote_eff_max_days NUMBER;
741 l_quote_status VARCHAR2(200) := 'DRAFTED';
742 l_quote_reason VARCHAR2(200) := 'EOT';
743 l_sys_date DATE;
744 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
745 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_quote_defaults';
746 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
747 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
748 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
749 BEGIN
750 IF (is_debug_procedure_on) THEN
751 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
752 END IF;
753
754 -- Get the sysdate
755 l_sys_date := p_sys_date;
756
757 -- Set the date_effective_from if null
758 IF ((px_quot_rec.date_effective_from IS NULL) OR
759 (px_quot_rec.date_effective_from = OKL_API.G_MISS_DATE)) THEN
760 px_quot_rec.date_effective_from := l_sys_date ;
761 END IF;
762
763 -- Set the date_effective_to if null
764 IF ((px_quot_rec.date_effective_to IS NULL) OR
765 (px_quot_rec.date_effective_to = OKL_API.G_MISS_DATE)) THEN
766
767 IF (is_debug_statement_on) THEN
768 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
769 'before call to quote_effectivity :'||l_return_status);
770 END IF;
771 -- set the date eff to using rules
772 quote_effectivity(
773 p_quot_rec => px_quot_rec,
774 p_rule_chr_id => p_rule_chr_id,
775 x_quote_eff_days => l_quote_eff_days,
776 x_quote_eff_max_days => l_quote_eff_max_days,
777 x_return_status => l_return_status);
778
779 IF (is_debug_statement_on) THEN
780 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
781 'after call to quote_effectivity :'||l_return_status);
782 END IF;
783
784 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
785 --rmunjulu EDT 3797384 removed and replaced with below logic
786 -- px_quot_rec.date_effective_to := px_quot_rec.date_effective_from + l_quote_eff_days;
787
788 -- rmunjulu EDT 3797384 logic for date_effective_to varies for pre and post
789 IF trunc(l_sys_date) > trunc(px_quot_rec.date_effective_from) THEN -- pre dated
790 -- PRE DATED QUOTE: effective_to = date_created + quote_eff_days
791 px_quot_rec.date_effective_to := l_sys_date + l_quote_eff_days;
792 ELSIF trunc(l_sys_date) < trunc(px_quot_rec.date_effective_from) THEN -- post dated
793 -- POST DATED QUOTE: effective_to = eff_from + quote_eff_days
794 px_quot_rec.date_effective_to := px_quot_rec.date_effective_from + l_quote_eff_days;
795 ELSE -- current
796 -- CURRENT DATED QUOTE: effective_to = eff_from + quote_eff_days
797 px_quot_rec.date_effective_to := px_quot_rec.date_effective_from + l_quote_eff_days;
798 END IF;
799
800 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End ++++++++++++++++
801
802 END IF;
803
804 -- Set the qst_code if null
805 IF ((px_quot_rec.qst_code IS NULL) OR
806 (px_quot_rec.qst_code = OKL_API.G_MISS_CHAR)) THEN
807 px_quot_rec.qst_code := l_quote_status;
808 END IF;
809
810 -- Set the qrs_code if null
811 IF ((px_quot_rec.qrs_code IS NULL) OR
812 (px_quot_rec.qrs_code = OKL_API.G_MISS_CHAR)) THEN
813 px_quot_rec.qrs_code := l_quote_reason;
814 END IF;
815
816 -- Set the preproceeds_yn if null
817 IF ((px_quot_rec.preproceeds_yn IS NULL) OR
818 (px_quot_rec.preproceeds_yn = OKL_API.G_MISS_CHAR)) THEN
819 px_quot_rec.preproceeds_yn := G_NO;
820 END IF;
821
822 -- Set the summary_format_yn if null
823 IF ((px_quot_rec.summary_format_yn IS NULL) OR
824 (px_quot_rec.summary_format_yn = OKL_API.G_MISS_CHAR)) THEN
825 px_quot_rec.summary_format_yn := G_NO;
826 END IF;
827
828 -- Set the consolidated_yn if null
829 IF ((px_quot_rec.consolidated_yn IS NULL) OR
830 (px_quot_rec.consolidated_yn = OKL_API.G_MISS_CHAR)) THEN
831 px_quot_rec.consolidated_yn := G_NO;
832 END IF;
833
834 -- Set the approved_yn if null
835 IF ((px_quot_rec.approved_yn IS NULL) OR
836 (px_quot_rec.approved_yn = OKL_API.G_MISS_CHAR)) THEN
837 px_quot_rec.approved_yn := G_NO;
838 END IF;
839
840 -- Set the payment_received_yn if null
841 IF ((px_quot_rec.payment_received_yn IS NULL) OR
842 (px_quot_rec.payment_received_yn = OKL_API.G_MISS_CHAR)) THEN
843 px_quot_rec.payment_received_yn := G_NO;
844 END IF;
845
846 -- Set the date_requested if null
847 IF ((px_quot_rec.date_requested IS NULL) OR
848 (px_quot_rec.date_requested = OKL_API.G_MISS_DATE)) THEN
849 px_quot_rec.date_requested := l_sys_date;
850 END IF;
851
852 -- Set the date_proposal if null
853 IF ((px_quot_rec.date_proposal IS NULL) OR
854 (px_quot_rec.date_proposal = OKL_API.G_MISS_DATE)) THEN
855 px_quot_rec.date_proposal := l_sys_date;
856 END IF;
857
858 -- Set the requested_by if null
859 IF ((px_quot_rec.requested_by IS NULL) OR
860 (px_quot_rec.requested_by = OKL_API.G_MISS_NUM)) THEN
861 px_quot_rec.requested_by := 1;
862 END IF;
863
864 -- Set the legal_entity_id if null ssiruvol(Nov 17th, 2006)
865 IF ((px_quot_rec.legal_entity_id IS NULL) OR
866 (px_quot_rec.legal_entity_id = OKL_API.G_MISS_NUM)) THEN
867 px_quot_rec.legal_entity_id := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id (px_quot_rec.khr_id);
868 END IF;
869
870 -- Always NO during quote creation
871 px_quot_rec.accepted_yn := G_NO;
872
873 -- For now *** -- OKL_QTE_PVT.Validate_Trn_Code() expects a value for trn_code
874 px_quot_rec.trn_code := 'EXP';
875 x_return_status := l_return_status;
876
877 IF (is_debug_procedure_on) THEN
878 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
879 END IF;
880
881 EXCEPTION
882 WHEN OTHERS THEN
883
884 IF (is_debug_exception_on) THEN
885 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
886 || sqlcode || ' , SQLERRM : ' || sqlerrm);
887 END IF;
888
889 OKL_API.set_message(p_app_name => g_app_name,
890 p_msg_name => g_unexpected_error,
891 p_token1 => g_sqlcode_token,
892 p_token1_value => sqlcode,
893 p_token2 => g_sqlerrm_token,
894 p_token2_value => sqlerrm);
895 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
896 END set_quote_defaults;
897
898
899
900
901 -- Start of comments
902 --
903 -- Procedure Name : early_termination_allowed
904 -- Description : Gets early termination of contract rule
905 -- Business Rules :
906 -- Parameters : quote rec, contract id, return status, rule found
907 -- Version : 1.0
908 -- History : RDRAGUIL 11-MAR-01 - changed from AMTQPR to AMTPAR rule group
909 -- RMUNJULU 11-DEC-02 - Bug # 2484327 Send FALSE to rule api
910 -- for p_message_yn
911 -- End of comments
912 PROCEDURE early_termination_allowed(
913 p_quot_rec IN quot_rec_type,
914 p_rule_chr_id IN NUMBER,
915 x_return_status OUT NOCOPY VARCHAR2,
916 x_rule_found OUT NOCOPY BOOLEAN) IS
917
918 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
919 l_rule_found BOOLEAN := FALSE;
920 l_rulv_rec rulv_rec_type;
921 l_rule_code CONSTANT VARCHAR2(30) := 'AMCTTA';
922 l_rgd_code VARCHAR2(30);
923
924 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'early_termination_allowed';
925 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
926 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
927 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
928 BEGIN
929
930 IF (is_debug_procedure_on) THEN
931 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
932 END IF;
933
934 IF (is_debug_statement_on) THEN
935 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_rule_chr_id : '||p_rule_chr_id );
936 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.id : '||p_quot_rec.id );
937 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qrs_code : '||p_quot_rec.qrs_code );
938 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qst_code : '||p_quot_rec.qst_code );
939 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_qte_id : '||p_quot_rec.consolidated_qte_id );
940 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.khr_id : '||p_quot_rec.khr_id );
941 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.art_id : '||p_quot_rec.art_id );
942 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qtp_code : '||p_quot_rec.qtp_code );
943 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.trn_code : '||p_quot_rec.trn_code );
944 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.pdt_id : '||p_quot_rec.pdt_id );
945 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_from : '||p_quot_rec.date_effective_from );
946 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.quote_number : '||p_quot_rec.quote_number );
947 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.early_termination_yn : '||p_quot_rec.early_termination_yn );
948 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.approved_yn : '||p_quot_rec.approved_yn );
949 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.accepted_yn : '||p_quot_rec.accepted_yn );
950 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.org_id : '||p_quot_rec.org_id );
951 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.legal_entity_id : '||p_quot_rec.legal_entity_id );
952 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.repo_quote_indicator_yn : '||p_quot_rec.repo_quote_indicator_yn );
953
954 END IF;
955
956 IF p_quot_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
957 l_rgd_code := 'AVTQPR';
958 ELSE
959 l_rgd_code := 'AMTQPR';
960 END IF;
961
962 IF (is_debug_statement_on) THEN
963 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
964 'before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
965 END IF;
966
967
968 OKL_AM_UTIL_PVT.get_rule_record(
969 p_rgd_code => l_rgd_code,
970 p_rdf_code => l_rule_code,
971 p_chr_id => p_rule_chr_id,
972 p_cle_id => NULL,
973 x_rulv_rec => l_rulv_rec,
974 x_return_status => l_return_status,
975 p_message_yn => FALSE); -- RMUNJULU 11-DEC-02 2484327 Send FALSE to rule api
976
977 IF (is_debug_statement_on) THEN
978 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
979 'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
980 END IF;
981
982
983 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
984 IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
985 l_rule_found := TRUE;
986 END IF;
987 END IF;
988
989 x_return_status := OKL_API.G_RET_STS_SUCCESS; -- Rule is optional
990 x_rule_found := l_rule_found;
991
992 IF (is_debug_procedure_on) THEN
993 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
994 END IF;
995
996 EXCEPTION
997 WHEN OKL_API.G_EXCEPTION_ERROR THEN
998 x_return_status := OKL_API.G_RET_STS_ERROR;
999 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1000 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1001 WHEN OTHERS THEN
1002 IF (is_debug_exception_on) THEN
1003 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1004 || sqlcode || ' , SQLERRM : ' || sqlerrm);
1005 END IF;
1006
1007 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1008 OKL_API.set_message(p_app_name => g_app_name,
1009 p_msg_name => g_unexpected_error,
1010 p_token1 => g_sqlcode_token,
1011 p_token1_value => sqlcode,
1012 p_token2 => g_sqlerrm_token,
1013 p_token2_value => sqlerrm);
1014 END early_termination_allowed;
1015
1016
1017
1018
1019
1020 -- Start of comments
1021 --
1022 -- Procedure Name : partial_termination_allowed
1023 -- Description : Gets partial termination of contract rule
1024 -- Business Rules :
1025 -- Parameters : quote rec, contract id, return status, rule found
1026 -- Version : 1.0
1027 -- History : RDRAGUIL 11-MAR-01 - changed from AMTQPR to AMTPAR rule group
1028 -- RMUNJULU 11-DEC-02 - Bug # 2484327 Send FALSE to rule api
1029 -- for p_message_yn
1030 -- End of comments
1031 PROCEDURE partial_termination_allowed(
1032 p_quot_rec IN quot_rec_type,
1033 p_rule_chr_id IN NUMBER,
1034 x_return_status OUT NOCOPY VARCHAR2,
1035 x_rule_found OUT NOCOPY BOOLEAN) IS
1036
1037 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1038 l_rule_found BOOLEAN := FALSE;
1039 l_rulv_rec rulv_rec_type;
1040 l_rule_code CONSTANT VARCHAR2(30) := 'AMPTQA';
1041 l_rgd_code VARCHAR2(30);
1042 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'partial_termination_allowed';
1043 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1044 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1045 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1046 BEGIN
1047
1048 IF (is_debug_procedure_on) THEN
1049 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1050
1051 END IF;
1052
1053 IF (is_debug_statement_on) THEN
1054 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_rule_chr_id : '||p_rule_chr_id );
1055 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.id : '||p_quot_rec.id );
1056 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qrs_code : '||p_quot_rec.qrs_code );
1057 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qst_code : '||p_quot_rec.qst_code );
1058 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_qte_id : '||p_quot_rec.consolidated_qte_id );
1059 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.khr_id : '||p_quot_rec.khr_id );
1060 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.art_id : '||p_quot_rec.art_id );
1061 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qtp_code : '||p_quot_rec.qtp_code );
1062 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.trn_code : '||p_quot_rec.trn_code );
1063 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.pdt_id : '||p_quot_rec.pdt_id );
1064 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_from : '||p_quot_rec.date_effective_from );
1065 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.quote_number : '||p_quot_rec.quote_number );
1066 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.partial_yn : '||p_quot_rec.partial_yn );
1067 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.approved_yn : '||p_quot_rec.approved_yn );
1068 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.accepted_yn : '||p_quot_rec.accepted_yn );
1069 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.org_id : '||p_quot_rec.org_id );
1070 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.legal_entity_id : '||p_quot_rec.legal_entity_id );
1071 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.repo_quote_indicator_yn : '||p_quot_rec.repo_quote_indicator_yn );
1072
1073 END IF;
1074
1075 IF p_quot_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
1076 l_rgd_code := 'AVTPAR';
1077 ELSE
1078 l_rgd_code := 'AMTPAR';
1079 END IF;
1080
1081 IF (is_debug_statement_on) THEN
1082 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1083 'before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1084 END IF;
1085
1086 OKL_AM_UTIL_PVT.get_rule_record(
1087 p_rgd_code => l_rgd_code,
1088 p_rdf_code => l_rule_code,
1089 p_chr_id => p_rule_chr_id,
1090 p_cle_id => NULL,
1091 x_rulv_rec => l_rulv_rec,
1092 x_return_status => l_return_status,
1093 p_message_yn => FALSE); -- RMUNJULU 11-DEC-02 2484327 Send FALSE to rule api
1094
1095 IF (is_debug_statement_on) THEN
1096 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1097 'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1098 END IF;
1099
1100 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
1101 IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
1102 l_rule_found := TRUE;
1103 END IF;
1104 END IF;
1105
1106 x_return_status := OKL_API.G_RET_STS_SUCCESS; -- Rule is optional
1107 x_rule_found := l_rule_found;
1108
1109 IF (is_debug_procedure_on) THEN
1110 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End (-)');
1111 END IF;
1112
1113 EXCEPTION
1114 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1115 x_return_status := OKL_API.G_RET_STS_ERROR;
1116 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1117 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1118 WHEN OTHERS THEN
1119 IF (is_debug_exception_on) THEN
1120 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1121 || sqlcode || ' , SQLERRM : ' || sqlerrm);
1122 END IF;
1123
1124 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1125 OKL_API.set_message(p_app_name => g_app_name,
1126 p_msg_name => g_unexpected_error,
1127 p_token1 => g_sqlcode_token,
1128 p_token1_value => sqlcode,
1129 p_token2 => g_sqlerrm_token,
1130 p_token2_value => sqlerrm);
1131 END partial_termination_allowed;
1132
1133 ------------------------------------------------------------------------
1134 -- PROCEDURE term_status
1135 -- gets the days before contract expiration
1136 ------------------------------------------------------------------------
1137 PROCEDURE term_status(
1138 p_quot_rec IN quot_rec_type,
1139 p_rule_chr_id IN NUMBER,
1140 x_days_before_k_exp OUT NOCOPY NUMBER,
1141 x_return_status OUT NOCOPY VARCHAR2) IS
1142
1143 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1144 l_rule_found BOOLEAN := FALSE;
1145 l_rulv_rec rulv_rec_type;
1146 l_rule_code CONSTANT VARCHAR2(30) := 'AMTSET';
1147 l_rgd_code VARCHAR2(30);
1148 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'term_status.';
1149 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1150 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1151 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1152 BEGIN
1153 IF (is_debug_procedure_on) THEN
1154 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1155 END IF;
1156
1157 IF p_quot_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
1158 l_rgd_code := 'AVTQPR';
1159 ELSE
1160 l_rgd_code := 'AMTQPR';
1161 END IF;
1162
1163 IF (is_debug_statement_on) THEN
1164 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1165 'before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1166 END IF;
1167
1168 OKL_AM_UTIL_PVT.get_rule_record(
1169 p_rgd_code => l_rgd_code,
1170 p_rdf_code => l_rule_code,
1171 p_chr_id => p_rule_chr_id,
1172 p_cle_id => NULL,
1173 x_rulv_rec => l_rulv_rec,
1174 x_return_status => l_return_status,
1175 p_message_yn => TRUE);
1176
1177 IF (is_debug_statement_on) THEN
1178 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1179 'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1180 END IF;
1181
1182 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
1183 IF NVL (l_rulv_rec.rule_information1, '-1') >= 0 THEN
1184 l_rule_found := TRUE;
1185 END IF;
1186 END IF;
1187
1188 IF l_rule_found THEN
1189 x_days_before_k_exp := l_rulv_rec.RULE_INFORMATION1;
1190 END IF;
1191
1192 x_return_status := l_return_status;
1193
1194 IF (is_debug_procedure_on) THEN
1195 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1196 END IF;
1197
1198 EXCEPTION
1199 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1200 x_return_status := OKL_API.G_RET_STS_ERROR;
1201 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1202 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1203 WHEN OTHERS THEN
1204
1205 IF (is_debug_exception_on) THEN
1206 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1207 || sqlcode || ' , SQLERRM : ' || sqlerrm);
1208 END IF;
1209 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1210 OKL_API.set_message(p_app_name => g_app_name,
1211 p_msg_name => g_unexpected_error,
1212 p_token1 => g_sqlcode_token,
1213 p_token1_value => sqlcode,
1214 p_token2 => g_sqlerrm_token,
1215 p_token2_value => sqlerrm);
1216 END term_status;
1217
1218
1219
1220 -- Start of comments
1221 --
1222 -- Procedure Name : quote_effectivity
1223 -- Description : gets the quote effective dates
1224 -- Business Rules :
1225 -- Parameters : quote header, contract id
1226 -- Version : 1.0
1227 -- History : SECHAWLA 25-NOV-02 - Bug 2680542 : Removed DEFAULT
1228 -- from procedure parameters.
1229 -- End of comments
1230 PROCEDURE quote_effectivity(
1231 p_quot_rec IN quot_rec_type,
1232 p_rule_chr_id IN NUMBER,
1233 x_quote_eff_days OUT NOCOPY NUMBER,
1234 x_quote_eff_max_days OUT NOCOPY NUMBER,
1235 x_return_status OUT NOCOPY VARCHAR2) IS
1236
1237 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1238 l_rule_found BOOLEAN := FALSE;
1239 l_rulv_rec rulv_rec_type;
1240 l_rule_code CONSTANT VARCHAR2(30) := 'AMQTEF';
1241 l_rgd_code VARCHAR2(30);
1242 l_rule_chr_id NUMBER;
1243 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'quote_effectivity';
1244 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1245 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1246 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1247 BEGIN
1248 IF (is_debug_procedure_on) THEN
1249 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1250 END IF;
1251
1252 IF p_quot_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
1253 l_rgd_code := 'AVTQPR';
1254 ELSE
1255 l_rgd_code := 'AMTQPR';
1256 END IF;
1257
1258 IF p_rule_chr_id IS NOT NULL
1259 OR p_rule_chr_id <> OKL_API.G_MISS_NUM THEN
1260 l_rule_chr_id := p_rule_chr_id;
1261 ELSE
1262 l_rule_chr_id := okl_am_util_pvt.get_rule_chr_id (p_quot_rec);
1263 END IF;
1264
1265 IF (is_debug_statement_on) THEN
1266 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1267 'Before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1268 END IF;
1269 OKL_AM_UTIL_PVT.get_rule_record(
1270 p_rgd_code => l_rgd_code,
1271 p_rdf_code => l_rule_code,
1272 p_chr_id => l_rule_chr_id,
1273 p_cle_id => NULL,
1274 x_rulv_rec => l_rulv_rec,
1275 x_return_status => l_return_status,
1276 p_message_yn => TRUE);
1277
1278 IF (is_debug_statement_on) THEN
1279 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1280 'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1281 END IF;
1282
1283 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
1284 IF NVL (l_rulv_rec.rule_information1, '-1') >= 0 THEN
1285 l_rule_found := TRUE;
1286 END IF;
1287 END IF;
1288
1289 IF l_rule_found THEN
1290 x_quote_eff_days := l_rulv_rec.RULE_INFORMATION1;
1291 x_quote_eff_max_days := l_rulv_rec.RULE_INFORMATION2;
1292 END IF;
1293
1294 x_return_status := l_return_status;
1295
1296 IF (is_debug_procedure_on) THEN
1297 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1298 END IF;
1299
1300 EXCEPTION
1301 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1302 x_return_status := OKL_API.G_RET_STS_ERROR;
1303 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1304 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1305 WHEN OTHERS THEN
1306
1307 IF (is_debug_exception_on) THEN
1308 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1309 || sqlcode || ' , SQLERRM : ' || sqlerrm);
1310 END IF;
1311 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1312 OKL_API.set_message(p_app_name => g_app_name,
1313 p_msg_name => g_unexpected_error,
1314 p_token1 => g_sqlcode_token,
1315 p_token1_value => sqlcode,
1316 p_token2 => g_sqlerrm_token,
1317 p_token2_value => sqlerrm);
1318 END quote_effectivity;
1319
1320
1321
1322 -- Start of comments
1323 --
1324 -- Procedure Name : quote_type_check
1325 -- Description : checks the quote type
1326 -- Business Rules :
1327 -- Parameters : quote type code (input), flag indicating whether the
1328 -- quote type changed from auto to manual
1329 -- Version : 1.0
1330 -- History : SECHAWLA 06-DEC-02 - Bug 2699412
1331 -- Added logic to change the quote type from Auto to Manual,
1332 -- if the request was to create an Auto Quote,
1333 -- but Auto quotes are not allowed
1334 -- SECHAWLA 02-JAN-03 - Bug 2699412
1335 -- Added code to evaluate new rule to check if auto quotes are allowed
1336 -- End of comments
1337 PROCEDURE quote_type_check(
1338 p_qtp_code IN OUT NOCOPY VARCHAR2, --SECHAWLA 2699412 changed from IN to IN OUT
1339 p_khr_id IN NUMBER,
1340 x_auto_to_manual OUT NOCOPY BOOLEAN, -- SECHAWLA 2699412 added
1341 x_return_status OUT NOCOPY VARCHAR2) IS
1342
1343 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1344
1345 l_new_quote_type VARCHAR2(30); --SECHAWLA 2699412 added
1346 l_auto_to_manual BOOLEAN := FALSE; --SECHAWLA 2699412 added
1347
1348 -- SECHAWLA 02-JAN-03 2699412 new declarations
1349 l_auto_quotes_allowed VARCHAR2(1);
1350 l_rulv_rec okl_rule_pub.rulv_rec_type;
1351 l_msg_count NUMBER := OKL_API.G_MISS_NUM;
1352 l_msg_data VARCHAR2(2000);
1353 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'quote_type_check';
1354 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1355 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1356 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1357 BEGIN
1358 IF (is_debug_procedure_on) THEN
1359 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1360 END IF;
1361
1362 IF (p_qtp_code IS NOT NULL) AND (p_qtp_code LIKE 'TER%') THEN
1363
1364 IF p_qtp_code NOT LIKE 'TER_MAN%' THEN -- auto quotes
1365
1366 --SECHAWLA Bug # 2699412 : Added the following code to change the quote
1367 -- type from Auto to Manual, if Auto quotes are not allowed
1368
1369 --SECHAWLA Bug # 2699412 02-JAN-03 Added the following code to check if auto quoets are allowed
1370
1371 IF (is_debug_statement_on) THEN
1372 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1373 'before call to okl_am_util_pvt.get_rule_record :'||l_return_status);
1374 END IF;
1375 --Check if auto quotes are allowed
1376 okl_am_util_pvt.get_rule_record( p_rgd_code => 'AMTQPR'
1377 ,p_rdf_code => 'AMCMTQ'
1378 ,p_chr_id => p_khr_id
1379 ,p_cle_id => NULL
1380 ,p_message_yn => FALSE
1381 ,x_rulv_rec => l_rulv_rec -- hold a rule instance from okc_rules_b
1382 ,x_return_status => l_return_status
1383 ,x_msg_count => l_msg_count
1384 ,x_msg_data => l_msg_data);
1385
1386 IF (is_debug_statement_on) THEN
1387 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1388 'after call to okl_am_util_pvt.get_rule_record :'||l_return_status);
1389 END IF;
1390
1391 IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
1392 -- Rule instance is found
1393 IF l_rulv_rec.rule_information1 IS NOT NULL AND l_rulv_rec.rule_information1 <> OKL_API.G_MISS_CHAR THEN
1394 IF l_rulv_rec.rule_information1 = 'Y' THEN
1395 l_auto_quotes_allowed := 'N';
1396 ELSE
1397 l_auto_quotes_allowed := 'Y';
1398 END IF;
1399 ELSE
1400 l_auto_quotes_allowed := 'Y';
1401 END IF;
1402 ELSE
1403 l_auto_quotes_allowed := 'Y';
1404 END IF;
1405
1406
1407 IF l_auto_quotes_allowed = 'N' THEN
1408 IF p_qtp_code IN ('TER_PURCHASE', 'TER_RECOURSE','TER_ROLL_PURCHASE') THEN
1409 l_new_quote_type := 'TER_MAN_PURCHASE';
1410 ELSE
1411 l_new_quote_type := 'TER_MAN_WO_PURCHASE';
1412 END IF;
1413 l_auto_to_manual := TRUE;
1414 p_qtp_code := l_new_quote_type;
1415 END IF;
1416
1417 END IF;
1418 l_return_status := OKL_API.G_RET_STS_SUCCESS;
1419 END IF;
1420 -- SECHAWLA 2699412 : Added a flag to indicate whether quote type changed
1421 -- from Auto to Manual
1422 x_auto_to_manual := l_auto_to_manual;
1423 x_return_status := l_return_status;
1424
1425 IF (is_debug_procedure_on) THEN
1426 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(+)');
1427 END IF;
1428
1429 END quote_type_check;
1430
1431
1432
1433
1434 -- PROCEDURE validate_quote
1435 -- checks the validity of the quote
1436 -- History: RDRAGUIL 11-MAR-01 - added No Assets validation
1437 -- RMUNJULU 11-APR-02 - Added call to Validate_Contract, removed
1438 -- check_contract_active_yn call
1439 -- SECHAWLA 25-NOV-02 - Bug # 2680542
1440 -- 1) Changed p_assn_tbl parameter type from IN to IN OUT
1441 -- 2) Added an out parameter x_partial_asset_line
1442 -- to the procedure to indicate to the calling
1443 -- procedure if the quote includes a partial asset line.
1444 -- 3) Moved all the line level validations towards the
1445 -- end of the procedure, after contarct level validations.
1446 -- 4) Added cursor l_clines_csr to validate the asset id
1447 -- and check if asset asset belongs to the passed contract.
1448 -- 5) Added cursor l_linesfull_csr to populate asset number
1449 -- if it is null
1450 -- 6) Added validations for asset quantity and quote quantity
1451
1452 -- SECHAWLA 06-DEC-02 - Bug # 2699412
1453 -- 1) Removed validation to check that already accepetd
1454 -- quote exists for contract
1455 -- 2) Added a new validation to check if an already
1456 -- accepted quote exists for contract line
1457 -- 3) Modified logic to check the quote type
1458 -- 4) Check for early and partial terminations only for
1459 -- Auto quotes
1460 -- 5) Added a new parameter p_days_before_k_exp,
1461 -- used to check if it is early termination
1462 -- RMUNJULU 11-DEC-02 - Bug # 2484327 --
1463 -- Added code to check for accepted quote based
1464 -- on asset level termination changes
1465 -- RMUNJULU 06-JAN-03 2736865 Date Eff From is now enterable changes
1466 -- SECHAWLA 17-FEB-03 Bug 2804703 : Added a validation to restrict the
1467 -- creation of quote with partial asset line(s)
1468 -- for an evergreen contract
1469 -- SECHAWLA 18-FEB-03 Bug # 2807201 : Moved the quote_type_check procedure call from this
1470 -- procedure to create_termination_quote procedure. Removed x_new_quote_type and
1471 -- x_auto_to_manual parameters
1472 -- SECHAWLA 28-FEB-03 Bug # 2757175 : Moved the validate contract validation from this procedure
1473 -- to create_termination_quote procedure
1474 -- RMUNJULU 14-MAR-03 2854796 Error if quote qty less than equal to 0
1475 -- RMUNJULU 09-APR-03 2897523 Added code to check if OKS line exists for the asset
1476 -- RMUNJULU 10-APR-03 2900178 Changed cursor l_oks_lines_csr
1477 -- RMUNJULU 02-OCT-03 2757312 Added code to check for New Asset Number uniqueness
1478 -- RMUNJULU 3241502 Changed token value
1479 -- rmunjulu EDT 3797384 changed the check for early termination, check using eff_from_date
1480 -- rmunjulu EDAT Added code to check for prior dated qte not before k start date and for
1481 -- evergreen contract not before k end date
1482 -- Removed check for only sysdated and future dated quotes, as prior are now allowed
1483 -- rmunjulu EDAT Added code to check for FA transactions and fiscal year for prior dated terms
1484 -- rmunjulu PPD Added code to check for PPD transaction after quote eff date for prior dated quotes
1485 -- rmunjulu EDAT 17-Jan-2005 Raise proper exception
1486 -- rmunjulu Bug 4143251 Modified Check for PPD -- check for all quotes
1487 -- Added check for BOOKED contract and Partial Quote with Quote Eff From Date after contract end date
1488 -- Modified check for FA checks to check for PIOR and CURRENT quotes
1489 -- PAGARG Bug 4299668 Move the cursor execution (to check whether
1490 -- there is any OKS line attached to asset) inside
1491 -- l_partial_asset_line check as OKS line needs to be checked
1492 -- only in case of partial line termination
1493 -- rmunjulu LOANS_ENHANCEMENTS Termination with purchase not allowed for loans
1494 -- Partial Line Termination not allowed for loans with actual/estimated actual
1495 -- rmunjulu LOANS_ENHANCEMENTS -- Check interest calculation done
1496 -- SECHAWLA 04-JAN-06 4915133 - partial quote (full and partial line) should not be allowed
1497 -- for a loan contract with rev rec method 'ESTIMATED_AND_BILLED' or 'ACTUAL'
1498 -- rpillay 01-JUN-12 Bug# 14137617: Partial Termination is not allowed for Catchup-Cleanup Loan contract
1499 PROCEDURE validate_quote(
1500 p_api_version IN NUMBER,
1501 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1502 x_return_status OUT NOCOPY VARCHAR2,
1503 x_msg_count OUT NOCOPY NUMBER,
1504 x_msg_data OUT NOCOPY VARCHAR2,
1505 p_quot_rec IN quot_rec_type,
1506 p_assn_tbl IN OUT NOCOPY assn_tbl_type, -- SECHAWLA 2680542 Changed from IN to IN OUT
1507 p_k_end_date IN DATE,
1508 p_no_of_assets IN NUMBER,
1509 p_sys_date IN DATE,
1510 p_rule_chr_id IN NUMBER,
1511 p_days_before_k_exp IN NUMBER, --SECHAWLA Bug # 2699412 -added
1512 x_partial_asset_line OUT NOCOPY BOOLEAN
1513
1514 ) IS
1515
1516 -- SECHAWLA 17-FEB-03 Bug 2804703 : replaced the usage of okl_k_headers_full_v
1517 -- with okc_k_keaders_b, added sts_code.
1518 -- Cursor to get the khr details for the k passed
1519 CURSOR k_details_for_qte_csr (p_khr_id IN NUMBER) IS
1520 SELECT K.contract_number, K.sts_code, K.start_date, K.end_date -- rmunjulu EDAT
1521 FROM OKC_K_HEADERS_B K
1522 WHERE K.id = p_khr_id;
1523
1524
1525 -- Cursor to get the quote details of a quote that is already accepted for
1526 -- the same contract for which this quote is being generated.
1527 CURSOR get_accepted_qte_details_csr( p_khr_id IN NUMBER) IS
1528 SELECT Q.quote_number, Q.qtp_code
1529 FROM OKL_TRX_QUOTES_B Q
1530 WHERE Q.khr_id = p_khr_id
1531 AND Q.accepted_yn = 'Y';
1532
1533 -- This cursor is used to check if a particular asset belongs to a particular contract.
1534 -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Changed cursor to also check for
1535 -- sts_code of line match with sts_code of contract
1536 CURSOR l_clines_csr (p_kle_id NUMBER ) IS
1537 SELECT KLE.chr_id, KLE.start_date -- rmunjulu EDAT
1538 FROM OKC_K_LINES_B KLE,
1539 OKC_K_HEADERS_B KHR
1540 WHERE KLE.id = p_kle_id
1541 AND KLE.chr_id = KHR.id
1542 AND KLE.sts_code = KHR.sts_code;
1543
1544
1545 -- This cursor is used to get the asset number
1546 CURSOR l_linesfull_csr(p_id NUMBER) IS
1547 SELECT name
1548 FROM okl_k_lines_full_v
1549 WHERE id = p_id;
1550
1551
1552 -- RMUNJULU 09-APR-03 2897523 Get the OKS lines if any linked to this covered asset
1553 -- RMUNJULU 10-APR-03 2900178 Changed the query from SELECT 1 to SELECT '1',
1554 -- and removed TO_CHAR conversion to krel.object1_id1
1555 CURSOR l_oks_lines_csr ( p_kle_id IN NUMBER) IS
1556 SELECT '1'
1557 FROM dual WHERE EXISTS (
1558 SELECT '1'
1559 FROM okc_k_headers_b oks_chrb,
1560 okc_line_styles_b oks_cov_pd_lse,
1561 okc_k_lines_b oks_cov_pd_cleb,
1562 okc_k_rel_objs krel,
1563 okc_line_styles_b lnk_srv_lse,
1564 okc_statuses_b lnk_srv_sts,
1565 okc_k_lines_b lnk_srv_cleb,
1566 okc_k_items lnk_srv_cim
1567 WHERE oks_chrb.scs_code = 'SERVICE'
1568 AND oks_chrb.id = oks_cov_pd_cleb.dnz_chr_id
1569 AND oks_cov_pd_cleb.lse_id = oks_cov_pd_lse.id
1570 AND oks_cov_pd_lse.lty_code = 'COVER_PROD'
1571 AND '#' = krel.object1_id2
1572 AND oks_cov_pd_cleb.id = krel.object1_id1
1573 AND krel.rty_code = 'OKLSRV'
1574 AND krel.chr_id = lnk_srv_cleb.dnz_chr_id
1575 AND krel.cle_id = lnk_srv_cleb.id
1576 AND lnk_srv_cleb.lse_id = lnk_srv_lse.id
1577 AND lnk_srv_lse.lty_code = 'LINK_SERV_ASSET'
1578 AND lnk_srv_cleb.sts_code = lnk_srv_sts.code
1579 AND lnk_srv_sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
1580 AND lnk_srv_cleb.dnz_chr_id = lnk_srv_cim.dnz_chr_id
1581 AND lnk_srv_cleb.id = lnk_srv_cim.cle_id
1582 AND lnk_srv_cim.jtot_object1_code = 'OKX_COVASST'
1583 AND lnk_srv_cim.object1_id2 = '#'
1584 AND lnk_srv_cim.object1_id1 = TO_CHAR(p_kle_id));
1585
1586 -- Bug# 5998969 -- Start
1587 -- This cursor is used to get the asset auto range
1588 CURSOR l_asset_autorange_csr IS
1589 SELECT INITIAL_ASSET_ID
1590 FROM FA_SYSTEM_CONTROLS;
1591
1592 l_asset_init_number NUMBER :=0;
1593 l_temp_asset_number NUMBER :=0;
1594 is_number NUMBER :=1;
1595 -- Bug# 5998969 -- End
1596
1597 -- RMUNJULU 09-APR-03 2897523 Added variables
1598 l_oks_line_exists BOOLEAN := FALSE;
1599
1600 -- RMUNJULU 10-APR-03 2900178 changed to VARCHAR2
1601 l_number VARCHAR2(3);
1602
1603
1604 l_no_of_assets NUMBER := 0;
1605 l_k_end_date DATE;
1606 l_rule_found BOOLEAN := FALSE;
1607 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1608 l_contract_status OKC_STATUSES_V.MEANING%TYPE;
1609 l_contract_number OKC_K_HEADERS_V.CONTRACT_NUMBER%TYPE;
1610 l_missing_lines BOOLEAN := FALSE;
1611 l_missing_asset_qty BOOLEAN := FALSE;
1612 l_partial_asset_line BOOLEAN := FALSE;
1613 l_invalid_lines BOOLEAN := FALSE;
1614 l_contract_mismatch BOOLEAN := FALSE;
1615 i NUMBER := 0;
1616
1617 l_accepted_quote_number NUMBER := -999;
1618 l_qtp_code VARCHAR2(30);
1619 l_quote_type VARCHAR2(200);
1620 l_asset_qty NUMBER;
1621 l_chr_id NUMBER;
1622 l_name VARCHAR2(150);
1623
1624 -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Added parameters for checking
1625 -- related to asset level termination
1626 lx_quote_tbl OKL_AM_UTIL_PVT.quote_tbl_type;
1627
1628 -- SECHAWLA 17-FEB-03 Bug 2804703 : new declarations
1629 l_sts_code okc_k_headers_b.sts_code%TYPE;
1630
1631 -- RMUNJULU 2757312
1632 l_asset_exists VARCHAR2(1);
1633
1634 -- rmunjulu EDAT
1635 l_k_start_date DATE;
1636 l_l_start_date DATE;
1637
1638 -- rmunjulu PPD
1639 l_pdd_exists VARCHAR2(3);
1640
1641 -- LOAN_ENHANCEMENTS
1642 l_deal_type VARCHAR2(300);
1643 l_rev_rec_method VARCHAR2(300);
1644 l_int_cal_basis VARCHAR2(300);
1645 l_tax_owner VARCHAR2(300);
1646 l_int_calc_done VARCHAR2(3);
1647
1648 --Bug# 13447258
1649 l_icb_meaning FND_LOOKUPS.meaning%TYPE;
1650
1651 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_quote';
1652 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1653 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1654 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1655 BEGIN
1656
1657 IF (is_debug_procedure_on) THEN
1658 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1659 END IF;
1660
1661 --Print Input Variables
1662 IF (is_debug_statement_on) THEN
1663 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1664 'p_api_version :'||p_api_version);
1665 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1666 'p_init_msg_list :'||p_init_msg_list);
1667 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1668 'p_k_end_date :'||p_k_end_date);
1669 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1670 'p_no_of_assets :'||p_no_of_assets);
1671 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1672 'p_sys_date :'||p_sys_date);
1673 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1674 'p_rule_chr_id :'||p_rule_chr_id);
1675 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1676 'p_days_before_k_exp :'||p_days_before_k_exp);
1677 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.id : '||p_quot_rec.id );
1678 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qrs_code : '||p_quot_rec.qrs_code );
1679 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qst_code : '||p_quot_rec.qst_code );
1680 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_qte_id : '||p_quot_rec.consolidated_qte_id );
1681 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.khr_id : '||p_quot_rec.khr_id );
1682 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.art_id : '||p_quot_rec.art_id );
1683 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qtp_code : '||p_quot_rec.qtp_code );
1684 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.trn_code : '||p_quot_rec.trn_code );
1685 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.pdt_id : '||p_quot_rec.pdt_id );
1686 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_from : '||p_quot_rec.date_effective_from );
1687 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.quote_number : '||p_quot_rec.quote_number );
1688 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.early_termination_yn : '||p_quot_rec.early_termination_yn );
1689 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.partial_yn : '||p_quot_rec.partial_yn );
1690 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.preproceeds_yn : '||p_quot_rec.preproceeds_yn );
1691 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.summary_format_yn : '||p_quot_rec.summary_format_yn );
1692 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_yn : '||p_quot_rec.consolidated_yn );
1693 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_requested : '||p_quot_rec.date_requested );
1694 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_proposal : '||p_quot_rec.date_proposal );
1695 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_to : '||p_quot_rec.date_effective_to );
1696 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_accepted : '||p_quot_rec.date_accepted );
1697 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.payment_received_yn : '||p_quot_rec.payment_received_yn );
1698 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.requested_by : '||p_quot_rec.requested_by );
1699 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.approved_yn : '||p_quot_rec.approved_yn );
1700 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.accepted_yn : '||p_quot_rec.accepted_yn );
1701 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.org_id : '||p_quot_rec.org_id );
1702 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.purchase_amount : '||p_quot_rec.purchase_amount );
1703 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.purchase_formula : '||p_quot_rec.purchase_formula );
1704 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.asset_value : '||p_quot_rec.asset_value );
1705 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.residual_value : '||p_quot_rec.residual_value );
1706 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.unbilled_receivables : '||p_quot_rec.unbilled_receivables );
1707 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.gain_loss : '||p_quot_rec.gain_loss );
1708 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.PERDIEM_AMOUNT : '||p_quot_rec.PERDIEM_AMOUNT );
1709 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.currency_code : '||p_quot_rec.currency_code );
1710 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.currency_conversion_code : '||p_quot_rec.currency_conversion_code );
1711 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.legal_entity_id : '||p_quot_rec.legal_entity_id );
1712 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.repo_quote_indicator_yn : '||p_quot_rec.repo_quote_indicator_yn );
1713 END IF;
1714
1715 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1716
1717 -- SECHAWLA Bug #2680542 : moved all contract level validations
1718 -- to the beginning of the procedure, before line level validations.
1719
1720 OPEN k_details_for_qte_csr(p_quot_rec.khr_id);
1721 -- rmunjulu EDAT Added l_k_start_date, l_k_end_date
1722 FETCH k_details_for_qte_csr INTO l_contract_number, l_sts_code, l_k_start_date, l_k_end_date; -- SECHAWLA 17-FEB-03 Bug 2804703 : added l_sts_code
1723 CLOSE k_details_for_qte_csr;
1724
1725 --SECHAWLA 28-FEB-03 Bug # 2757175 : Moved the following validation to the beginning of create_termination_quote procedure
1726 /*
1727 -- Call the validate contract to check contract status
1728 OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract(
1729 p_api_version => p_api_version,
1730 p_init_msg_list => p_init_msg_list,
1731 x_return_status => l_return_status,
1732 x_msg_count => x_msg_count,
1733 x_msg_data => x_msg_data,
1734 p_contract_id => p_quot_rec.khr_id,
1735 p_control_flag => 'TRMNT_QUOTE_CREATE',
1736 x_contract_status => lx_contract_status);
1737
1738 -- If error then above api will set the message, so exit now
1739 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1740 x_return_status := OKL_API.G_RET_STS_ERROR;
1741 RAISE G_EXCEPTION_HALT_VALIDATION;
1742 END IF;
1743 */ --SECHAWLA 28-FEB-03 Bug # 2757175 : end code move
1744
1745
1746 ---SECHAWLA Bug # 2699412--------Check the following for the contract line--
1747
1748 -- rmunjulu +++++++++ Effective Dated Terminations -- start +++++++++++++++
1749
1750 -- RMUNJULU EDAT Date Eff From can be future or past date so remove this check
1751 /*
1752 -- RMUNJULU 06-JAN-03 2736865 Date Eff From is now enterable
1753 -- Check date_eff_from should be >= sysdate
1754 IF p_quot_rec.date_effective_from IS NOT NULL
1755 AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
1756 AND TRUNC(p_quot_rec.date_effective_from) < TRUNC(p_sys_date) THEN
1757
1758 x_return_status := OKL_API.G_RET_STS_ERROR;
1759
1760 -- Please enter the current or future date for the Effective From date.
1761 OKL_API.SET_MESSAGE(
1762 p_app_name => 'OKL',
1763 p_msg_name => 'OKL_AM_DATE_EFF_FROM_PAST');
1764
1765 RAISE G_EXCEPTION_HALT_VALIDATION;
1766
1767 END IF;
1768 */
1769
1770 -- rmunjulu EDAT Add check so that quote effective date which is a prior date
1771 -- is not before the contract start date
1772 IF p_quot_rec.date_effective_from IS NOT NULL
1773 AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
1774 AND TRUNC(p_quot_rec.date_effective_from) < TRUNC(l_k_start_date) THEN
1775
1776 x_return_status := OKL_API.G_RET_STS_ERROR;
1777
1778 -- Quote Effectivity Date cannot be before contract start date.
1779 OKL_API.SET_MESSAGE(
1780 p_app_name => 'OKL',
1781 p_msg_name => 'OKL_AM_EDT_QTE_DATE_K');
1782
1783 RAISE G_EXCEPTION_HALT_VALIDATION;
1784
1785 END IF;
1786
1787 -- rmunjulu EDAT check if contract EVERGREEN then quote effective date cannot
1788 -- be before contract end date
1789 IF p_quot_rec.date_effective_from IS NOT NULL
1790 AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
1791 AND l_sts_code = 'EVERGREEN'
1792 AND TRUNC(p_quot_rec.date_effective_from) <= TRUNC(l_k_end_date) THEN -- rmunjulu bug 6978124 For Evergreen K quote should not be allowed as of K end Date.
1793
1794 x_return_status := OKL_API.G_RET_STS_ERROR;
1795
1796 -- Quote Effectivity Date for an Evergreen contract cannot be before contract end date.
1797 OKL_API.SET_MESSAGE(
1798 p_app_name => 'OKL',
1799 p_msg_name => 'OKL_AM_EDT_EVERGREEN_QTE_DATE');
1800
1801 RAISE G_EXCEPTION_HALT_VALIDATION;
1802
1803 END IF;
1804
1805 -- Code for PPD check will come here
1806
1807 -- rmunjulu +++++++++ Effective Dated Termination -- end ++++++++++++++++
1808
1809 -- Check date_eff_to >= date_eff_from
1810 IF (p_quot_rec.date_effective_from IS NOT NULL)
1811 AND (p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE)
1812 AND (p_quot_rec.date_effective_to IS NOT NULL)
1813 AND (p_quot_rec.date_effective_to <> OKL_API.G_MISS_DATE) THEN
1814 IF (TRUNC(p_quot_rec.date_effective_to) <= TRUNC(p_quot_rec.date_effective_from)) THEN
1815 x_return_status := OKL_API.G_RET_STS_ERROR;
1816 -- Message : Date Effective To DATE_EFFECTIVE_TO cannot be before
1817 -- Date Effective From DATE_EFFECTIVE_FROM.
1818 OKL_API.SET_MESSAGE(p_app_name => 'OKL',
1819 p_msg_name => 'OKL_AM_DATE_EFF_FROM_LESS_TO',
1820 p_token1 => 'DATE_EFFECTIVE_TO',
1821 p_token1_value => p_quot_rec.date_effective_to,
1822 p_token2 => 'DATE_EFFECTIVE_FROM',
1823 p_token2_value => p_quot_rec.date_effective_from);
1824 RAISE G_EXCEPTION_HALT_VALIDATION;
1825 END IF;
1826 END IF;
1827
1828
1829 --SECHAWLA 18-FEB-03 Bug # 2807201 : Moved the quote_type_check procedure call from here to Create_termination quote procedure
1830
1831 --IF l_new_quote_type NOT LIKE 'TER_MAN%' THEN ---SECHAWLA 18-FEB-03 Bug # 2807201
1832 IF p_quot_rec.qtp_code NOT LIKE 'TER_MAN%' THEN ---SECHAWLA 18-FEB-03 Bug # 2807201 : quote type passed to validate_quote is now the new quote type from create_termination_quote
1833 -- check if early termination
1834 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
1835
1836 -- IF TRUNC(p_k_end_date) - p_days_before_k_exp > TRUNC(p_sys_date) THEN
1837 -- rmunjulu EDT 3797384 check with date effective instead of sysdate
1838 IF TRUNC(p_k_end_date) - p_days_before_k_exp > TRUNC(p_quot_rec.date_effective_from) THEN
1839
1840 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End ++++++++++++++++
1841
1842 IF (is_debug_statement_on) THEN
1843 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1844 'before call to early_termination_allowed :'||l_return_status);
1845 END IF;
1846
1847 -- check if early termination allowed
1848 early_termination_allowed(
1849 p_quot_rec => p_quot_rec,
1850 p_rule_chr_id => p_rule_chr_id,
1851 x_return_status => l_return_status,
1852 x_rule_found => l_rule_found);
1853
1854 IF (is_debug_statement_on) THEN
1855 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1856 'After call to early_termination_allowed :'||l_return_status);
1857 END IF;
1858
1859 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1860 x_return_status := OKL_API.G_RET_STS_ERROR;
1861 RAISE G_EXCEPTION_HALT_VALIDATION;
1862 ELSIF (l_rule_found = FALSE) THEN
1863 x_return_status := OKL_API.G_RET_STS_ERROR;
1864 -- Early Termination of Contract CONTRACT_NUMBER is not allowed.
1865 OKL_API.set_message( p_app_name => 'OKL',
1866 p_msg_name => 'OKL_AM_CONTRACT_EARLY_TERM_NA',
1867 p_token1 => 'CONTRACT_NUMBER',
1868 p_token1_value => l_contract_number);
1869 RAISE G_EXCEPTION_HALT_VALIDATION;
1870 END IF;
1871 END IF;
1872 END IF;
1873
1874 -- rmunjulu PPD
1875 -- do not allow creation of prior dated term quote before the principal paydown date.
1876 IF p_quot_rec.date_effective_from IS NOT NULL
1877 AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE THEN
1878 --AND trunc(p_quot_rec.date_effective_from) < trunc(p_sys_date) THEN
1879 -- rmunjulu Bug 4143251 Removed above condition for PRIOR Dated Quotes, NOW check for all Quotes
1880
1881
1882 IF (is_debug_statement_on) THEN
1883 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1884 'before call to OKL_CS_PRINCIPAL_PAYDOWN_PVT.check_for_ppd :'||l_return_status);
1885 END IF;
1886
1887 -- Added code to check for PPD transaction after quote eff date
1888 l_pdd_exists := OKL_CS_PRINCIPAL_PAYDOWN_PVT.check_for_ppd(
1889 p_khr_id => p_quot_rec.khr_id,
1890 p_effective_date => p_quot_rec.date_effective_from);
1891
1892 IF (is_debug_statement_on) THEN
1893 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1894 'After call to OKL_CS_PRINCIPAL_PAYDOWN_PVT.check_for_ppd :'||l_return_status);
1895 END IF;
1896
1897 IF l_pdd_exists = 'Y' THEN
1898
1899 -- A principal paydown transaction exists for contract CONTRACT_NUMBER,
1900 -- can not create a quote with Effective From date before the principal
1901 -- paydown transaction date.
1902 OKL_API.set_message(
1903 p_app_name => 'OKL',
1904 p_msg_name => 'OKL_AM_PPD_ERR',
1905 p_token1 => 'CONTRACT_NUMBER',
1906 p_token1_value => l_contract_number);
1907
1908 RAISE G_EXCEPTION_HALT_VALIDATION;
1909 END IF;
1910 END IF;
1911
1912 -- SECHAWLA Bug #2680542 : moved all line level validations towards the end,
1913 -- after contract level validations.
1914
1915 -- Check that there are contract lines passed as parameters.
1916 IF (p_assn_tbl.COUNT > 0) THEN
1917 i := p_assn_tbl.FIRST;
1918 -- validate contract lines
1919 LOOP
1920
1921 IF (is_debug_statement_on) THEN
1922 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_id :'|| p_assn_tbl(i).p_asset_id );
1923 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_number :'|| p_assn_tbl(i).p_asset_number );
1924 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_qty :'|| p_assn_tbl(i).p_asset_qty );
1925 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_quote_qty :'|| p_assn_tbl(i).p_quote_qty );
1926 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_split_asset_number :'|| p_assn_tbl(i).p_split_asset_number);
1927 END IF;
1928 IF ((p_assn_tbl(i).p_asset_id IS NULL) OR
1929 (p_assn_tbl(i).p_asset_id = OKC_API.G_MISS_NUM)) THEN
1930 x_return_status := OKL_API.G_RET_STS_ERROR;
1931 --Quotes are not allowed for contracts without assets.
1932 OKC_API.SET_MESSAGE (
1933 p_app_name => 'OKL'
1934 ,p_msg_name => 'OKL_AM_NO_ASSETS_FOR_QUOTE');
1935 RAISE G_EXCEPTION_HALT_VALIDATION;
1936 END IF;
1937
1938 -- SECHAWLA Bug #2680542 : Added validations to check if asset id is
1939 -- valid and belongs to the passed contract.
1940 l_chr_id := 1;
1941
1942 OPEN l_clines_csr (p_assn_tbl(i).p_asset_id);
1943 FETCH l_clines_csr INTO l_chr_id, l_l_start_date; -- rmunjulu EDAT
1944 IF l_clines_csr%NOTFOUND THEN
1945 x_return_status := OKL_API.G_RET_STS_ERROR;
1946 -- invalid asset id
1947 OKC_API.SET_MESSAGE (
1948 p_app_name => 'OKC'
1949 ,p_msg_name => G_INVALID_VALUE
1950 ,p_token1 => G_COL_NAME_TOKEN
1951 ,p_token1_value => 'asset_id');
1952 RAISE G_EXCEPTION_HALT_VALIDATION;
1953 ELSIF (l_chr_id <> p_quot_rec.khr_id) OR (l_chr_id = 1) THEN
1954 x_return_status := OKL_API.G_RET_STS_ERROR;
1955 --Asset ASSET_NUMBER does not belong to the contract CONTRACT_NUMBER.
1956 OKC_API.SET_MESSAGE (
1957 p_app_name => 'OKL'
1958 ,p_msg_name => 'OKL_AM_CONTRACT_MISMATCH'
1959 ,p_token1 => 'ASSET_NUMBER'
1960 ,p_token1_value => p_assn_tbl(i).p_asset_number,
1961 p_token2 => 'CONTRACT_NUMBER',
1962 p_token2_value => l_contract_number);
1963 RAISE G_EXCEPTION_HALT_VALIDATION;
1964 END IF;
1965 CLOSE l_clines_csr;
1966
1967 -- SECHAWLA Bug #2680542 : Added code to populate asset number if it is null
1968 IF p_assn_tbl(i).p_asset_number IS NULL
1969 OR p_assn_tbl(i).p_asset_number = OKC_API.G_MISS_CHAR THEN
1970 OPEN l_linesfull_csr(p_assn_tbl(i).p_asset_id);
1971 FETCH l_linesfull_csr INTO l_name;
1972 CLOSE l_linesfull_csr;
1973
1974 p_assn_tbl(i).p_asset_number := l_name;
1975 END IF;
1976
1977 -- SECHAWLA Bug #2680542 : Added code to populate asset qty and quote qty, if null
1978 IF ((p_assn_tbl(i).p_asset_qty IS NULL) OR
1979 (p_assn_tbl(i).p_asset_qty = OKC_API.G_MISS_NUM)) THEN
1980 l_asset_qty := okl_am_util_pvt.get_asset_quantity(p_assn_tbl(i).p_asset_id);
1981 IF l_asset_qty IS NULL THEN
1982 x_return_status := OKL_API.G_RET_STS_ERROR;
1983 -- Can not create quote because the asset quantity is missing.
1984 OKC_API.SET_MESSAGE (
1985 p_app_name => 'OKL'
1986 ,p_msg_name => 'OKL_AM_NO_ASSET_QTY',
1987 p_token1 => 'ASSET_NUMBER',
1988 p_token1_value => p_assn_tbl(i).p_asset_number);
1989 RAISE G_EXCEPTION_HALT_VALIDATION;
1990 ELSE
1991 p_assn_tbl(i).p_asset_qty := l_asset_qty;
1992 END IF;
1993 END IF;
1994
1995
1996 IF ((p_assn_tbl(i).p_quote_qty IS NULL) OR
1997 (p_assn_tbl(i).p_quote_qty = OKC_API.G_MISS_NUM)) THEN
1998 p_assn_tbl(i).p_quote_qty := p_assn_tbl(i).p_asset_qty;
1999 END IF;
2000
2001
2002 -- RMUNJULU 14-MAR-03 2854796 Error if quote qty less than equal to 0
2003 IF p_assn_tbl(i).p_quote_qty <= 0 THEN
2004
2005 -- Please enter a value greater than zero for Units to Terminate of asset ASSET_NUMBER.
2006 OKL_API.SET_MESSAGE (
2007 p_app_name => 'OKL',
2008 p_msg_name => 'OKL_AM_QTE_QTY_LESS_THAN_ZERO',
2009 p_token1 => 'ASSET_NUMBER',
2010 p_token1_value => p_assn_tbl(i).p_asset_number);
2011
2012
2013 RAISE G_EXCEPTION_HALT_VALIDATION;
2014
2015 END IF;
2016
2017
2018 -- SECHAWLA Bug #2680542 : Added code to validate quote quantity
2019 IF p_assn_tbl(i).p_quote_qty > p_assn_tbl(i).p_asset_qty THEN
2020 x_return_status := OKL_API.G_RET_STS_ERROR;
2021 -- Asset ASSET_NUMBER quantity is less than the specified quote quantity.
2022 OKC_API.SET_MESSAGE (
2023 p_app_name => 'OKL'
2024 ,p_msg_name => 'OKL_AM_INVALID_QUOTE_QTY',
2025 p_token1 => 'ASSET_NUMBER',
2026 p_token1_value => p_assn_tbl(i).p_asset_number);
2027 RAISE G_EXCEPTION_HALT_VALIDATION;
2028 END IF;
2029
2030 -- SECHAWLA Bug #2680542 : Check if quote invloves a partial asset line.
2031 IF p_assn_tbl(i).p_quote_qty < p_assn_tbl(i).p_asset_qty THEN
2032 l_partial_asset_line := TRUE;
2033 END IF;
2034
2035
2036
2037 -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Added code to check for accepted
2038 -- quote based on asset level termination changes
2039
2040 IF (is_debug_statement_on) THEN
2041 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2042 'before call to OKL_AM_UTIL_PVT.get_line_quotes :'||l_return_status);
2043 END IF;
2044
2045 -- Check if accepted quote exists for the asset
2046 OKL_AM_UTIL_PVT.get_line_quotes (
2047 p_kle_id => p_assn_tbl(i).p_asset_id,
2048 x_quote_tbl => lx_quote_tbl,
2049 x_return_status => x_return_status);
2050
2051 IF (is_debug_statement_on) THEN
2052 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2053 'After call to OKL_AM_UTIL_PVT.get_line_quotes :'||l_return_status);
2054 END IF;
2055
2056 -- Check the return status
2057 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2058
2059 -- Error occured in util proc, message set by util proc raise exp
2060 RAISE G_EXCEPTION_HALT_VALIDATION;
2061
2062 END IF;
2063
2064 -- Check if accepted quote exists for the asset
2065 IF lx_quote_tbl.COUNT > 0 THEN
2066
2067 IF (is_debug_statement_on) THEN
2068 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2069 'before call to OKL_AM_UTIL_PVT.get_lookup_meaning :'||l_return_status);
2070 END IF;
2071
2072 l_quote_type := OKL_AM_UTIL_PVT.get_lookup_meaning(
2073 'OKL_QUOTE_TYPE',
2074 lx_quote_tbl(lx_quote_tbl.FIRST).qtp_code,
2075 'Y');
2076
2077 IF (is_debug_statement_on) THEN
2078 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2079 'after call to OKL_AM_UTIL_PVT.get_lookup_meaning :'||l_return_status);
2080 END IF;
2081 -- Accepted quote QUOTE_NUMBER of quote type QUOTE_TYPE exists for
2082 -- asset ASSET_NUMBER. Cannot create another quote for the same asset.
2083 OKL_API.set_message (
2084 p_app_name => 'OKL',
2085 p_msg_name => 'OKL_AM_ASSET_QTE_EXISTS_ERR',
2086 p_token1 => 'QUOTE_NUMBER',
2087 p_token1_value => lx_quote_tbl(lx_quote_tbl.FIRST).quote_number,
2088 p_token2 => 'QUOTE_TYPE',
2089 p_token2_value => l_quote_type,
2090 p_token3 => 'ASSET_NUMBER',
2091 p_token3_value => p_assn_tbl(i).p_asset_number);
2092
2093 RAISE G_EXCEPTION_HALT_VALIDATION;
2094
2095 END IF;
2096
2097 -- AKP:REPO-QUOTE-START Get the contract product details 6599890
2098 OKL_AM_UTIL_PVT.get_contract_product_details(
2099 p_khr_id => p_quot_rec.khr_id,
2100 x_deal_type => l_deal_type,
2101 x_rev_rec_method => l_rev_rec_method,
2102 x_int_cal_basis => l_int_cal_basis,
2103 x_tax_owner => l_tax_owner,
2104 x_return_status => l_return_status);
2105
2106
2107 IF (is_debug_statement_on) THEN
2108 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2109 'After call to OKL_AM_UTIL_PVT.get_contract_product_details :'||l_return_status);
2110 END IF;
2111
2112
2113 -- If error then throw exception
2114 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2115
2116 RAISE G_EXCEPTION_HALT_VALIDATION;
2117
2118 END IF;
2119 -- AKP:REPO-QUOTE-END Get the contract product details
2120
2121 -- rmunjulu LOANS_ENHANCEMENTS Termination with purchase not allowed for loans
2122 IF p_quot_rec.qtp_code IN ( 'TER_PURCHASE', -- Termination - With Purchase
2123 'TER_MAN_PURCHASE', -- Termination - Manual With Purchase
2124 'TER_RECOURSE', -- Termination - Recourse With Purchase
2125 'TER_ROLL_PURCHASE' -- Termination - Rollover To New Contract With Purchase
2126 ) THEN
2127
2128 IF (is_debug_statement_on) THEN
2129 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2130 'before call to OKL_AM_UTIL_PVT.get_contract_product_details :'||l_return_status);
2131 END IF;
2132
2133 -- AKP:REPO-QUOTE-START 6599890
2134 /* -- Get the contract product details
2135 OKL_AM_UTIL_PVT.get_contract_product_details(
2136 p_khr_id => p_quot_rec.khr_id,
2137 x_deal_type => l_deal_type,
2138 x_rev_rec_method => l_rev_rec_method,
2139 x_int_cal_basis => l_int_cal_basis,
2140 x_tax_owner => l_tax_owner,
2141 x_return_status => l_return_status);
2142
2143
2144 IF (is_debug_statement_on) THEN
2145 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2146 'After call to OKL_AM_UTIL_PVT.get_contract_product_details :'||l_return_status);
2147 END IF;
2148
2149
2150 -- If error then throw exception
2151 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2152
2153 RAISE G_EXCEPTION_HALT_VALIDATION;
2154
2155 END IF; */
2156 -- AKP:REPO-QUOTE-END
2157
2158 IF l_deal_type LIKE 'LOAN%' THEN
2159
2160 -- Termination with purchase quote is not allowed for loan contract.
2161 OKL_API.SET_MESSAGE(
2162 p_app_name => 'OKL',
2163 p_msg_name => 'OKL_AM_LOAN_PAR_ERR');
2164
2165 RAISE G_EXCEPTION_HALT_VALIDATION;
2166
2167 END IF;
2168 END IF;
2169
2170 -- AKP:REPO-QUOTE-START 6599890
2171 -- asahoo Changed the message, no token will be passed.
2172 IF (p_quot_rec.repo_quote_indicator_yn IS NOT NULL AND
2173 p_quot_rec.repo_quote_indicator_yn <> OKL_API.G_MISS_CHAR) THEN
2174 IF p_quot_rec.repo_quote_indicator_yn ='Y' AND l_deal_type NOT LIKE 'LOAN%' THEN
2175 OKL_API.SET_MESSAGE(
2176 p_app_name => 'OKL',
2177 p_msg_name => 'OKL_AM_REPO_LOAN_VALID');
2178 RAISE G_EXCEPTION_HALT_VALIDATION;
2179 END IF;
2180 END IF;
2181 -- AKP:REPO-QUOTE-END
2182
2183 IF l_partial_asset_line = TRUE
2184 THEN
2185 -- Bug 4299668 PAGARG Moved the logic (to check whether there is any OKS
2186 -- line attached to asset) inside l_partial_asset_line condition as OKS
2187 -- line needs to be verified only in case of partial termination quote.
2188 -- RMUNJULU 09-APR-03 2897523 Added code to check if OKS line exists linked to covered
2189 -- asset and trying to create a partial line termination quote on that asset.
2190 OPEN l_oks_lines_csr ( p_assn_tbl(i).p_asset_id );
2191 FETCH l_oks_lines_csr INTO l_number;
2192 IF l_oks_lines_csr%FOUND THEN
2193 l_oks_line_exists := TRUE;
2194 END IF;
2195 CLOSE l_oks_lines_csr;
2196
2197 IF l_oks_line_exists = TRUE THEN
2198
2199 -- This asset is linked to a service contract. Assets linked to service contract can not be split.
2200 OKL_API.set_message (
2201 p_app_name => 'OKL',
2202 p_msg_name => 'OKL_LLA_SPA_SERVICE_LINKED');
2203 /*
2204 -- Service line LINE_NUMBER linked to asset ASSET_NUMBER exists.
2205 -- Can not create partial asset termination quote for this asset.
2206 OKL_API.set_message (
2207 p_app_name => 'OKL',
2208 p_msg_name => 'OKL_AM_SERVICE_LINE_EXISTS',
2209 p_token1 => 'LINE_NUMBER',
2210 p_token1_value => l_number,
2211 p_token2 => 'ASSET_NUMBER',
2212 p_token2_value => p_assn_tbl(i).p_asset_number);
2213 */
2214
2215 RAISE G_EXCEPTION_HALT_VALIDATION;
2216 END IF; -- Bug 4299668
2217
2218
2219 /* SECHAWLA 04-JAN-06 4915133 ; Moved this piece later in the code : move begin
2220 -- rmunjulu LOANS_ENHANCEMENTS 13-oct-05 moved this logic here.
2221 -- rmunjulu LOANS_ENHANCEMENTS Partial line termination for loans with Actual/Estimated Actual not allowed
2222 -- Get the contract product details
2223 OKL_AM_UTIL_PVT.get_contract_product_details(
2224 p_khr_id => p_quot_rec.khr_id,
2225 x_deal_type => l_deal_type,
2226 x_rev_rec_method => l_rev_rec_method,
2227 x_int_cal_basis => l_int_cal_basis,
2228 x_tax_owner => l_tax_owner,
2229 x_return_status => l_return_status);
2230
2231 -- If error then throw exception
2232 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2233
2234 RAISE G_EXCEPTION_HALT_VALIDATION;
2235
2236 END IF;
2237
2238 IF l_deal_type LIKE 'LOAN%'
2239 AND l_rev_rec_method IN ('ESTIMATED_AND_BILLED','ACTUAL') THEN
2240
2241 -- Termination of part of units of asset ASSET_NUMBER is not allowed for contract CONTRACT_NUMBER.
2242 OKL_API.SET_MESSAGE(
2243 p_app_name => 'OKL',
2244 p_msg_name => 'OKL_AM_LOAN_PAR_LN_TRMNT',
2245 p_token1 => 'ASSET_NUMBER',
2246 p_token1_value => p_assn_tbl(i).p_asset_number,
2247 p_token2 => 'CONTRACT_NUMBER',
2248 p_token2_value => l_contract_number);
2249
2250 RAISE G_EXCEPTION_HALT_VALIDATION;
2251
2252 END IF;
2253 */ -- SECHAWLA 04-JAN-06 4915133 : move end
2254
2255 END IF;
2256
2257 --SECHAWLA 04-JAN-06 4915133 : Partial termination quotes (full or partial line)
2258 --should not be permitted for contracts with revenue recognition method
2259 --'Estimated and Billed' or 'Actual'
2260 IF (p_assn_tbl.COUNT < p_no_of_assets) OR (l_partial_asset_line) THEN
2261
2262 IF (is_debug_statement_on) THEN
2263 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2264 'before call to OKL_AM_UTIL_PVT.get_contract_product_details :'||l_return_status);
2265 END IF;
2266
2267 -- Moved the above valdation here under this IF condition
2268 -- Get the contract product details
2269 OKL_AM_UTIL_PVT.get_contract_product_details(
2270 p_khr_id => p_quot_rec.khr_id,
2271 x_deal_type => l_deal_type,
2272 x_rev_rec_method => l_rev_rec_method,
2273 x_int_cal_basis => l_int_cal_basis,
2274 x_tax_owner => l_tax_owner,
2275 x_return_status => l_return_status);
2276
2277 IF (is_debug_statement_on) THEN
2278 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2279 'After call to OKL_AM_UTIL_PVT.get_contract_product_details :'||l_return_status);
2280 END IF;
2281
2282 -- If error then throw exception
2283 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2284
2285 RAISE G_EXCEPTION_HALT_VALIDATION;
2286
2287 END IF;
2288
2289 --Bug# 13447258: Partial Termination allowed for Estimated and Billed Loan contracts
2290 IF l_deal_type LIKE 'LOAN%'
2291 AND l_rev_rec_method IN ('ACTUAL') THEN
2292
2293 -- Termination of part of units of asset ASSET_NUMBER is not allowed for contract CONTRACT_NUMBER.
2294 OKL_API.SET_MESSAGE(
2295 p_app_name => 'OKL',
2296 p_msg_name => 'OKL_AM_LOAN_PAR_LN_TRMNT');
2297
2298 RAISE G_EXCEPTION_HALT_VALIDATION;
2299
2300 END IF;
2301
2302 --Bug# 13447258: Partial Termination allowed for Catchup-Cleanup Loan contracts
2303 --Bug# 14137617: Partial Termination is not allowed for Catchup-Cleanup Loan contracts
2304 /*IF l_deal_type LIKE 'LOAN%'
2305 AND l_int_cal_basis = 'CATCHUP/CLEANUP' THEN
2306
2307 -- Termination of part of units of asset ASSET_NUMBER is not allowed for contract CONTRACT_NUMBER.
2308 OKL_API.SET_MESSAGE(
2309 p_app_name => 'OKL',
2310 p_msg_name => 'OKL_AM_LOAN_CC_PAR_LN_TRMNT');
2311
2312 RAISE G_EXCEPTION_HALT_VALIDATION;
2313
2314 END IF;
2315 */
2316
2317 --Bug# 13447258: Partial Termination is not allowed for Float and Catchup-Cleanup Loan contracts if
2318 -- contract streams have not been upgraded to asset level
2319 IF l_int_cal_basis IN ('FLOAT','CATCHUP/CLEANUP') THEN
2320 OKL_VARIABLE_INT_UTIL_PVT.check_vr_asset_level_upgrade(
2321 p_khr_id => p_quot_rec.khr_id,
2322 x_return_status => l_return_status);
2323
2324 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2325 RAISE G_EXCEPTION_HALT_VALIDATION;
2326 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2327 RAISE G_EXCEPTION_HALT_VALIDATION;
2328 END IF;
2329 END IF;
2330
2331 --Bug# 13447258: Partial Line Termination is not allowed for Float and Catchup-Cleanup Loan contracts
2332 IF l_partial_asset_line THEN
2333 IF l_int_cal_basis IN ('FLOAT','CATCHUP/CLEANUP') THEN
2334
2335 l_icb_meaning := OKL_AM_UTIL_PVT.get_lookup_meaning(
2336 'OKL_INTEREST_CALCULATION_BASIS',
2337 l_int_cal_basis,
2338 'Y');
2339
2340 OKL_API.SET_MESSAGE(
2341 p_app_name => 'OKL',
2342 p_msg_name => 'OKL_AM_LOAN_PAR_LINE_TRMNT',
2343 p_token1 => 'INTEREST_CALC_METHOD',
2344 p_token1_value => l_icb_meaning);
2345
2346 RAISE G_EXCEPTION_HALT_VALIDATION;
2347
2348 END IF;
2349 END IF;
2350
2351 END IF;
2352 -- SECHAWLA 04-JAN-06 4915133 : end
2353
2354 -- RMUNJULU 2757312 Added code to validate the new asset number -- START
2355 IF p_assn_tbl(i).p_split_asset_number IS NOT NULL
2356 AND p_assn_tbl(i).p_split_asset_number <> OKL_API.G_MISS_CHAR THEN
2357
2358 -- If partial Line
2359 IF p_assn_tbl(i).p_asset_qty > p_assn_tbl(i).p_quote_qty THEN
2360
2361 IF (is_debug_statement_on) THEN
2362 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2363 'before call to asset_number_exists :'||l_return_status);
2364 END IF;
2365
2366 -- Check if Asset Number Unique --
2367 -- RMUNJULU 3241502 Added p_control
2368 l_return_status := asset_number_exists(
2369 p_asset_number => p_assn_tbl(i).p_split_asset_number,
2370 p_control => 'QUOTE',
2371 x_asset_exists => l_asset_exists);
2372
2373 IF (is_debug_statement_on) THEN
2374 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2375 'After call to asset_number_exists :'||l_return_status);
2376 END IF;
2377
2378 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2379 -- Message set in called proc
2380 RAISE G_EXCEPTION_HALT_VALIDATION;
2381 END IF;
2382
2383 -- If Asset Number Entered is not unique raise error
2384 IF l_asset_exists = 'Y' THEN
2385
2386 -- Asset number ASSET_NUMBER already exists.
2387 OKL_API.set_message (
2388 p_app_name => 'OKL',
2389 p_msg_name => 'OKL_AM_NEW_ASSET_EXISTS',
2390 p_token1 => 'ASSET_NUMBER',
2391 p_token1_value => p_assn_tbl(i).p_split_asset_number); -- RMUNJULU 3241502 Changed token value
2392 RAISE G_EXCEPTION_HALT_VALIDATION;
2393 END IF;
2394
2395 -- Bug# 5998969 -- start
2396 OPEN l_asset_autorange_csr;
2397 FETCH l_asset_autorange_csr INTO l_asset_init_number;
2398 CLOSE l_asset_autorange_csr;
2399
2400 BEGIN
2401 l_temp_asset_number := TO_NUMBER(p_assn_tbl(i).p_split_asset_number);
2402 is_number :=1;
2403 EXCEPTION
2404 WHEN OTHERS THEN
2405 is_number :=0;
2406 END;
2407 IF (is_number = 1) THEN
2408
2409 IF (p_assn_tbl(i).p_split_asset_number > l_asset_init_number) THEN
2410 -- The New Asset Number ASSET_NUMBER is reserved for automatic asset numbering.
2411 -- Asset number beyond AUTO_RANGE is reserved for automatic asset numbering.
2412 --Please modify the New Asset Number.
2413 OKL_API.set_message (
2414 p_app_name => 'OKL',
2415 p_msg_name => 'OKL_AM_NEW_ASSET_IN_AUOT_RANGE',
2416 p_token1 => 'ASSET_NUMBER',
2417 p_token1_value => p_assn_tbl(i).p_split_asset_number,
2418 p_token2 => 'AUTO_RANGE',
2419 p_token2_value => l_asset_init_number);
2420
2421 RAISE G_EXCEPTION_HALT_VALIDATION;
2422 END IF;
2423 END IF;
2424 -- Bug# 5998969 -- end
2425
2426 END IF;
2427 END IF;
2428 -- RMUNJULU 2757312 Added code to validate the new asset number -- END
2429
2430 -- rmunjulu +++++++++ Effective Dated Termination -- start ++++++++++++++++
2431
2432 -- rmunjulu EDAT Check if any asset transactions exists in FA for the asset after quote effective date
2433 IF p_quot_rec.date_effective_from IS NOT NULL
2434 AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE THEN
2435
2436 -- ++++++++++++ Same as in Accept Quote API ++++++++++++++++++++++---
2437 -- rmunjulu EDAT Add code for FA checks, do this only for prior dated terminations
2438 -- and termination with purchase (which is when we do asset disposal)
2439 -- rmunjulu Bug 4143251 Changed condition to check for FA Checks for PRE and CURRENT dated quotes
2440 IF trunc(p_quot_rec.date_effective_from) <= trunc(p_sys_date)
2441 AND p_quot_rec.qtp_code IN ( 'TER_PURCHASE', -- Termination - With Purchase
2442 'TER_MAN_PURCHASE', -- Termination - Manual With Purchase
2443 'TER_RECOURSE', -- Termination - Recourse With Purchase
2444 'TER_ROLL_PURCHASE' -- Termination - Rollover To New Contract With Purchase
2445 ) THEN
2446
2447 IF (is_debug_statement_on) THEN
2448 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2449 'before call to OKL_AM_TERMNT_QUOTE_PVT.check_asset_validity_in_fa :'||l_return_status);
2450 END IF;
2451
2452 OKL_AM_TERMNT_QUOTE_PVT.check_asset_validity_in_fa(
2453 p_kle_id => p_assn_tbl(i).p_asset_id,
2454 p_trn_date => p_quot_rec.date_effective_from, -- quote eff from date will be passed
2455 p_check_fa_year => 'Y', -- do we need to check fiscal year
2456 p_check_fa_trn => 'Y', -- do we need to check fa transactions
2457 p_contract_number => l_contract_number,
2458 x_return_status => l_return_status);
2459
2460 IF (is_debug_statement_on) THEN
2461 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2462 'After call to OKL_AM_TERMNT_QUOTE_PVT.check_asset_validity_in_fa :'||l_return_status);
2463 END IF;
2464
2465 -- If error in FA checks the throw exception, message set in above routine
2466 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2467
2468 RAISE G_EXCEPTION_HALT_VALIDATION; -- rmunjulu EDAT 17-Jan-2005
2469 END IF;
2470 END IF;
2471 -- ++++++++++++ Same as in Accept Quote API ++++++++++++++++++++++---
2472 END IF;
2473
2474 -- rmunjulu EDAT Check if quote effectivity date before the asset start date for the quoted asset
2475 IF p_quot_rec.date_effective_from IS NOT NULL
2476 AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
2477 AND TRUNC(p_quot_rec.date_effective_from) < TRUNC(l_l_start_date) THEN
2478
2479 x_return_status := OKL_API.G_RET_STS_ERROR;
2480
2481 -- Quote Effectivity Date cannot be before asset start date.
2482 OKL_API.SET_MESSAGE(
2483 p_app_name => 'OKL',
2484 p_msg_name => 'OKL_AM_EDT_QTE_DATE_ASSET');
2485
2486 RAISE G_EXCEPTION_HALT_VALIDATION;
2487
2488 END IF;
2489
2490 -- rmunjulu +++++++++ Effective Dated Termination -- end ++++++++++++++++
2491
2492
2493 EXIT WHEN (i = p_assn_tbl.LAST);
2494 i := p_assn_tbl.NEXT(i);
2495 END LOOP;
2496 ELSE
2497 x_return_status := OKL_API.G_RET_STS_ERROR;
2498 --Quotes are not allowed for contracts without assets.
2499 OKC_API.SET_MESSAGE (
2500 p_app_name => 'OKL'
2501 ,p_msg_name => 'OKL_AM_NO_ASSETS_FOR_QUOTE');
2502 RAISE G_EXCEPTION_HALT_VALIDATION;
2503 END IF;
2504
2505 --Bug# 5946411: Removed validation that prevents partial line
2506 -- termination quote creation for evergreen contracts
2507 /*
2508 --SECHAWLA 17-FEB-03 Bug 2804703 : Added the following validation
2509 IF l_sts_code = 'EVERGREEN' AND (l_partial_asset_line) THEN
2510 x_return_status := OKL_API.G_RET_STS_ERROR;
2511 -- Unable to create quote with partial asset quantities for Evergreen contract CONTRACT_NUMBER.
2512 OKC_API.SET_MESSAGE (
2513 p_app_name => 'OKL'
2514 ,p_msg_name => 'OKL_AM_PARTIAL_LINE_EVERGREEN',
2515 p_token1 => 'CONTRACT_NUMBER',
2516 p_token1_value => l_contract_number);
2517 RAISE G_EXCEPTION_HALT_VALIDATION;
2518 END IF;
2519 */
2520
2521 -- rmunjulu 4143251 Added condition, if contract BOOKED and Partial Quote with
2522 -- Quote Effective From Date after contract end date then error
2523 IF l_sts_code IN ('BOOKED')
2524 AND ((l_partial_asset_line) OR (p_assn_tbl.COUNT < p_no_of_assets))
2525 AND (p_quot_rec.date_effective_from IS NOT NULL
2526 AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
2527 AND TRUNC(p_quot_rec.date_effective_from) > TRUNC(l_k_end_date)) THEN
2528
2529 x_return_status := OKL_API.G_RET_STS_ERROR;
2530
2531
2532 -- Unable to create partial quote for contract CONTRACT_NUMBER with quote Effective From Date QUOTE_EFF_DATE
2533 -- after contract End Date END_DATE.
2534 OKL_API.SET_MESSAGE (
2535 p_app_name => 'OKL',
2536 p_msg_name => 'OKL_AM_PARTIAL_BOOKED_K_ERR',
2537 p_token1 => 'CONTRACT_NUMBER',
2538 p_token1_value => l_contract_number,
2539 p_token2 => 'QUOTE_EFF_DATE',
2540 p_token2_value => TRUNC(p_quot_rec.date_effective_from),
2541 p_token3 => 'END_DATE',
2542 p_token3_value => TRUNC(l_k_end_date));
2543
2544 RAISE G_EXCEPTION_HALT_VALIDATION;
2545 END IF;
2546
2547
2548 IF (is_debug_statement_on) THEN
2549 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2550 'before call to OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done :'||l_return_status);
2551 END IF;
2552 -- rmunjulu LOANS_ENHANCEMENTS -- Check interest calculation done
2553
2554 --SECHAWLA 20-JAN-06 4970009 : The following interest calculation check
2555 --will also be done for lease contracts, with interest calculation basis 'FLOAT_FACTORS','REAMORT'
2556 --modifying OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done
2557 --no code changes done in this file for bug 4970009
2558 l_int_calc_done := OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done(
2559 p_contract_id => p_quot_rec.khr_id,
2560 p_contract_number => l_contract_number,
2561 p_source => 'CREATE',
2562 p_trn_date => TRUNC(p_quot_rec.date_effective_from));
2563 IF (is_debug_statement_on) THEN
2564 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2565 'After call to OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done :'||l_return_status);
2566 END IF;
2567
2568 IF l_int_calc_done IS NULL OR l_int_calc_done = 'N' THEN
2569
2570 -- Message will be set in called procedure
2571 RAISE G_EXCEPTION_HALT_VALIDATION;
2572 END IF;
2573
2574 --IF l_new_quote_type NOT LIKE 'TER_MAN%' THEN -- SECHAWLA 18-FEB-03 Bug # 2807201
2575 IF p_quot_rec.qtp_code NOT LIKE 'TER_MAN%' THEN --SECHAWLA 18-FEB-03 Bug # 2807201 : quote_type passed to validate quote is now the new quote type from create_tyermination_quote
2576
2577 -- SECHAWLA Bug #2680542 : Added the second condition to the following
2578 -- IF statement, to check if the quote is partial. A quote is partial
2579 -- if it has less than the total number of assets on the contract or
2580 -- has units less than the total number of units for one or more assets
2581 -- on the contract
2582
2583 -- check if partial quote
2584 IF (p_assn_tbl.COUNT < p_no_of_assets)
2585 OR (l_partial_asset_line) THEN -- added second condition
2586
2587 IF (is_debug_statement_on) THEN
2588 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2589 'before call to partial_termination_allowed :'||l_return_status);
2590 END IF;
2591 -- check partial termination allowed
2592 partial_termination_allowed(
2593 p_quot_rec => p_quot_rec,
2594 p_rule_chr_id => p_rule_chr_id,
2595 x_return_status => l_return_status,
2596 x_rule_found => l_rule_found);
2597
2598 IF (is_debug_statement_on) THEN
2599 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2600 'After call to partial_termination_allowed :'||l_return_status);
2601 END IF;
2602
2603
2604 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2605 x_return_status := OKL_API.G_RET_STS_ERROR;
2606 RAISE G_EXCEPTION_HALT_VALIDATION;
2607 ELSIF (l_rule_found = FALSE) THEN
2608 x_return_status := OKL_API.G_RET_STS_ERROR;
2609 --Partial quote for contract CONTRACT_NUMBER is not allowed.
2610 OKL_API.set_message( p_app_name => 'OKL',
2611 p_msg_name => 'OKL_AM_PARTIAL_QUOTE_NA',
2612 p_token1 => 'CONTRACT_NUMBER',
2613 p_token1_value => l_contract_number);
2614 RAISE G_EXCEPTION_HALT_VALIDATION;
2615 END IF;
2616 END IF;
2617 END IF;
2618
2619 -- SECHAWLA Bug #2680542 : set the out parameter x_partial_asset_line to
2620 -- indicate if quote involves a partial
2621 -- asset line.
2622 x_partial_asset_line := l_partial_asset_line; -- added
2623
2624 IF (is_debug_statement_on) THEN
2625 -- OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2626 -- 'x_partial_asset_line..'||x_partial_asset_line);
2627
2628 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2629 'x_msg_data..'||x_msg_data);
2630
2631 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2632 'x_msg_count..'||x_msg_count);
2633
2634 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2635 'ret status at the end.. '||x_return_status);
2636
2637 END IF;
2638
2639 IF (is_debug_procedure_on) THEN
2640 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,G_MODULE_NAME||'validate_quote ','End(-)');
2641 END IF;
2642
2643
2644 EXCEPTION
2645 WHEN G_EXCEPTION_HALT_VALIDATION THEN
2646 IF k_details_for_qte_csr%ISOPEN THEN
2647 CLOSE k_details_for_qte_csr;
2648 END IF;
2649
2650 IF get_accepted_qte_details_csr%ISOPEN THEN
2651 CLOSE get_accepted_qte_details_csr;
2652 END IF;
2653
2654 IF l_clines_csr%ISOPEN THEN
2655 CLOSE l_clines_csr;
2656 END IF;
2657
2658 IF l_linesfull_csr%ISOPEN THEN
2659 CLOSE l_linesfull_csr;
2660 END IF;
2661
2662 -- RMUNJULU 09-APR-03 2897523
2663 IF l_oks_lines_csr%ISOPEN THEN
2664 CLOSE l_oks_lines_csr;
2665 END IF;
2666
2667 x_return_status := OKL_API.G_RET_STS_ERROR;
2668
2669 WHEN OTHERS THEN
2670 IF k_details_for_qte_csr%ISOPEN THEN
2671 CLOSE k_details_for_qte_csr;
2672 END IF;
2673
2674 IF get_accepted_qte_details_csr%ISOPEN THEN
2675 CLOSE get_accepted_qte_details_csr;
2676 END IF;
2677
2678 IF l_clines_csr%ISOPEN THEN
2679 CLOSE l_clines_csr;
2680 END IF;
2681
2682 IF l_linesfull_csr%ISOPEN THEN
2683 CLOSE l_linesfull_csr;
2684 END IF;
2685
2686 -- RMUNJULU 09-APR-03 2897523
2687 IF l_oks_lines_csr%ISOPEN THEN
2688 CLOSE l_oks_lines_csr;
2689 END IF;
2690
2691 IF (is_debug_exception_on) THEN
2692 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2693 || sqlcode || ' , SQLERRM : ' || sqlerrm);
2694 END IF;
2695
2696 -- unexpected error
2697 OKL_API.set_message(p_app_name => g_app_name,
2698 p_msg_name => g_unexpected_error,
2699 p_token1 => g_sqlcode_token,
2700 p_token1_value => sqlcode,
2701 p_token2 => g_sqlerrm_token,
2702 p_token2_value => sqlerrm);
2703
2704 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2705 END validate_quote;
2706
2707
2708
2709 -- Start of comments
2710 --
2711 -- Function Name : set_currency_defaults
2712 -- Description : This procedure Defaults the Multi-Currency Columns
2713 -- Business Rules :
2714 -- Parameters : Input parameters : px_quot_rec, p_sys_date
2715 -- Version : 1.0
2716 -- History : 23-DEC-02 RMUNJULU 2726739 Created
2717 -- End of comments
2718 PROCEDURE set_currency_defaults(
2719 px_quot_rec IN OUT NOCOPY quot_rec_type,
2720 p_sys_date IN DATE,
2721 x_return_status OUT NOCOPY VARCHAR2) IS
2722
2723 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2724 l_functional_currency_code VARCHAR2(15);
2725 l_contract_currency_code VARCHAR2(15);
2726 l_currency_conversion_type VARCHAR2(30);
2727 l_currency_conversion_rate NUMBER;
2728 l_currency_conversion_date DATE;
2729
2730 l_org_id NUMBER;
2731 l_converted_amount NUMBER;
2732
2733 -- Since we do not use the amount or converted amount in TRX_Quotes table
2734 -- set a hardcoded value for the amount (and pass to to
2735 -- OKL_ACCOUNTING_UTIL.convert_to_functional_currency and get back
2736 -- conversion values )
2737 l_hard_coded_amount NUMBER := 100;
2738
2739
2740 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_currency_defaults';
2741 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2742 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2743 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2744 BEGIN
2745
2746 IF (is_debug_procedure_on) THEN
2747 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begins(+)');
2748 END IF;
2749
2750 -- Get the functional currency from AM_Util
2751 OKL_AM_UTIL_PVT.get_func_currency_org(
2752 x_org_id => l_org_id,
2753 x_currency_code => l_functional_currency_code);
2754
2755 IF (is_debug_statement_on) THEN
2756 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2757 'after call to OKL_AM_UTIL_PVT.get_func_currency_org :l_org_id :'||l_org_id);
2758 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2759 'after call to OKL_AM_UTIL_PVT.get_func_currency_org :l_functional_currency_code :'||l_functional_currency_code);
2760 END IF;
2761
2762
2763 -- Get the currency conversion details from ACCOUNTING_Util
2764 OKL_ACCOUNTING_UTIL.convert_to_functional_currency(
2765 p_khr_id => px_quot_rec.khr_id,
2766 p_to_currency => l_functional_currency_code,
2767 p_transaction_date => p_sys_date,
2768 p_amount => l_hard_coded_amount,
2769 x_return_status => l_return_status,
2770 x_contract_currency => l_contract_currency_code,
2771 x_currency_conversion_type => l_currency_conversion_type,
2772 x_currency_conversion_rate => l_currency_conversion_rate,
2773 x_currency_conversion_date => l_currency_conversion_date,
2774 x_converted_amount => l_converted_amount);
2775
2776 IF (is_debug_statement_on) THEN
2777 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2778 'after call to OKL_ACCOUNTING_UTIL.convert_to_functional_currency :'||l_return_status);
2779 END IF;
2780
2781 -- raise exception if error
2782 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2783 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2784 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2785 RAISE OKL_API.G_EXCEPTION_ERROR;
2786 END IF;
2787
2788 px_quot_rec.currency_code := l_contract_currency_code;
2789 px_quot_rec.currency_conversion_code := l_functional_currency_code;
2790
2791 -- If the functional currency is different from contract currency then set
2792 -- currency conversion columns
2793 IF l_functional_currency_code <> l_contract_currency_code THEN
2794
2795 -- Set the currency conversion columns
2796 px_quot_rec.currency_conversion_type := l_currency_conversion_type;
2797 px_quot_rec.currency_conversion_rate := l_currency_conversion_rate;
2798 px_quot_rec.currency_conversion_date := l_currency_conversion_date;
2799
2800 END IF;
2801
2802 -- Set the return status
2803 x_return_status := l_return_status;
2804
2805 IF (is_debug_procedure_on) THEN
2806 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2807 END IF;
2808
2809 EXCEPTION
2810
2811 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2812
2813 x_return_status := OKL_API.G_RET_STS_ERROR;
2814
2815 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2816
2817 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2818
2819 WHEN OTHERS THEN
2820
2821 -- unexpected error
2822 OKL_API.set_message(
2823 p_app_name => 'OKC',
2824 p_msg_name => g_unexpected_error,
2825 p_token1 => g_sqlcode_token,
2826 p_token1_value => sqlcode,
2827 p_token2 => g_sqlerrm_token,
2828 p_token2_value => sqlerrm);
2829
2830 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2831
2832 END set_currency_defaults;
2833
2834
2835 -- Start of comments
2836 --
2837 -- Procedure Name : get_net_gain_loss
2838 -- Description : returns the net gain loss on a termination quote
2839 -- Business Rules :
2840 -- Parameters : IN parameters - quote header, contract id
2841 -- : OUT parameters - net gain loss, return status
2842 -- Version : 1.0
2843 -- History : rkuttiya created 15-SEP-2003 Bug: 2794685
2844 -- : RMUNJULU 2794685 Added comments
2845 -- : rmunjulu 3797384 Added code for passing quote_eff_from date
2846 -- and quote_id to formula engine
2847 -- rmunjulu EDAT 29-Dec-04 did to_char to convert to right format
2848
2849 PROCEDURE Get_Net_Gain_Loss(
2850 p_quote_rec IN quot_rec_type,
2851 p_chr_id IN NUMBER,
2852 x_return_status OUT NOCOPY VARCHAR2,
2853 x_net_gain_loss OUT NOCOPY NUMBER) IS
2854
2855 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
2856 l_rule_code CONSTANT VARCHAR2(30) := 'AMGALO';
2857 l_rgd_code VARCHAR2(30);
2858 l_qtev_rec okl_trx_quotes_pub.qtev_rec_type;
2859 l_rule_khr_id NUMBER;
2860
2861
2862 l_calc_option VARCHAR2(150);
2863 l_fixed_value NUMBER;
2864 l_formula_name VARCHAR2(150);
2865
2866 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
2867 l_params OKL_EXECUTE_FORMULA_PUB.ctxt_val_tbl_type;
2868 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'Get_Net_Gain_Loss';
2869 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2870 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2871 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2872 BEGIN
2873
2874 IF (is_debug_procedure_on) THEN
2875 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
2876 END IF;
2877
2878 l_qtev_rec.khr_id := p_quote_rec.khr_id;
2879 l_qtev_rec.qtp_code := p_quote_rec.qtp_code;
2880
2881 IF l_qtev_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
2882 l_rgd_code := 'AVTGAL';
2883 ELSE
2884 l_rgd_code := 'AMTGAL';
2885 END IF;
2886
2887 --get the rule attributes
2888 l_rule_khr_id := okl_am_util_pvt.get_rule_chr_id (l_qtev_rec);
2889
2890 IF (is_debug_statement_on) THEN
2891 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2892 'Before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
2893 END IF;
2894
2895 OKL_AM_UTIL_PVT.get_rule_record(
2896 p_rgd_code => l_rgd_code,
2897 p_rdf_code => l_rule_code,
2898 p_chr_id => l_rule_khr_id,
2899 p_cle_id => NULL,
2900 x_rulv_rec => l_rulv_rec,
2901 x_return_status => l_return_status,
2902 p_message_yn => FALSE);
2903
2904 IF (is_debug_statement_on) THEN
2905 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2906 'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
2907 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2908 'l_rgd_code :'||l_rgd_code);
2909 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2910 'l_rule_code :'||l_rule_code);
2911 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2912 'l_rule_khr_id :'||l_rule_khr_id);
2913 END IF;
2914
2915 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
2916 l_calc_option := l_rulv_rec.rule_information1;
2917 l_fixed_value := NVL (To_Number (l_rulv_rec.rule_information2), 0);
2918 l_formula_name := l_rulv_rec.rule_information3;
2919 END IF;
2920
2921 IF l_calc_option = 'NOT_APPLICABLE' THEN -- Net Gain/Loss Option is NOT APPLICABLE
2922
2923 x_net_gain_loss := 0;
2924
2925 ELSIF l_calc_option = 'USE_FIXED_AMOUNT' THEN -- Net Gain/Loss Option is FIXED AMOUNT
2926
2927 x_net_gain_loss := l_fixed_value;
2928
2929 ELSIF l_calc_option = 'USE_FORMULA' THEN -- Net Gain/Loss Option is FORMULA
2930
2931 l_params(1).name := 'QUOTE_ID';
2932 l_params(1).value := p_quote_rec.id;
2933
2934 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
2935
2936 -- set the operands for formula engine with quote_effective_from date
2937 l_params(2).name := 'quote_effective_from_date';
2938 l_params(2).value := to_char(p_quote_rec.date_effective_from, 'MM/DD/YYYY'); -- rmunjulu EDAT 29-Dec-04 did to_char to convert to right format
2939
2940 -- set the operands for formula engine with quote_id
2941 l_params(3).name := 'quote_id';
2942 l_params(3).value := to_char(p_quote_rec.id);
2943
2944 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End ++++++++++++++++
2945 IF (is_debug_statement_on) THEN
2946 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2947 'Before call to OKL_AM_UTIL_PVT.get_formula_value :'||l_return_status);
2948 END IF;
2949 -- Get the formula value for the formula for Net Gain/Loss Formula
2950 OKL_AM_UTIL_PVT.get_formula_value (
2951 p_formula_name => l_formula_name,
2952 p_chr_id => l_rule_khr_id,
2953 p_cle_id => NULL,
2954 p_additional_parameters => l_params,
2955 x_formula_value => x_net_gain_loss,
2956 x_return_status => l_return_status);
2957 IF (is_debug_statement_on) THEN
2958 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2959 'after call to OKL_AM_UTIL_PVT.get_formula_value :'||l_return_status);
2960 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2961 'l_formula_name :'||l_formula_name);
2962 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2963 'l_rule_khr_id :'||l_rule_khr_id);
2964 END IF;
2965
2966 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2967 x_net_gain_loss := 0;
2968 --RAISE OKL_API.G_EXCEPTION_ERROR;
2969 END IF;
2970 ELSE
2971 x_net_gain_loss := 0;
2972 END IF;
2973
2974 IF (is_debug_procedure_on) THEN
2975 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2976 END IF;
2977
2978 EXCEPTION
2979 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2980 x_return_status := OKL_API.G_RET_STS_ERROR;
2981 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2982 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2983 WHEN OTHERS THEN
2984 IF (is_debug_exception_on) THEN
2985 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2986 || sqlcode || ' , SQLERRM : ' || sqlerrm);
2987 END IF;
2988
2989 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2990 OKL_API.set_message(p_app_name => g_app_name,
2991 p_msg_name => g_unexpected_error,
2992 p_token1 => g_sqlcode_token,
2993 p_token1_value => sqlcode,
2994 p_token2 => g_sqlerrm_token,
2995 p_token2_value => sqlerrm);
2996 END Get_Net_Gain_Loss;
2997
2998
2999 -- Start of comments
3000 --
3001 -- Procedure Name : create_terminate_quote
3002 -- Description : create the terminate quote
3003 -- Business Rules :
3004 -- Parameters : quote header, quote lines
3005 -- Version : 1.0
3006 -- History : SECHAWLA 25-NOV-02 - Bug #2680542 :
3007 -- 1) Added x_partial_asset_line out parameter to validate_quote
3008 -- procedure call
3009 -- 2) used x_partial_asset_line parameter later in the procedure
3010 -- to check if quote includes partial asset line.
3011 -- 3) removed the code to populate l_asset_tbl as it is no longer
3012 -- required to be passed to calculate quote api.
3013 -- 4) passed lp_assn_tbl instead of l_asset_tbl to calculate quote
3014 -- api as the calculate quote api now uses the same asset
3015 -- record structure as the create quote api.
3016 -- 5) Removed DEFAULT from procedure parameters.
3017 --
3018 -- : SECHAWLA 06-DEC-02 - Bug # 2699412 :
3019 -- 1) Change the quote type from Auto to Manual,
3020 -- if Auto Quotes are not allowed
3021 -- 2) Call send quote WF only for Auto Quotes
3022 -- 3) If quote type changed from Auto to Manual, then
3023 -- notify manual termination quotes REP
3024 -- : RMUNJULU 23-DEC-02 2726739 Multi-currency changes, default
3025 -- currency columns
3026 -- : SECHAWLA 02-JAN-03 2724951 : Changed the event name for
3027 -- Notify Manual Quote Rep WF
3028 -- : GKADARKA 06-JAN-03 2683876 Added code to check for non
3029 -- terminated assets in cursor
3030 -- : SECHAWLA 16-JAN-02 Bug # 2754280 : Changed the call to fn
3031 -- get_user_profile_option_name to refer it from am util
3032 -- : SECHAWLA 14-FEB-03 Bug 2749690 : Added code to update the
3033 -- quote header with total net investment,
3034 -- unbilled rec and residual value from all the quote lines
3035 -- : RMUNJULU 18-FEB-03 2804703 Chngd cursor to get active lines
3036 -- : SECHAWLA 18-FEB-03 2807201 Moved the check_quote_type procedure call from
3037 -- validate quote to the beginning if this procedure.
3038 -- : SECHAWLA 28-FEB-03 2757175 Modified the Manual Quote notification message to
3039 -- display the profile value and not the underlying ID.
3040 -- : SECHAWLA 14-APR-03 2902588 Changed the standard REQUIRED message to OKL_AM_NO_VENDOR_PROGRAM
3041 -- in the not null validation of l_rule_chr_id
3042 -- : SECHAWLA 15-APR-03 2902588 Changed the fetch order of columns in cur_k_end_date cursor.
3043 -- : SECHAWLA 03-OCT-03 ER 2777984 Calculate Quote Payments for a partial termination quote
3044 -- : RMUNJULU 3241502 Added code to set split_asset_number with UPPER CASE
3045 -- : rmunjulu 3842101 changed code so that gainloss is done after quote updated for net investment
3046 -- : RMUNJULU EDT 3797384 Added code to default eff_from_date and
3047 -- changed condition to check for early termination yn
3048 -- : RMUNJULU LOANS_ENHANCEMENTS Add code to evaluate and populate perdiem amount
3049 -- : SECHAWLA 15-Jun-09 7383445 Added new parameter p_term_from_intf
3050 -- End of comments
3051 PROCEDURE create_terminate_quote(
3052 p_api_version IN NUMBER,
3053 p_init_msg_list IN VARCHAR2 ,
3054 x_return_status OUT NOCOPY VARCHAR2,
3055 x_msg_count OUT NOCOPY NUMBER,
3056 x_msg_data OUT NOCOPY VARCHAR2,
3057 p_quot_rec IN quot_rec_type,
3058 p_assn_tbl IN assn_tbl_type,
3059 p_qpyv_tbl IN qpyv_tbl_type ,
3060 x_quot_rec OUT NOCOPY quot_rec_type,
3061 x_tqlv_tbl OUT NOCOPY tqlv_tbl_type,
3062 x_assn_tbl OUT NOCOPY assn_tbl_type,
3063 p_term_from_intf IN VARCHAR2 DEFAULT 'N') AS
3064
3065 -- SECHAWLA 14-APR-03 2902588 : Added contract_number in the SELECT clause. Changed FROM claue to use
3066 -- okc_k_headers_b instead of okc_k_headers_v
3067 -- Cursor to get the end date of the contract
3068 CURSOR cur_k_end_date ( p_chr_id NUMBER) IS
3069 SELECT contract_number, end_date
3070 FROM OKC_K_HEADERS_B
3071 WHERE id = p_chr_id;
3072
3073 -- Cursor to get the number of financial assets for the contract
3074 -- Outer join with line styles in UV... but gives error here in calculate quote
3075 -- GKADARKA 06-JAN-03 2683876 Added code to check for non terminated assets
3076 -- RMUNJULU 18-FEB-03 2804703 Changed cursor to check for active lines only
3077 CURSOR cur_k_assets ( p_chr_id NUMBER ) IS
3078 SELECT COUNT(OKLV.id )
3079 FROM OKC_K_LINES_V OKLV,
3080 OKC_LINE_STYLES_V OLSV,
3081 OKC_K_HEADERS_V KHR
3082 WHERE OKLV.lse_id = OLSV.id
3083 AND OLSV.lty_code = 'FREE_FORM1'
3084 AND OKLV.chr_id = p_chr_id
3085 AND OKLV.sts_code = KHR.sts_code
3086 AND OKLV.chr_id = KHR.id;
3087 --AND OKLV.date_terminated IS NULL; -- RMUNJULU 18-FEB-03 2804703 removed
3088
3089 --SECHAWLA 28-FEB-03 Bug # 2757175 : Added the following cursor
3090 -- This cursor isused to get the display name for a role
3091 CURSOR l_wfroles_csr(p_name wf_roles.name%TYPE) IS
3092 SELECT display_name
3093 FROM wf_roles
3094 WHERE name = p_name;
3095
3096 l_display_name wf_roles.display_name%TYPE;
3097 lx_contract_status VARCHAR2(200);
3098 --SECHAWLA 28-FEB-03 Bug # 2757175 : end new declarations
3099
3100 lp_quot_rec quot_rec_type := p_quot_rec;
3101 lx_quot_rec quot_rec_type;
3102 lp_assn_tbl assn_tbl_type := p_assn_tbl;
3103 lx_assn_tbl assn_tbl_type := p_assn_tbl;
3104 lx_tqlv_tbl tqlv_tbl_type;
3105 l_qpyv_tbl qpyv_tbl_type;
3106 l_quote_eff_days NUMBER;
3107 l_quote_eff_max_days NUMBER;
3108 l_days_before_k_exp NUMBER;
3109 l_api_version CONSTANT NUMBER := 1;
3110 l_api_name CONSTANT VARCHAR2(30) := 'create_terminate_quote';
3111 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3112 l_no_of_assets NUMBER := -1;
3113 l_k_end_date DATE;
3114 l_sys_date DATE;
3115 i NUMBER := 0;
3116 l_rule_chr_id NUMBER;
3117 l_event_name VARCHAR2(2000);
3118 lx_partial_asset_line BOOLEAN;
3119
3120 lx_auto_to_manual BOOLEAN := FALSE; --added
3121 lx_new_quote_type VARCHAR2(30); --added
3122 l_user_profile_name VARCHAR2(240); --added
3123 l_manual_quote_rep VARCHAR2(320); --added
3124
3125 --SECHAWLA 14-FEB-03 Bug 2749690 : new declarations
3126 l_total_net_investment NUMBER := 0;
3127 l_total_unbilled_rec NUMBER := 0;
3128 l_total_residual_value NUMBER := 0;
3129 lp_empty_quot_rec quot_rec_type;
3130
3131 -- SECHAWLA 14-APR-03 2902588 : New Declarations
3132 l_contract_number okc_k_headers_b.contract_number%TYPE;
3133
3134 --rkuttiya 15-SEP-2003 for bug: 2794685
3135 lx_net_gain_loss NUMBER;
3136
3137 -- rmunjulu LOANS_ENHANCEMENTS
3138 l_per_diem_amt NUMBER;
3139 l_params OKL_EXECUTE_FORMULA_PUB.ctxt_val_tbl_type;
3140
3141 L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'create_terminate_quote';
3142 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3143 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3144 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3145 BEGIN
3146
3147 IF (is_debug_procedure_on) THEN
3148 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
3149 END IF;
3150
3151 --Print Input Variables
3152 IF (is_debug_statement_on) THEN
3153 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3154 'p_api_version :'||p_api_version);
3155 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3156 'p_init_msg_list :'||p_init_msg_list);
3157 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.id : '||p_quot_rec.id );
3158 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qrs_code : '||p_quot_rec.qrs_code );
3159 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qst_code : '||p_quot_rec.qst_code );
3160 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_qte_id : '||p_quot_rec.consolidated_qte_id );
3161 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.khr_id : '||p_quot_rec.khr_id );
3162 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.art_id : '||p_quot_rec.art_id );
3163 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qtp_code : '||p_quot_rec.qtp_code );
3164 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.trn_code : '||p_quot_rec.trn_code );
3165 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.pdt_id : '||p_quot_rec.pdt_id );
3166 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_from : '||p_quot_rec.date_effective_from );
3167 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.quote_number : '||p_quot_rec.quote_number );
3168 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.early_termination_yn : '||p_quot_rec.early_termination_yn );
3169 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.partial_yn : '||p_quot_rec.partial_yn );
3170 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.preproceeds_yn : '||p_quot_rec.preproceeds_yn );
3171 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.summary_format_yn : '||p_quot_rec.summary_format_yn );
3172 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_yn : '||p_quot_rec.consolidated_yn );
3173 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_requested : '||p_quot_rec.date_requested );
3174 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_proposal : '||p_quot_rec.date_proposal );
3175 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_to : '||p_quot_rec.date_effective_to );
3176 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_accepted : '||p_quot_rec.date_accepted );
3177 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.payment_received_yn : '||p_quot_rec.payment_received_yn );
3178 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.requested_by : '||p_quot_rec.requested_by );
3179 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.approved_yn : '||p_quot_rec.approved_yn );
3180 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.accepted_yn : '||p_quot_rec.accepted_yn );
3181 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.org_id : '||p_quot_rec.org_id );
3182 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.purchase_amount : '||p_quot_rec.purchase_amount );
3183 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.purchase_formula : '||p_quot_rec.purchase_formula );
3184 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.asset_value : '||p_quot_rec.asset_value );
3185 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.residual_value : '||p_quot_rec.residual_value );
3186 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.unbilled_receivables : '||p_quot_rec.unbilled_receivables );
3187 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.gain_loss : '||p_quot_rec.gain_loss );
3188 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.PERDIEM_AMOUNT : '||p_quot_rec.PERDIEM_AMOUNT );
3189 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.currency_code : '||p_quot_rec.currency_code );
3190 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.currency_conversion_code : '||p_quot_rec.currency_conversion_code );
3191 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.legal_entity_id : '||p_quot_rec.legal_entity_id );
3192 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.repo_quote_indicator_yn : '||p_quot_rec.repo_quote_indicator_yn );
3193
3194 IF (p_assn_tbl.COUNT > 0) THEN
3195 FOR i IN p_assn_tbl.FIRST..p_assn_tbl.LAST LOOP
3196
3197 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_id :'|| p_assn_tbl(i).p_asset_id );
3198 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_number :'|| p_assn_tbl(i).p_asset_number );
3199 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_qty :'|| p_assn_tbl(i).p_asset_qty );
3200 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_quote_qty :'|| p_assn_tbl(i).p_quote_qty );
3201 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_split_asset_number :'|| p_assn_tbl(i).p_split_asset_number);
3202 End loop;
3203 END IF;
3204
3205 END IF;
3206
3207
3208 IF (is_debug_statement_on) THEN
3209 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3210 'before call to OKL_API.START_ACTIVITY :'||l_return_status);
3211 END IF;
3212
3213
3214
3215
3216
3217 --Check API version, initialize message list and create savepoint.
3218 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
3219 G_PKG_NAME,
3220 p_init_msg_list,
3221 l_api_version,
3222 p_api_version,
3223 '_PVT',
3224 x_return_status);
3225
3226 IF (is_debug_statement_on) THEN
3227 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3228 'after call to OKL_API.START_ACTIVITY :'||l_return_status);
3229 END IF;
3230
3231 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3232 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3233 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3234 RAISE OKL_API.G_EXCEPTION_ERROR;
3235 END IF;
3236
3237 SELECT SYSDATE INTO l_sys_date FROM DUAL;
3238
3239 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
3240 -- RMUNJULU EDT 3797384 default the date effective from in the beginning
3241 IF lp_quot_rec.date_effective_from IS NULL
3242 OR lp_quot_rec.date_effective_from = OKL_API.G_MISS_DATE THEN
3243
3244 lp_quot_rec.date_effective_from := l_sys_date;
3245
3246 END IF;
3247 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End ++++++++++++++++
3248
3249 -- SECHAWLA 28-FEB-03 Bug # 2757175 : Moved the following validation from validate_contract procedure
3250
3251 -- Call the validate contract to check contract status
3252
3253 IF (is_debug_statement_on) THEN
3254 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3255 'before call to OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract :'||l_return_status);
3256 END IF;
3257
3258
3259 OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract(
3260 p_api_version => p_api_version,
3261 p_init_msg_list => OKL_API.G_FALSE,
3262 x_return_status => l_return_status,
3263 x_msg_count => x_msg_count,
3264 x_msg_data => x_msg_data,
3265 p_contract_id => lp_quot_rec.khr_id,
3266 p_control_flag => 'TRMNT_QUOTE_CREATE',
3267 x_contract_status => lx_contract_status);
3268
3269 IF (is_debug_statement_on) THEN
3270 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3271 'after call to OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract :'||l_return_status);
3272 END IF;
3273
3274 -- If error then above api will set the message, so exit now
3275 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3276 x_return_status := OKL_API.G_RET_STS_ERROR;
3277 RAISE OKL_API.G_EXCEPTION_ERROR;
3278 END IF;
3279 -- SECHAWLA 28-FEB-03 Bug # 2757175 :end moved code
3280
3281 OPEN cur_k_end_date(lp_quot_rec.khr_id);
3282 -- SECHAWLA 14-APR-03 2902588 : fetched the new column : contract_number
3283 FETCH cur_k_end_date INTO l_contract_number, l_k_end_date ; -- SECHAWLA 15-APR-03 2902588 : Changed the fetch order of columns
3284 IF cur_k_end_date%NOTFOUND THEN
3285 l_k_end_date := OKL_API.G_MISS_DATE;
3286 END IF;
3287 CLOSE cur_k_end_date;
3288
3289 OPEN cur_k_assets (lp_quot_rec.khr_id);
3290 FETCH cur_k_assets INTO l_no_of_assets;
3291 IF cur_k_assets%NOTFOUND THEN
3292 l_no_of_assets := -1;
3293 END IF;
3294 CLOSE cur_k_assets;
3295
3296 -- SECHAWLA 18-FEB-03 Bug # 2807201 : Moved the quote_type_check procedure call here from vaidate_quote
3297 -- as we want to validate and change the quote type (if required) in the beginning, before any other processing
3298 -- check if quote type is valid
3299 lx_new_quote_type := lp_quot_rec.qtp_code; ---SECHAWLA 2699412 added
3300
3301 -- rmunjulu 4923976 : added if check so that quote type check should not be done for TER_RELEASE_WO_PURCHASE quote
3302 IF lp_quot_rec.qtp_code <> 'TER_RELEASE_WO_PURCHASE' THEN
3303
3304 IF (is_debug_statement_on) THEN
3305 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3306 'before call to quote_type_check :'||l_return_status);
3307 END IF;
3308 quote_type_check(
3309 -- p_qtp_code => p_quot_rec.qtp_code, -- SECHAWLA 2699412
3310 p_qtp_code => lx_new_quote_type, -- SECHAWLA 2699412 changed
3311 p_khr_id => lp_quot_rec.khr_id, -- SECHAWLA 02-JAN-03 Added
3312 x_auto_to_manual => lx_auto_to_manual, -- -SECHAWLA 2699412 added
3313 x_return_status => l_return_status);
3314
3315 IF (is_debug_statement_on) THEN
3316 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3317 'after call to quote_type_check :'||l_return_status);
3318 END IF;
3319
3320 END IF; -- rmunjulu 4923976
3321
3322 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3323 x_return_status := OKL_API.G_RET_STS_ERROR;
3324 --Please select a valid Quote Type.
3325 OKL_API.set_message( p_app_name => 'OKL',
3326 p_msg_name =>'OKL_AM_QTP_CODE_INVALID');
3327 RAISE OKL_API.G_EXCEPTION_ERROR; -- SECHAWLA 28-FEB-03 Bug 2757175 : Changed the exception name as a result
3328 -- of moving this procedure from validate_quote on 18-FEB-03 Bug # 2807201
3329 END IF;
3330
3331 --SECHAWLA 06-DEC-02 - Bug # 2699412 -- Added
3332 IF (lx_auto_to_manual) THEN
3333 lp_quot_rec.qtp_code := lx_new_quote_type;
3334 END IF;
3335
3336 -- SECHAWLA 18-FEB-03 Bug # 2807201 : end moved code
3337
3338 l_rule_chr_id := okl_am_util_pvt.get_rule_chr_id (lp_quot_rec);
3339
3340 -- SECHAWLA 28-FEB-03 Bug # 2757175 : Added a not null validation for l_rule_chr_id
3341 IF l_rule_chr_id IS NULL THEN
3342 x_return_status := OKL_API.G_RET_STS_ERROR;
3343 -- SECHAWLA 14-APR-03 2902588 : Use the following message instead of the standard REQUIRED message
3344
3345 --Unable to create quote because the contract CONTRACT_NUMBER does not have an associated vendor program.
3346 OKC_API.set_message( p_app_name => 'OKL',
3347 p_msg_name => 'OKL_AM_NO_VENDOR_PROGRAM',
3348 p_token1 => 'CONTRACT_NUMBER',
3349 p_token1_value => l_contract_number);
3350 RAISE OKL_API.G_EXCEPTION_ERROR;
3351 END IF;
3352
3353 -- SECHAWLA Bug # 2699412 : Moved the following code here so that
3354 -- l_days_before_k_exp can be passed to validate_quote
3355 -- to check for early terminations
3356
3357
3358 IF (is_debug_statement_on) THEN
3359 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3360 'before call to term_status :'||l_return_status);
3361 END IF;
3362 -- set term status from rules
3363 term_status(
3364 p_quot_rec => lp_quot_rec,
3365 p_rule_chr_id => l_rule_chr_id,
3366 x_days_before_k_exp => l_days_before_k_exp,
3367 x_return_status => l_return_status);
3368
3369 IF (is_debug_statement_on) THEN
3370 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3371 'after call to term_status :'||l_return_status);
3372 END IF;
3373
3374 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3375 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3376 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3377 RAISE OKL_API.G_EXCEPTION_ERROR;
3378 END IF;
3379 -- end moved code
3380
3381 -- SECHAWLA Bug #2680542 : Added x_partial_asset_line parameter to
3382 -- validate_quote procedure call
3383 -- check if quote valid
3384 IF (is_debug_statement_on) THEN
3385 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3386 'before call to validate_quote :'||l_return_status);
3387 END IF;
3388
3389 validate_quote(
3390 p_api_version => p_api_version,
3391 p_init_msg_list => OKL_API.G_FALSE,
3392 x_return_status => l_return_status,
3393 x_msg_count => x_msg_count,
3394 x_msg_data => x_msg_data,
3395 p_quot_rec => lp_quot_rec,
3396 p_assn_tbl => lp_assn_tbl,
3397 p_k_end_date => l_k_end_date,
3398 p_no_of_assets => l_no_of_assets,
3399 p_sys_date => l_sys_date,
3400 p_rule_chr_id => l_rule_chr_id,
3401 p_days_before_k_exp => l_days_before_k_exp, --SECHAWLA 06-DEC-02 2699412 added
3402 x_partial_asset_line => lx_partial_asset_line);
3403
3404 IF (is_debug_statement_on) THEN
3405 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3406 'after call to validate_quote :'||l_return_status);
3407 END IF;
3408
3409 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3410 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3411 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3412 RAISE OKL_API.G_EXCEPTION_ERROR;
3413 END IF;
3414
3415 -- RMUNJULU 3241502 Added code to set split_asset_number with UPPER CASE
3416 IF (lp_assn_tbl.COUNT > 0) THEN
3417 FOR i IN lp_assn_tbl.FIRST..lp_assn_tbl.LAST LOOP
3418
3419 IF lp_assn_tbl(i).p_split_asset_number IS NOT NULL
3420 AND lp_assn_tbl(i).p_split_asset_number <> OKL_API.G_MISS_CHAR THEN
3421 lp_assn_tbl(i).p_split_asset_number := UPPER(lp_assn_tbl(i).p_split_asset_number);
3422 END IF;
3423 END LOOP;
3424 END IF;
3425
3426 IF (is_debug_statement_on) THEN
3427 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3428 'before call to quote_effectivity :'||l_return_status);
3429 END IF;
3430 -- set the date eff to from rules
3431 quote_effectivity(
3432 p_quot_rec => lp_quot_rec,
3433 p_rule_chr_id => l_rule_chr_id,
3434 x_quote_eff_days => l_quote_eff_days,
3435 x_quote_eff_max_days => l_quote_eff_max_days,
3436 x_return_status => l_return_status);
3437
3438 IF (is_debug_statement_on) THEN
3439 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3440 'after call to quote_effectivity :'||l_return_status);
3441 END IF;
3442
3443 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3444 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3445 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3446 RAISE OKL_API.G_EXCEPTION_ERROR;
3447 END IF;
3448
3449 -- check if early termination
3450 IF (lp_quot_rec.early_termination_yn IS NULL)
3451 OR (lp_quot_rec.early_termination_yn = OKL_API.G_MISS_CHAR) THEN
3452 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
3453 -- IF (TRUNC(l_sys_date) < TRUNC(l_k_end_date) - l_days_before_k_exp) THEN
3454 -- rmunjulu EDT 3797384 changed check to check based on effective date
3455 IF (TRUNC(lp_quot_rec.date_effective_from) < TRUNC(l_k_end_date) - l_days_before_k_exp) THEN
3456 lp_quot_rec.early_termination_yn := 'Y';
3457 ELSE
3458 lp_quot_rec.early_termination_yn := 'N';
3459 END IF;
3460 --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End ++++++++++++++++
3461 END IF;
3462
3463 -- check if partial quote
3464 IF (lp_quot_rec.partial_yn IS NULL)
3465 OR (lp_quot_rec.partial_yn = OKL_API.G_MISS_CHAR) THEN
3466 -- SECHAWLA Bug #2680542 : Added (lx_partial_asset_line) condition to
3467 -- the following IF to check if the
3468 -- quote is a partial quote
3469 IF (p_assn_tbl.COUNT < l_no_of_assets)
3470 OR (lx_partial_asset_line) THEN -- added second condition
3471 lp_quot_rec.partial_yn := 'Y';
3472 ELSE
3473 lp_quot_rec.partial_yn := 'N';
3474 END IF;
3475 END IF;
3476
3477
3478 IF (is_debug_statement_on) THEN
3479 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3480 'before call to set_quote_defaults :'||l_return_status);
3481 END IF;
3482
3483 -- Set the quote defaults
3484 set_quote_defaults(
3485 px_quot_rec => lp_quot_rec,
3486 p_rule_chr_id => l_rule_chr_id,
3487 p_sys_date => l_sys_date,
3488 x_return_status => l_return_status);
3489
3490 IF (is_debug_statement_on) THEN
3491 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3492 'after call to set_quote_defaults :'||l_return_status);
3493 END IF;
3494
3495 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3496 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3497 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3498 RAISE OKL_API.G_EXCEPTION_ERROR;
3499 END IF;
3500
3501
3502
3503 IF (is_debug_statement_on) THEN
3504 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3505 'before call to set_currency_defaults :'||l_return_status);
3506 END IF;
3507
3508 -- RMUNJULU 23-DEC-02 2726739 Multi-currency changes
3509 -- Default the Multi-Currency Columns
3510 set_currency_defaults(
3511 px_quot_rec => lp_quot_rec,
3512 p_sys_date => l_sys_date,
3513 x_return_status => l_return_status);
3514
3515 IF (is_debug_statement_on) THEN
3516 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3517 'after call to set_currency_defaults :'||l_return_status);
3518 END IF;
3519
3520 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3521 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3522 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3523 RAISE OKL_API.G_EXCEPTION_ERROR;
3524 END IF;
3525
3526 IF (is_debug_statement_on) THEN
3527 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3528 'before call to OKL_TRX_QUOTES_PUB.insert_trx_quotes :'||l_return_status);
3529 END IF;
3530
3531 -- call the pub tapi insert
3532 OKL_TRX_QUOTES_PUB.insert_trx_quotes (
3533 p_api_version => p_api_version,
3534 p_init_msg_list => OKL_API.G_FALSE,
3535 x_msg_count => x_msg_count,
3536 x_msg_data => x_msg_data,
3537 p_qtev_rec => lp_quot_rec,
3538 x_qtev_rec => lx_quot_rec,
3539 x_return_status => l_return_status);
3540
3541 IF (is_debug_statement_on) THEN
3542 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3543 'after call to OKL_TRX_QUOTES_PUB.insert_trx_quotes :'||l_return_status);
3544 END IF;
3545
3546 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3547 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3548 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3549 RAISE OKL_API.G_EXCEPTION_ERROR;
3550 END IF;
3551
3552
3553 IF (is_debug_statement_on) THEN
3554 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3555 'before call to OKL_AM_PARTIES_PVT.create_quote_parties :'||l_return_status);
3556 END IF;
3557
3558 -- Create quote parties
3559 OKL_AM_PARTIES_PVT.create_quote_parties (
3560 p_qtev_rec => lx_quot_rec,
3561 p_qpyv_tbl => p_qpyv_tbl,
3562 x_qpyv_tbl => l_qpyv_tbl,
3563 x_return_status => l_return_status);
3564
3565 IF (is_debug_statement_on) THEN
3566 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3567 'after call to OKL_AM_PARTIES_PVT.create_quote_parties :'||l_return_status);
3568 END IF;
3569
3570
3571 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3572 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3573 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3574 RAISE OKL_API.G_EXCEPTION_ERROR;
3575 END IF;
3576
3577 -- call quote calculation api (pass assets tbl)
3578 -- this will insert quote lines
3579
3580 IF (is_debug_statement_on) THEN
3581 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3582 'before call to OKL_AM_CALCULATE_QUOTE_PVT.generate :'||l_return_status);
3583 END IF;
3584
3585 OKL_AM_CALCULATE_QUOTE_PVT.generate(
3586 p_api_version => p_api_version,
3587 p_init_msg_list => OKL_API.G_FALSE,
3588 x_msg_count => x_msg_count,
3589 x_msg_data => x_msg_data,
3590 p_qtev_rec => lx_quot_rec,
3591 --p_asset_tbl => l_asset_tbl, -- SECHAWLA Bug #2680542 : calculate quote api now uses the same asset
3592 p_asset_tbl => lp_assn_tbl, -- record structure as the create quote api
3593 x_tqlv_tbl => lx_tqlv_tbl,
3594 x_return_status => l_return_status);
3595
3596 IF (is_debug_statement_on) THEN
3597 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3598 'After call to OKL_AM_CALCULATE_QUOTE_PVT.generate :'||l_return_status);
3599 END IF;
3600
3601 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3602 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3603 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3604 RAISE OKL_API.G_EXCEPTION_ERROR;
3605 END IF;
3606
3607 -- SECHAWLA 14-FEB-03 2749690 : sum up the net investment, unbilled receivable and residual value amounts for
3608 -- the quote lines and store the total amounts at the quote header level
3609 IF lx_tqlv_tbl.COUNT > 0 THEN
3610 i := lx_tqlv_tbl.FIRST;
3611 LOOP
3612 IF lx_tqlv_tbl(i).qlt_code = 'AMCFIA' THEN
3613 l_total_net_investment := l_total_net_investment + lx_tqlv_tbl(i).asset_value;
3614 l_total_unbilled_rec := l_total_unbilled_rec + lx_tqlv_tbl(i).unbilled_receivables;
3615 l_total_residual_value := l_total_residual_value + lx_tqlv_tbl(i).residual_value;
3616 END IF;
3617
3618 EXIT WHEN (i = lx_tqlv_tbl.LAST);
3619 i := lx_tqlv_tbl.NEXT(i);
3620 END LOOP;
3621 END IF;
3622
3623 -- call the pub tapi update to update the above totals at the header level
3624 lp_quot_rec := lp_empty_quot_rec;
3625 lp_quot_rec.id := lx_quot_rec.id ;
3626 lp_quot_rec.asset_value := l_total_net_investment;
3627 lp_quot_rec.unbilled_receivables := l_total_unbilled_rec;
3628 lp_quot_rec.residual_value := l_total_residual_value;
3629
3630 IF (is_debug_statement_on) THEN
3631 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3632 'before call to OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3633 END IF;
3634
3635 OKL_TRX_QUOTES_PUB.update_trx_quotes (
3636 p_api_version => p_api_version,
3637 p_init_msg_list => OKL_API.G_FALSE,
3638 x_msg_count => x_msg_count,
3639 x_msg_data => x_msg_data,
3640 p_qtev_rec => lp_quot_rec,
3641 x_qtev_rec => lx_quot_rec,
3642 x_return_status => l_return_status);
3643
3644 IF (is_debug_statement_on) THEN
3645 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3646 'After call to OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3647 END IF;
3648
3649 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3650 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3651 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3652 RAISE OKL_API.G_EXCEPTION_ERROR;
3653 END IF;
3654 -- end new code
3655
3656
3657 IF (is_debug_statement_on) THEN
3658 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3659 'before call to get_net_gain_loss :'||l_return_status);
3660 END IF;
3661
3662 -- rmunjulu 3842101 moved net gain loss calculation here
3663 get_net_gain_loss(
3664 p_quote_rec =>lx_quot_rec,
3665 p_chr_id =>lx_quot_rec.khr_id,
3666 x_return_status =>l_return_status,
3667 x_net_gain_loss =>lx_net_gain_loss) ;
3668
3669
3670 IF (is_debug_statement_on) THEN
3671 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3672 'After call to get_net_gain_loss :'||l_return_status);
3673 END IF;
3674
3675 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3676 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3677 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3678 RAISE OKL_API.G_EXCEPTION_ERROR;
3679 END IF;
3680
3681 -- rmunjulu 3842101 added this code here so that formula uses calculation from quote
3682 lp_quot_rec := lp_empty_quot_rec;
3683 lp_quot_rec.id := lx_quot_rec.id ;
3684 lp_quot_rec.gain_loss := lx_net_gain_loss;
3685
3686 l_params(1).name := 'QUOTE_ID';
3687 l_params(1).value := lp_quot_rec.id;
3688
3689 IF (is_debug_statement_on) THEN
3690 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3691 'before call to OKL_AM_UTIL_PVT.get_formula_value :'||l_return_status);
3692 END IF;
3693
3694 -- rmunjulu LOANS_ENHANCEMENTS Evaluate Quote perdiem amount formula and set quote perdiem value
3695 OKL_AM_UTIL_PVT.get_formula_value(
3696 p_formula_name => 'QUOTE_PERDIEM_AMOUNT',
3697 p_chr_id => lx_quot_rec.khr_id,
3698 p_cle_id => NULL,
3699 p_additional_parameters => l_params,
3700 x_formula_value => l_per_diem_amt,
3701 x_return_status => l_return_status);
3702
3703 IF (is_debug_statement_on) THEN
3704 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3705 'After call to OKL_AM_UTIL_PVT.get_formula_value :'||l_return_status);
3706 END IF;
3707
3708 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3709 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3710 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3711 RAISE OKL_API.G_EXCEPTION_ERROR;
3712 END IF;
3713
3714 lp_quot_rec.perdiem_amount := l_per_diem_amt;
3715
3716
3717 IF (is_debug_statement_on) THEN
3718 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3719 'Before call to OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3720 END IF;
3721
3722 -- rmunjulu 3842101 update the quote header again with GAIN LOSS + PERDIEM
3723 OKL_TRX_QUOTES_PUB.update_trx_quotes (
3724 p_api_version => p_api_version,
3725 p_init_msg_list => OKL_API.G_FALSE,
3726 x_msg_count => x_msg_count,
3727 x_msg_data => x_msg_data,
3728 p_qtev_rec => lp_quot_rec,
3729 x_qtev_rec => lx_quot_rec,
3730 x_return_status => l_return_status);
3731
3732 IF (is_debug_statement_on) THEN
3733 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3734 'After call to OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3735 END IF;
3736
3737 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3738 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3739 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3740 RAISE OKL_API.G_EXCEPTION_ERROR;
3741 END IF;
3742
3743 -- rmunjulu TNA 4059175 Brought this up above the workflow processing.
3744 -- SECHAWLA 03-OCT-2003 11i10 ER 2777984:Calculate Quote Payments for a partial termination quote
3745 IF lx_quot_rec.partial_yn = 'Y' THEN
3746
3747 IF (is_debug_statement_on) THEN
3748 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3749 'Before call to OKL_AM_CALC_QUOTE_PYMNT_PVT.calc_quote_payments :'||l_return_status);
3750 END IF;
3751
3752 OKL_AM_CALC_QUOTE_PYMNT_PVT.calc_quote_payments(
3753 p_api_version => p_api_version,
3754 p_init_msg_list => OKL_API.G_FALSE,
3755 x_return_status => l_return_status,
3756 x_msg_count => x_msg_count,
3757 x_msg_data => x_msg_data,
3758 p_quote_id => lx_quot_rec.id);
3759
3760 IF (is_debug_statement_on) THEN
3761 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3762 'After call to OKL_AM_CALC_QUOTE_PYMNT_PVT.calc_quote_payments :'||l_return_status);
3763 END IF;
3764
3765 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3766 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3767 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3768 RAISE OKL_API.G_EXCEPTION_ERROR;
3769 END IF;
3770
3771 END IF;
3772 -- SECHAWLA 03-OCT-2003 11i10 ER : 2777984 end
3773
3774 /* -- rmunjulu messages come twice so this fix
3775 -- rmunjulu TNA 4059175 Added process message here to get the messages
3776 -- Save messages in database
3777 OKL_AM_UTIL_PVT.process_messages (
3778 p_trx_source_table => 'OKL_TRX_QUOTES_V',
3779 p_trx_id => lx_quot_rec.id,
3780 x_return_status => l_return_status);
3781
3782 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3783 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3784 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3785 RAISE OKL_API.G_EXCEPTION_ERROR;
3786 END IF;
3787 */
3788
3789 -- rmunjulu TNA 4059175 Added new IF to check for non Release quotes and DO send quote only for those
3790 -- sechawla bug 7383445 - Added p_term_from_intf check : raise sendquote evant for approval, only if
3791 -- auto_accept_yn is set to 'N' in termination interface table. If auto_accept_yn is set to 'Y', quote
3792 -- staus should get automatically changed to APPROVED, and approval is not needed
3793 IF (lx_new_quote_type <> 'TER_RELEASE_WO_PURCHASE' AND (p_term_from_intf = 'N')) THEN
3794
3795 -- rmunjulu TNA By this time the quote is already switched to manual if needed so will not go into this if
3796 IF lx_new_quote_type NOT LIKE 'TER_MAN%' THEN -- SECHAWLA 06-DEC-02 - Bug # 2699412 -- added
3797 -- Request quote approval and notification
3798
3799 IF (is_debug_statement_on) THEN
3800 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3801 'Before call to OKL_AM_WF.raise_business_event :'||l_return_status);
3802 END IF;
3803
3804 OKL_AM_WF.raise_business_event (
3805 p_transaction_id => lx_quot_rec.id,
3806 p_event_name => 'oracle.apps.okl.am.sendquote');
3807
3808 IF (is_debug_statement_on) THEN
3809 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3810 'After call to OKL_AM_WF.raise_business_event :'||l_return_status);
3811 END IF;
3812
3813 END IF;
3814
3815 -- SECHAWLA 06-DEC-02 - Bug # 2699412 -- Added the following program logic
3816 -- to send notification to the manual
3817 -- quote representative, if the quote type was changed from Auto to Manual
3818 IF (lx_auto_to_manual) THEN
3819
3820 -- rmunjulu messages come twice so this fix
3821 -- rmunjulu TNA 4059175 Added process message here to get the messages
3822 -- Save messages in database
3823
3824 IF (is_debug_statement_on) THEN
3825 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3826 'Before call to OKL_AM_UTIL_PVT.process_messages :'||l_return_status);
3827 END IF;
3828
3829 OKL_AM_UTIL_PVT.process_messages (
3830 p_trx_source_table => 'OKL_TRX_QUOTES_V',
3831 p_trx_id => lx_quot_rec.id,
3832 x_return_status => l_return_status);
3833
3834 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3835 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3836 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3837 RAISE OKL_API.G_EXCEPTION_ERROR;
3838 END IF;
3839
3840 -- clear the stack
3841 okl_api.init_msg_list ( p_init_msg_list => OKL_API.G_TRUE);
3842
3843 l_manual_quote_rep := fnd_profile.value('OKL_MANUAL_TERMINATION_QUOTE_REP');
3844
3845 IF l_manual_quote_rep IS NULL THEN
3846
3847
3848 IF (is_debug_statement_on) THEN
3849 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3850 'Before call to okl_am_util_pvt.get_user_profile_option_name :'||l_return_status);
3851 END IF;
3852
3853 l_user_profile_name := okl_am_util_pvt.get_user_profile_option_name(
3854 p_profile_option_name => 'OKL_MANUAL_TERMINATION_QUOTE_REP',
3855 x_return_status => l_return_status);
3856
3857 IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
3858 --Manual Quote Representative profile is missing.
3859 OKL_API.set_message( p_app_name => 'OKL',
3860 p_msg_name => 'OKL_AM_NO_MQ_REP_PROFILE');
3861
3862 RAISE okl_api.G_EXCEPTION_ERROR;
3863 ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3864 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3865 END IF;
3866
3867 x_return_status := OKL_API.G_RET_STS_ERROR;
3868
3869 --Profile value not defined
3870 OKL_API.set_message(
3871 p_app_name => 'OKL',
3872 p_msg_name => 'OKL_AM_RMK_NO_PROFILE_VALUE',
3873 p_token1 => 'PROFILE',
3874 p_token1_value => l_user_profile_name);
3875
3876 RAISE OKL_API.G_EXCEPTION_ERROR;
3877 END IF;
3878
3879 --SECHAWLA 28-FEB-03 Bug # 2757175 : get the display name for a role
3880 OPEN l_wfroles_csr(l_manual_quote_rep);
3881 FETCH l_wfroles_csr INTO l_display_name;
3882 CLOSE l_wfroles_csr;
3883
3884 IF l_display_name IS NULL THEN
3885 l_display_name := l_manual_quote_rep;
3886 END IF;
3887
3888 -- Contract only allows for manual quotes. Manual quote request
3889 -- has been sent to MAN_QUOTE_REP.
3890 OKL_API.set_message(
3891 p_app_name => 'OKL',
3892 p_msg_name => 'OKL_AM_MAN_QUOTE_ALLOWED',
3893 p_token1 => 'MAN_QUOTE_REP',
3894 p_token1_value => l_display_name); --SECHAWLA 28-FEB-03 Bug # 2757175 : Changed to show display_name
3895 -- instead of name
3896
3897 IF (is_debug_statement_on) THEN
3898 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3899 'Before call to OKL_AM_WF.raise_business_event p_event_name oracle.apps.okl.am.manualquote :'||l_return_status);
3900 END IF;
3901
3902
3903 --SECHAWLA 28-FEB-03 Bug # 2757175 : end modifications
3904 -- notify manual quote representative
3905 OKL_AM_WF.raise_business_event (
3906 p_transaction_id => lx_quot_rec.id,
3907 p_event_name => 'oracle.apps.okl.am.manualquote'); -- SECHAWLA 02-JAN-03 2724951 Changed the event name
3908
3909 -- Save messages in database
3910 OKL_AM_UTIL_PVT.process_messages (
3911 p_trx_source_table => 'OKL_TRX_QUOTES_V',
3912 p_trx_id => lx_quot_rec.id,
3913 x_return_status => l_return_status);
3914
3915 ELSE -- if not auto to manual -- rmunjulu TNA 4059175 Added this if
3916
3917 -- Save messages in database
3918 OKL_AM_UTIL_PVT.process_messages (
3919 p_trx_source_table => 'OKL_TRX_QUOTES_V',
3920 p_trx_id => lx_quot_rec.id,
3921 x_return_status => l_return_status);
3922
3923 --SECHAWLA 06-DEC-02 - Bug # 2699412 -- added the exception handling
3924 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3925 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3926 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3927 RAISE OKL_API.G_EXCEPTION_ERROR;
3928 END IF;
3929 END IF;
3930 -- SECHAWLA 06-DEC-02 - Bug # 2699412 -- end new code
3931 ELSE -- Quote is Termination Release Without Purchase -- rmunjulu TNA 4059175
3932
3933 -- Update the quote to approved directly
3934 lp_quot_rec := lp_empty_quot_rec;
3935 lp_quot_rec.id := lx_quot_rec.id ;
3936 lp_quot_rec.qst_code := 'APPROVED';
3937 lp_quot_rec.date_approved := sysdate;
3938
3939 IF (is_debug_statement_on) THEN
3940 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3941 'Before call to OKL_TRX_QUOTES_PUB.update_trx_quotes'||l_return_status);
3942 END IF;
3943
3944 -- rmunjulu TNA 4059175 update the quote header with status as APPROVED
3945 OKL_TRX_QUOTES_PUB.update_trx_quotes (
3946 p_api_version => p_api_version,
3947 p_init_msg_list => OKL_API.G_FALSE,
3948 x_msg_count => x_msg_count,
3949 x_msg_data => x_msg_data,
3950 p_qtev_rec => lp_quot_rec,
3951 x_qtev_rec => lx_quot_rec,
3952 x_return_status => l_return_status);
3953
3954 IF (is_debug_statement_on) THEN
3955 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3956 'After call to OKL_TRX_QUOTES_PUB.update_trx_quotes'||l_return_status);
3957 END IF;
3958
3959 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3960 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3961 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3962 RAISE OKL_API.G_EXCEPTION_ERROR;
3963 END IF;
3964
3965 -- Save messages in database
3966 OKL_AM_UTIL_PVT.process_messages (
3967 p_trx_source_table => 'OKL_TRX_QUOTES_V',
3968 p_trx_id => lx_quot_rec.id,
3969 x_return_status => l_return_status);
3970
3971 --SECHAWLA 06-DEC-02 - Bug # 2699412 -- added the exception handling
3972 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3973 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3974 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3975 RAISE OKL_API.G_EXCEPTION_ERROR;
3976 END IF;
3977 END IF;
3978
3979 -- set the return status and out variables
3980 x_return_status := l_return_status;
3981 x_quot_rec := lx_quot_rec;
3982 x_assn_tbl := lx_assn_tbl;
3983 x_tqlv_tbl := lx_tqlv_tbl;
3984
3985 -- end the transaction
3986 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3987
3988
3989 IF (is_debug_statement_on) THEN
3990 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3991 'x_return_status..'||x_return_status);
3992 END IF;
3993
3994 IF (is_debug_procedure_on) THEN
3995 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,G_MODULE_NAME||'create_terminate_quote. ','End(-)');
3996 END IF;
3997
3998 EXCEPTION
3999 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4000 IF cur_k_assets%ISOPEN THEN
4001 CLOSE cur_k_assets;
4002 END IF;
4003 IF cur_k_end_date%ISOPEN THEN
4004 CLOSE cur_k_end_date;
4005 END IF;
4006 --SECHAWLA 28-FEB-03 Bug # 2757175 : Close the new cursor
4007 IF l_wfroles_csr%ISOPEN THEN
4008 CLOSE l_wfroles_csr;
4009 END IF;
4010 IF (is_debug_statement_on) THEN
4011 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4012 'EXCEPTION ERROR');
4013 END IF;
4014 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4015 (
4016 l_api_name,
4017 G_PKG_NAME,
4018 'OKL_API.G_RET_STS_ERROR',
4019 x_msg_count,
4020 x_msg_data,
4021 '_PVT'
4022 );
4023 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4024 IF cur_k_assets%ISOPEN THEN
4025 CLOSE cur_k_assets;
4026 END IF;
4027 IF cur_k_end_date%ISOPEN THEN
4028 CLOSE cur_k_end_date;
4029 END IF;
4030 --SECHAWLA 28-FEB-03 Bug # 2757175 : Close the new cursor
4031 IF l_wfroles_csr%ISOPEN THEN
4032 CLOSE l_wfroles_csr;
4033 END IF;
4034 IF (is_debug_statement_on) THEN
4035 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4036 'UNEXPECTED EXCEPTION ERROR');
4037 END IF;
4038 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
4039 (
4040 l_api_name,
4041 G_PKG_NAME,
4042 'OKL_API.G_RET_STS_UNEXP_ERROR',
4043 x_msg_count,
4044 x_msg_data,
4045 '_PVT'
4046 );
4047 WHEN OTHERS THEN
4048 IF cur_k_assets%ISOPEN THEN
4049 CLOSE cur_k_assets;
4050 END IF;
4051 IF cur_k_end_date%ISOPEN THEN
4052 CLOSE cur_k_end_date;
4053 END IF;
4054 --SECHAWLA 28-FEB-03 Bug # 2757175 : Close the new cursor
4055 IF l_wfroles_csr%ISOPEN THEN
4056 CLOSE l_wfroles_csr;
4057 END IF;
4058 IF (is_debug_statement_on) THEN
4059 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4060 'OTHER EXCEPTION ERROR');
4061 END IF;
4062 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
4063 (
4064 l_api_name,
4065 G_PKG_NAME,
4066 'OTHERS',
4067 x_msg_count,
4068 x_msg_data,
4069 '_PVT'
4070 );
4071 END create_terminate_quote;
4072
4073 FUNCTION check_repo_quote(p_quote_id IN VARCHAR2,
4074 x_return_status OUT NOCOPY VARCHAR2)
4075 RETURN VARCHAR2 IS
4076 l_repo_yn VARCHAR2(1);
4077
4078 CURSOR check_repo_csr(p_quote_id IN NUMBER) IS
4079 SELECT NVL(repo_quote_indicator_yn,'N')
4080 FROM OKL_TRX_QUOTES_B
4081 WHERE id = p_quote_id;
4082
4083 BEGIN
4084 -- Check whether the quote is for Repossession
4085 OPEN check_repo_csr(p_quote_id);
4086 FETCH check_repo_csr INTO l_repo_yn;
4087 CLOSE check_repo_csr;
4088
4089 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4090 RETURN l_repo_yn;
4091 EXCEPTION
4092 WHEN OTHERS THEN
4093
4094 IF check_repo_csr%ISOPEN THEN
4095 CLOSE check_repo_csr;
4096 END IF;
4097 x_return_status := OKL_API.G_RET_STS_ERROR;
4098 END;
4099
4100
4101
4102 END OKL_AM_CREATE_QUOTE_PVT;