DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_AM_RESTRUCTURE_RENTS_PVT

Source


1 PACKAGE BODY      OKL_AM_RESTRUCTURE_RENTS_PVT AS
2  /* $Header: OKLRRSRB.pls 120.2 2005/10/30 04:36:28 appldev noship $ */
3 
4 
5   -- Start of comments
6   --
7   -- Procedure Name	: initiate_request
8   -- Description	: Initiates the out bound request to super trump after
9   --			  getting the contract details that supertrump needs along
10   --			  with new restructure details for the contract
11   -- Business Rules	:
12   -- Parameters		:
13   -- Version		: 1.0
14   --
15   -- End of comments
16 
17   PROCEDURE initiate_request(
18 	p_api_version               IN  NUMBER,
19 	p_init_msg_list             IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
20 	p_quote_id                  IN  OKL_TRX_QUOTES_B.ID%TYPE,
21 	x_return_status             OUT NOCOPY VARCHAR2,
22 	x_msg_count                 OUT NOCOPY NUMBER,
23 	x_msg_data                  OUT NOCOPY VARCHAR2,
24 	x_request_id                OUT NOCOPY NUMBER,
25 	x_trans_status              OUT NOCOPY VARCHAR2) IS
26 
27     CURSOR l_qtev_csr (p_quote_id IN OKL_TRX_QUOTES_B.ID%TYPE) IS
28 	SELECT	qte.id,
29 		qte.khr_id,
30 		qte.term,
31 		qte.pop_code_end,
32 		qte.purchase_amount,
33 		qte.purchase_formula,
34 		khr.after_tax_yield,
35 		khr.term_duration
36 	FROM	okl_trx_quotes_v	qte,
37 		okl_k_headers		khr
38 	WHERE	qte.id			= p_quote_id
39 	AND	khr.id			= qte.khr_id;
40 
41      -- SMODUGA 11-Oct-04 Bug 3925469
42      -- Modified cursor by passing sty_id based on the purspose and
43      -- removed reference to stream type view.
44     CURSOR l_stream_csr (cp_contract_id IN NUMBER,cp_sty_id IN NUMBER) IS
45 	SELECT	ste.stream_element_date	start_date,
46 		SUM (ste.amount)	amount
47 	FROM	okl_strm_elements	ste,
48 		okl_streams		stm,
49 		okc_k_lines_b		kle,
50 		okc_statuses_b		kls
51 	WHERE stm.khr_id		= cp_contract_id
52 	AND	stm.sty_id		= cp_sty_id
53 	AND	stm.active_yn		= 'Y'
54 	AND	stm.say_code		= 'CURR'
55 	AND	kle.id			= stm.kle_id
56 	AND	kls.code		= kle.sts_code
57 	AND	kls.ste_code		= 'ACTIVE'
58 	AND	ste.stm_id		= stm.id
59 	GROUP	BY ste.stream_element_date
60 	ORDER	BY ste.stream_element_date;
61 
62     l_qtev_rec                  l_qtev_csr%ROWTYPE;
63 
64     -- extracted parameters from LA proc for the contract
65     lx_csm_lease_header          csm_lease_rec_type;
66     lx_csm_one_off_fee_tbl       csm_one_off_fee_tbl_type;
67     lx_csm_periodic_expenses_tbl csm_periodic_expenses_tbl_type;
68     lx_csm_yields_tbl            csm_yields_tbl_type;
69     lx_req_stream_types_tbl      csm_stream_types_tbl_type;
70     lx_csm_line_details_tbl      csm_line_details_tbl_type;
71     lx_rents_tbl                 csm_periodic_expenses_tbl_type;
72 
73     l_skip_prc_engine	VARCHAR2(1) := OKL_API.G_FALSE;
74 
75     l_return_status	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
76     l_api_name		CONSTANT VARCHAR2(30):= 'initiate_request';
77     l_api_version	CONSTANT NUMBER      := 1;
78     l_overall_status	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
79 
80     l_chr_id		NUMBER;
81     l_ind		NUMBER := 0;
82     l_advance_or_arrears OKL_SIF_FEES_V.advance_or_arrears%TYPE;
83     l_structure		OKL_SIF_FEES_V.structure%TYPE;
84     l_period		OKL_SIF_FEES_V.period%TYPE;
85     l_amount		NUMBER := OKC_API.G_MISS_NUM;
86     l_number_of_periods	NUMBER;
87     l_new_periods	NUMBER;
88     l_next_billing_date	DATE	:= NULL;
89     l_last_billing_date	DATE	:= NULL;
90     l_add_months	INTEGER;
91 
92      -- SMODUGA added variable for userdefined streams 3925469
93      lx_sty_id NUMBER;
94 
95 
96   BEGIN
97     --Check API version, initialize message list and create savepoint.
98     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
99                                               G_PKG_NAME,
100                                               p_init_msg_list,
101                                               l_api_version,
102                                               p_api_version,
103                                               '_PVT',
104                                               x_return_status);
105 
106     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
107       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
108     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
109       RAISE OKL_API.G_EXCEPTION_ERROR;
110     END IF;
111 
112     OPEN  l_qtev_csr (p_quote_id);
113     FETCH l_qtev_csr INTO l_qtev_rec;
114 
115     IF (l_qtev_csr%NOTFOUND) THEN
116         OKC_API.SET_MESSAGE (
117     			 p_app_name	=> 'OKC'
118      			,p_msg_name	=> G_INVALID_VALUE
119     			,p_token1	=> G_COL_NAME_TOKEN
120     			,p_token1_value	=> 'p_quote_id');
121         RAISE OKL_API.G_EXCEPTION_ERROR;
122     END IF;
123 
124     CLOSE l_qtev_csr;
125 
126     l_chr_id := l_qtev_rec.khr_id;
127     l_new_periods := l_qtev_rec.term_duration + l_qtev_rec.term;
128 
129     -- Call the OKL_LA_STREAM_PUB to get the contract parameters
130     OKL_LA_STREAM_PUB.extract_params_lease(
131 		p_api_version               => p_api_version,
132 		p_init_msg_list             => p_init_msg_list,
133 		p_chr_id                    => l_chr_id,
134 		x_return_status             => l_return_status,
135 		x_msg_count                 => x_msg_count,
136 		x_msg_data                  => x_msg_data,
137 		x_csm_lease_header          => lx_csm_lease_header,
138 		x_csm_one_off_fee_tbl       => lx_csm_one_off_fee_tbl,
139 		x_csm_periodic_expenses_tbl => lx_csm_periodic_expenses_tbl,
140 		x_csm_yields_tbl            => lx_csm_yields_tbl,
141 		x_req_stream_types_tbl      => lx_req_stream_types_tbl,
142 		x_csm_line_details_tbl      => lx_csm_line_details_tbl,
143 		x_rents_tbl                 => lx_rents_tbl);
144 
145     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
146       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
147     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
148       RAISE OKL_API.G_EXCEPTION_ERROR;
149     END IF;
150 
151    -- Set the restructure values
152     lx_csm_lease_header.jtot_object1_code	:= 'OKL_TRX_QUOTES_B';
153     lx_csm_lease_header.object1_id1		:= l_qtev_rec.id;
154     lx_csm_lease_header.orp_code		:=
155 		Okl_Create_Streams_Pub.G_ORP_CODE_RESTRUCTURE_AM;
156     -- Update the original contract term
157     lx_csm_lease_header.term			:= l_new_periods;
158     -- What to adjust
159     lx_csm_lease_header.adjust			:=
160 		OKL_CREATE_STREAMS_PUB.G_ADJUST; --'Rent';
161     lx_csm_lease_header.adjustment_method	:=
162 		OKL_CREATE_STREAMS_PUB.G_ADJUSTMENT_METHOD; --'Proportional';
163 
164     -- Delete this table, not required
165     lx_req_stream_types_tbl.DELETE;
166 
167     -- Rents
168     l_advance_or_arrears	:= lx_rents_tbl(1).advance_or_arrears;
169     l_structure			:= lx_rents_tbl(1).structure;
170     l_period			:= lx_rents_tbl(1).period;
171     lx_rents_tbl.DELETE;
172 
173     -- smoduga +++++++++ User Defined Streams -- start    ++++++++++++++++
174     OKL_STREAMS_UTIL.get_primary_stream_type(l_chr_id,
175                                              'RENT',
176                                               l_return_status,
177                                               lx_sty_id);
178     -- smoduga +++++++++ User Defined Streams -- end    ++++++++++++++++
179 
180     FOR l_str_rec IN l_stream_csr (l_chr_id,lx_sty_id) LOOP
181 
182 
183 	IF l_str_rec.start_date < SYSDATE THEN
184 
185 	    IF l_amount <> l_str_rec.amount THEN
186 		l_ind := l_ind + 1;
187 		l_amount := l_str_rec.amount;
188 		lx_rents_tbl(l_ind).level_index_number	:= l_ind;
189 		lx_rents_tbl(l_ind).advance_or_arrears	:= l_advance_or_arrears;
190 		lx_rents_tbl(l_ind).structure		:= l_structure;
191 		lx_rents_tbl(l_ind).period		:= l_period;
192 		lx_rents_tbl(l_ind).description		:= 'RENT';
193 		lx_rents_tbl(l_ind).level_type		:= OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
194 		lx_rents_tbl(l_ind).income_or_expense	:= OKL_CREATE_STREAMS_PUB.G_INCOME;
195 		lx_rents_tbl(l_ind).query_level_yn	:= OKL_CREATE_STREAMS_PUB.G_FND_YES;
196 		lx_rents_tbl(l_ind).lock_level_step	:= OKL_CREATE_STREAMS_PUB.G_LOCK_AMOUNT;
197 		lx_rents_tbl(l_ind).date_start		:= l_str_rec.start_date;
198 		lx_rents_tbl(l_ind).amount		:= l_str_rec.amount;
199 		lx_rents_tbl(l_ind).number_of_periods	:= 1;
200 	    ELSE
201 		lx_rents_tbl(l_ind).number_of_periods	:=
202 			lx_rents_tbl(l_ind).number_of_periods + 1;
203 	    END IF;
204 	    l_new_periods	:= l_new_periods - 1;
205 	    l_last_billing_date	:= l_str_rec.start_date;
206 
207 	ELSE
208 	    IF l_next_billing_date IS NULL THEN
209 		l_next_billing_date := l_str_rec.start_date;
210 	    END IF;
211 	END IF;
212 
213     END LOOP;
214 
215     IF l_new_periods > 0 THEN
216 
217 	IF l_next_billing_date IS NULL THEN
218 
219 	    IF l_last_billing_date IS NULL THEN
220 		OKL_API.SET_MESSAGE (
221 			 p_app_name	=> G_APP_NAME
222 			,p_msg_name	=> 'OKL_LLA_NO_STREAM_ELEMENT');
223 		RAISE OKL_API.G_EXCEPTION_ERROR;
224 	    ELSE
225 
226 		IF    l_period = 'A' THEN
227 			l_add_months := 12;
228 		ELSIF l_period = 'S' THEN
229 			l_add_months := 6;
230 		ELSIF l_period = 'Q' THEN
231 			l_add_months := 3;
232 		ELSE -- l_period = 'M'
233 			l_add_months := 1;
234 		END IF;
235 
236 		LOOP
237 			EXIT WHEN l_last_billing_date >= SYSDATE;
238 			l_last_billing_date := ADD_MONTHS (l_last_billing_date, l_add_months);
239 		END LOOP;
240 		l_next_billing_date	:= l_last_billing_date;
241 
242 	    END IF;
243 
244 	END IF;
245 
246 	IF l_next_billing_date IS NOT NULL THEN
247 
248 		l_ind := l_ind + 1;
249 		lx_rents_tbl(l_ind).level_index_number	:= l_ind;
250 		lx_rents_tbl(l_ind).advance_or_arrears	:= l_advance_or_arrears;
251 		lx_rents_tbl(l_ind).structure		:= l_structure;
252 		lx_rents_tbl(l_ind).period		:= l_period;
253 		lx_rents_tbl(l_ind).description		:= 'RENT';
254 		lx_rents_tbl(l_ind).level_type		:= OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
255 		lx_rents_tbl(l_ind).income_or_expense	:= OKL_CREATE_STREAMS_PUB.G_INCOME;
256 		lx_rents_tbl(l_ind).query_level_yn	:= OKL_CREATE_STREAMS_PUB.G_FND_YES;
257 		lx_rents_tbl(l_ind).lock_level_step	:= NULL;
258 		lx_rents_tbl(l_ind).date_start		:= l_next_billing_date;
259 		lx_rents_tbl(l_ind).amount		:= 0;
260 		lx_rents_tbl(l_ind).number_of_periods	:= l_new_periods;
261 
262 	ELSE
263 	      RAISE OKL_API.G_EXCEPTION_ERROR;
264 	END IF;
265     ELSE
266 	      RAISE OKL_API.G_EXCEPTION_ERROR;
267     END IF;
268 
269     -- Yields
270     FOR i IN lx_csm_yields_tbl.FIRST..lx_csm_yields_tbl.LAST LOOP
271 	IF lx_csm_yields_tbl(i).yield_name = 'Booking' THEN
272 		lx_csm_yields_tbl(i).target_value := l_qtev_rec.after_tax_yield;
273 	END IF;
274     END LOOP;
275 
276     -- Purchase Option
277     FOR i IN lx_csm_line_details_tbl.FIRST..lx_csm_line_details_tbl.LAST LOOP
278 
279 	lx_csm_line_details_tbl(i).purchase_option := l_qtev_rec.pop_code_end;
280 
281 	IF  l_qtev_rec.purchase_amount IS NOT NULL
282 	AND l_qtev_rec.purchase_amount <> OKL_API.G_MISS_NUM THEN
283 		lx_csm_line_details_tbl(i).purchase_option_amount := l_qtev_rec.purchase_amount;
284 
285 	ELSIF l_qtev_rec.purchase_formula IS NOT NULL
286 	AND   l_qtev_rec.purchase_formula <> OKL_API.G_MISS_CHAR THEN
287 
288 		okl_am_util_pvt.get_formula_value (
289 			p_formula_name	=> l_qtev_rec.purchase_formula,
290 			p_chr_id	=> l_chr_id,
291 			p_cle_id	=> lx_csm_line_details_tbl(i).kle_asset_id,
292 			x_formula_value	=> lx_csm_line_details_tbl(i).purchase_option_amount,
293 			x_return_status	=> l_return_status);
294 
295 		IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
296 			RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
297 		ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
298 			RAISE OKL_API.G_EXCEPTION_ERROR;
299 		END IF;
300 
301 	ELSE
302 		lx_csm_line_details_tbl(i).purchase_option_amount := 0;
303 	END IF;
304 
305     END LOOP;
306 
307     -- Call OKL_CREATE_STREAMS_PUB with the modified parameters which calls supertrump
308     OKL_CREATE_STREAMS_PUB.create_streams_lease_restr (
309 		p_api_version               => p_api_version,
310 		p_init_msg_list             => p_init_msg_list,
311 		p_skip_prc_engine           => l_skip_prc_engine,
312 		p_csm_lease_header          => lx_csm_lease_header,
313 		p_csm_one_off_fee_tbl       => lx_csm_one_off_fee_tbl, --one time fee
314 		p_csm_periodic_expenses_tbl => lx_csm_periodic_expenses_tbl, --fee and service
315 		p_csm_yields_tbl            => lx_csm_yields_tbl,
316 		p_csm_stream_types_tbl      => lx_req_stream_types_tbl,
317 		p_csm_line_details_tbl      => lx_csm_line_details_tbl,
318 		p_rents_tbl                 => lx_rents_tbl,
319 		x_trans_id                  => x_request_id, -- correct***
320 		x_trans_status              => x_trans_status,
321 		x_return_status             => l_return_status,
322 		x_msg_count                 => x_msg_count,
323 		x_msg_data                  => x_msg_data);
324 
325     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
326       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
327     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
328       RAISE OKL_API.G_EXCEPTION_ERROR;
329     END IF;
330 
331     -- end the transaction
332     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
333 
334   EXCEPTION
335     WHEN OKL_API.G_EXCEPTION_ERROR THEN
336       IF (l_qtev_csr%ISOPEN) THEN
337         CLOSE l_qtev_csr;
338       END IF;
339       IF (l_stream_csr%ISOPEN) THEN
340         CLOSE l_stream_csr;
341       END IF;
342       x_return_status := OKL_API.HANDLE_EXCEPTIONS
343       (
344         l_api_name,
345         G_PKG_NAME,
346         'OKL_API.G_RET_STS_ERROR',
347         x_msg_count,
348         x_msg_data,
349         '_PVT'
350       );
351 
352     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
353       IF (l_qtev_csr%ISOPEN) THEN
354         CLOSE l_qtev_csr;
355       END IF;
356       IF (l_stream_csr%ISOPEN) THEN
357         CLOSE l_stream_csr;
358       END IF;
359       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
360       (
361         l_api_name,
362         G_PKG_NAME,
363         'OKL_API.G_RET_STS_UNEXP_ERROR',
364         x_msg_count,
365         x_msg_data,
366         '_PVT'
367       );
368 
369     WHEN OTHERS THEN
370       IF (l_qtev_csr%ISOPEN) THEN
371         CLOSE l_qtev_csr;
372       END IF;
373       IF (l_stream_csr%ISOPEN) THEN
374         CLOSE l_stream_csr;
375       END IF;
376       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
377       (
378         l_api_name,
379         G_PKG_NAME,
380         'OTHERS',
381         x_msg_count,
382         x_msg_data,
383         '_PVT'
384       );
385   END initiate_request;
386 
387 
388   -- Start of comments
389   --
390   -- Procedure Name	: populate_rent_levels
391   -- Description	: Save stream returns as quote lines
392   -- Business Rules	:
393   -- Parameters		:
394   -- Version		: 1.0
395   --
396   -- End of comments
397 
398 PROCEDURE populate_rent_levels (
399 	p_quote_id	IN  NUMBER,
400 	p_rent_tbl	IN  srlv_tbl_type,
401 	p_yield_tbl	IN  yields_tbl_type,
402 	x_tqlv_tbl OUT NOCOPY tqlv_tbl_type,
403 	x_return_status	OUT NOCOPY VARCHAR2) IS
404 
405 	l_tqlv_rec1		tqlv_rec_type;
406 	l_tqlv_rec2		tqlv_rec_type;
407 	l_tqlv_tbl		tqlv_tbl_type;
408 	lx_tqlv_tbl		tqlv_tbl_type;
409 	l_qtev_rec		qtev_rec_type;
410 	lx_qtev_rec		qtev_rec_type;
411 
412 	l_return_status		VARCHAR2(1)	:= OKL_API.G_RET_STS_SUCCESS;
413 	l_overall_status	VARCHAR2(1)	:= OKL_API.G_RET_STS_SUCCESS;
414 
415 	l_api_version		CONSTANT NUMBER	:= G_API_VERSION;
416 	l_msg_count		NUMBER		:= G_MISS_NUM;
417 	l_msg_data		VARCHAR2(2000);
418 
419 	l_ind			INTEGER;
420 	l_seq			INTEGER;
421 
422 BEGIN
423 
424 	-- *******************
425 	-- Update quote status
426 	-- *******************
427 
428 	l_qtev_rec.id		:= p_quote_id;
429 	l_qtev_rec.qst_code	:= 'DRAFTED';
430 
431 	OKL_TRX_QUOTES_PUB.update_trx_quotes (
432 		p_api_version	=> l_api_version,
433 		p_init_msg_list	=> OKL_API.G_FALSE,
434 		x_return_status	=> l_return_status,
435 		x_msg_count	=> l_msg_count,
436 		x_msg_data	=> l_msg_data,
437 		p_qtev_rec	=> l_qtev_rec,
438 		x_qtev_rec	=> lx_qtev_rec);
439 
440 	IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
441 	    IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
442 		l_overall_status := l_return_status;
443 	    END IF;
444 	END IF;
445 
446 	-- ******************************
447 	-- Save Rent Stream Return Levels
448 	-- ******************************
449 
450 	IF p_rent_tbl.COUNT > 0 THEN
451 
452 		l_ind := p_rent_tbl.FIRST;
453 
454 		LOOP
455 
456 			l_seq	:= NVL (l_tqlv_tbl.LAST, 0)  + 1;
457 
458 			l_tqlv_rec1.qte_id		:= p_quote_id;
459 			l_tqlv_rec1.qlt_code		:= G_RENTS_LINE;
460 			l_tqlv_rec1.org_id		:= lx_qtev_rec.org_id;
461 			l_tqlv_rec1.line_number		:= p_rent_tbl(l_ind).level_index_number;
462 			l_tqlv_rec1.amount		:= p_rent_tbl(l_ind).amount;
463 			l_tqlv_rec1.start_date		:= p_rent_tbl(l_ind).first_payment_date;
464 			l_tqlv_rec1.period		:= p_rent_tbl(l_ind).period;
465 			l_tqlv_rec1.number_of_periods	:= p_rent_tbl(l_ind).number_of_periods;
466 			l_tqlv_rec1.lock_level_step	:= p_rent_tbl(l_ind).lock_level_step;
467 			l_tqlv_rec1.advance_or_arrears	:= p_rent_tbl(l_ind).advance_or_arrears;
468 
469 			-- Set mandatory TAPI defaults
470 			l_tqlv_rec1.modified_yn		:= G_NO;
471 			l_tqlv_rec1.taxed_yn		:= G_NO;
472 
473 			l_tqlv_tbl(l_seq)		:= l_tqlv_rec1;
474 
475 		    EXIT WHEN (l_ind = p_rent_tbl.LAST);
476 		    l_ind := p_rent_tbl.NEXT (l_ind);
477 
478 		END LOOP;
479 
480 	END IF;
481 
482 	-- ******************************
483 	-- Save Rent Stream Return Yields
484 	-- ******************************
485 
486 	IF p_yield_tbl.COUNT > 0 THEN
487 
488 		l_ind := p_yield_tbl.FIRST;
489 
490 		LOOP
491 
492 			l_seq	:= NVL (l_tqlv_tbl.LAST, 0)  + 1;
493 
494 			l_tqlv_rec2.qte_id		:= p_quote_id;
495 			l_tqlv_rec2.qlt_code		:= G_YIELDS_LINE;
496 			l_tqlv_rec2.org_id		:= lx_qtev_rec.org_id;
497 			l_tqlv_rec2.line_number		:= l_seq;
498 			l_tqlv_rec2.amount		:= 0;
499 			l_tqlv_rec2.yield_name		:= p_yield_tbl(l_ind).yield_name;
500 			l_tqlv_rec2.yield_value		:= 100 * p_yield_tbl(l_ind).value;
501 			l_tqlv_rec2.implicit_interest_rate :=
502 						100 * p_yield_tbl(l_ind).implicit_interest_rate;
503 
504 			-- Set mandatory TAPI defaults
505 			l_tqlv_rec2.modified_yn		:= G_NO;
506 			l_tqlv_rec2.taxed_yn		:= G_NO;
507 
508 			l_tqlv_tbl(l_seq)		:= l_tqlv_rec2;
509 
510 		    EXIT WHEN (l_ind = p_yield_tbl.LAST);
511 		    l_ind := p_yield_tbl.NEXT (l_ind);
512 
513 		END LOOP;
514 
515 	END IF;
516 
517 	-- **********************************
518 	-- Save quote lines into the database
519 	-- **********************************
520 
521 	IF  l_tqlv_tbl.COUNT > 0 THEN
522 
523 		OKL_TXL_QUOTE_LINES_PUB.insert_txl_quote_lines (
524 			p_api_version	=> l_api_version,
525 			p_init_msg_list	=> OKL_API.G_FALSE,
526 			x_return_status	=> l_return_status,
527 			x_msg_count	=> l_msg_count,
528 			x_msg_data	=> l_msg_data,
529 			p_tqlv_tbl	=> l_tqlv_tbl,
530 			x_tqlv_tbl	=> lx_tqlv_tbl);
531 
532 		IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
533 		    IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
534 			l_overall_status := l_return_status;
535 		    END IF;
536 		END IF;
537 
538 	END IF;
539 
540 	-- **************
541 	-- Return results
542 	-- **************
543 
544 	x_tqlv_tbl	:= lx_tqlv_tbl;
545 	x_return_status := l_overall_status;
546 
547 EXCEPTION
548 
549 	WHEN OTHERS THEN
550 
551 		-- store SQL error message on message stack for caller
552 		OKL_API.SET_MESSAGE (
553 			 p_app_name	=> G_APP_NAME
554 			,p_msg_name	=> G_UNEXPECTED_ERROR
555 			,p_token1	=> G_SQLCODE_TOKEN
556 			,p_token1_value	=> sqlcode
557 			,p_token2	=> G_SQLERRM_TOKEN
558 			,p_token2_value	=> sqlerrm);
559 
560 		-- notify caller of an UNEXPECTED error
561 		x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
562 
563 END;
564 
565 
566   -- Start of comments
567   --
568   -- Procedure Name	: process_results
569   -- Description	:
570   -- Business Rules	:
571   -- Parameters		:
572   -- Version		: 1.0
573   --
574   -- End of comments
575 
576 
577   PROCEDURE process_results(
578               p_api_version         IN  NUMBER,
579               p_init_msg_list       IN  VARCHAR2,
580               p_generation_context  IN  VARCHAR2,
581               p_jtot_object1_code   IN  VARCHAR2,
582               p_object1_id1         IN  VARCHAR2,
583               p_chr_id              IN  NUMBER,
584               p_rent_tbl            IN  srlv_tbl_type,
585               p_yield_tbl           IN  yields_tbl_type,
586               x_return_status       OUT NOCOPY VARCHAR2,
587               x_msg_count           OUT NOCOPY NUMBER,
588               x_msg_data            OUT NOCOPY VARCHAR2) IS
589 
590 	l_return_status		VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
591 	l_api_name		CONSTANT VARCHAR2(30):= 'process_results';
592 	l_api_version		CONSTANT NUMBER      := 1;
593 	l_overall_status	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
594 	l_tqlv_tbl		tqlv_tbl_type;
595 
596   BEGIN
597 
598     --Check API version, initialize message list and create savepoint.
599     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
600                                               G_PKG_NAME,
601                                               p_init_msg_list,
602                                               l_api_version,
603                                               p_api_version,
604                                               '_PVT',
605                                               x_return_status);
606 
607     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
608       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
609     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
610       RAISE OKL_API.G_EXCEPTION_ERROR;
611     END IF;
612 
613      populate_rent_levels (
614 	p_quote_id	=> p_object1_id1,
615 	p_rent_tbl	=> p_rent_tbl,
616 	p_yield_tbl	=> p_yield_tbl,
617 	x_tqlv_tbl	=> l_tqlv_tbl,
618 	x_return_status	=> l_return_status);
619 
620     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
621       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
622     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
623       RAISE OKL_API.G_EXCEPTION_ERROR;
624     END IF;
625 
626     x_return_status := l_return_status;
627 
628     -- end the transaction
629     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
630 
631   EXCEPTION
632     WHEN OKL_API.G_EXCEPTION_ERROR THEN
633       x_return_status := OKL_API.HANDLE_EXCEPTIONS
634       (
635         l_api_name,
636         G_PKG_NAME,
637         'OKL_API.G_RET_STS_ERROR',
638         x_msg_count,
639         x_msg_data,
640         '_PVT'
641       );
642     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
643       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
644       (
645         l_api_name,
646         G_PKG_NAME,
647         'OKL_API.G_RET_STS_UNEXP_ERROR',
648         x_msg_count,
649         x_msg_data,
650         '_PVT'
651       );
652     WHEN OTHERS THEN
653       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
654       (
655         l_api_name,
656         G_PKG_NAME,
657         'OTHERS',
658         x_msg_count,
659         x_msg_data,
660         '_PVT'
661       );
662   END process_results;
663 
664 END OKL_AM_RESTRUCTURE_RENTS_PVT;