DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_LEASE_QUOTE_CASHFLOW_PVT

Source


1 PACKAGE BODY OKL_LEASE_QUOTE_CASHFLOW_PVT AS
2 /* $Header: OKLRQUCB.pls 120.30.12010000.2 2008/11/18 11:16:36 gboomina ship $ */
3 
4   -------------------------------
5   -- PROCEDURE populate_level_ids
6   -------------------------------
7   PROCEDURE populate_level_ids (
8       p_cf_header_id       IN NUMBER
9      ,x_cf_levels_tbl      IN OUT NOCOPY cashflow_level_tbl_type
10      ,x_return_status      OUT NOCOPY VARCHAR2
11      ) IS
12 
13     l_program_name         CONSTANT VARCHAR2(30) := 'populate_level_ids';
14     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
15 
16     CURSOR c_levels IS
17       SELECT id
18       FROM   okl_cash_flow_levels
19       WHERE  caf_id = p_cf_header_id
20       ORDER BY start_date;
21 
22     i                      BINARY_INTEGER;
23     l_count                BINARY_INTEGER;
24 
25   BEGIN
26 
27     i       := x_cf_levels_tbl.FIRST;
28     l_count := 0;
29 
30     FOR l_level IN c_levels LOOP
31 
32       l_count                              := l_count + 1;
33       x_cf_levels_tbl(i).cashflow_level_id := l_level.id;
34       i                                    := x_cf_levels_tbl.NEXT(i);
35 
36     END LOOP;
37 
38     IF l_count <> x_cf_levels_tbl.COUNT THEN
39 
40       OKL_API.SET_MESSAGE (
41         p_app_name     => G_APP_NAME
42        ,p_msg_name     => 'OKL_INVALID_VALUE2'
43        ,p_token1       => 'API_NAME'
44        ,p_token1_value => UPPER(l_api_name)
45        ,p_token2       => 'NAME'
46        ,p_token2_value => 'levels_table_count'
47        ,p_token3       => 'VALUE'
48        ,p_token3_value => x_cf_levels_tbl.COUNT
49        );
50       RAISE OKL_API.G_EXCEPTION_ERROR;
51 
52     END IF;
53 
54     x_return_status := G_RET_STS_SUCCESS;
55 
56   EXCEPTION
57 
58     WHEN OKL_API.G_EXCEPTION_ERROR THEN
59       x_return_status := G_RET_STS_ERROR;
60 
61     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
62       x_return_status := G_RET_STS_UNEXP_ERROR;
63 
64     WHEN OTHERS THEN
65       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
66                            p_msg_name     => G_DB_ERROR,
67                            p_token1       => G_PROG_NAME_TOKEN,
68                            p_token1_value => l_api_name,
69                            p_token2       => G_SQLCODE_TOKEN,
70                            p_token2_value => sqlcode,
71                            p_token3       => G_SQLERRM_TOKEN,
72                            p_token3_value => sqlerrm);
73 
74       x_return_status := G_RET_STS_UNEXP_ERROR;
75 
76   END populate_level_ids;
77 
78 
79   -----------------------------
80   -- PROCEDURE get_source_table
81   -----------------------------
82   PROCEDURE get_source_table (
83     p_source_object_code IN VARCHAR2
84    ,x_source_table       OUT NOCOPY VARCHAR2
85    ,x_return_status      OUT NOCOPY VARCHAR2
86    ) IS
87 
88     l_program_name         CONSTANT VARCHAR2(30) := 'get_source_table';
89     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
90 
91   BEGIN
92     --Bug # 5142940 ssdeshpa start
93     IF (p_source_object_code IN ('QUOTED_ASSET','QUOTED_ASSET_DOWN_PAYMENT','QUOTED_ASSET_PROPERTY_TAX')) THEN
94       x_source_table := 'OKL_ASSETS_B';
95     --Bug # 5142940 ssdeshpa end
96     ELSIF (p_source_object_code = 'QUOTED_FEE') THEN
97       x_source_table := 'OKL_FEES_B';
98     ELSIF (p_source_object_code = 'QUOTED_SERVICE') THEN
99       x_source_table := 'OKL_SERVICES_B';
100     ELSIF (p_source_object_code = 'QUOTED_INSURANCE') THEN
101       x_source_table := 'OKL_INSURANCE_ESTIMATES_B';
102     ELSIF (p_source_object_code = 'LEASE_QUOTE') THEN
103       x_source_table := 'OKL_LEASE_QUOTES_B';
104     ELSIF (p_source_object_code = 'QUICK_QUOTE') THEN
105       x_source_table := 'OKL_QUICK_QUOTES_B';
106     ELSIF (p_source_object_code = 'QUICK_QUOTE_ASSET') THEN
107       x_source_table := 'OKL_QUICK_QUOTE_LINES_B';
108     ELSIF (p_source_object_code = 'QUICK_QUOTE_SERVICE') THEN
109       x_source_table := 'OKL_QUICK_QUOTE_LINES_B';
110     ELSIF (p_source_object_code = 'QUICK_QUOTE_FEE') THEN
111       x_source_table := 'OKL_QUICK_QUOTE_LINES_B';
112     ELSIF (p_source_object_code = 'QUICK_QUOTE_TAX') THEN
113       x_source_table := 'OKL_QUICK_QUOTE_LINES_B';
114     ELSIF (p_source_object_code = 'QUICK_QUOTE_INSURANCE') THEN
115       x_source_table := 'OKL_QUICK_QUOTE_LINES_B';
116     ELSIF (p_source_object_code = 'LEASE_QUOTE_CONSOLIDATED') THEN
117       x_source_table := 'OKL_LEASE_QUOTES_B';
118     ELSE
119       OKL_API.SET_MESSAGE (
120         p_app_name     => G_APP_NAME
121        ,p_msg_name     => 'OKL_INVALID_VALUE2'
122        ,p_token1       => 'API_NAME'
123        ,p_token1_value => UPPER(l_api_name)
124        ,p_token2       => 'NAME'
125        ,p_token2_value => 'source_object_code'
126        ,p_token3       => 'VALUE'
127        ,p_token3_value => p_source_object_code
128        );
129       RAISE OKL_API.G_EXCEPTION_ERROR;
130     END IF;
131 
132     x_return_status := G_RET_STS_SUCCESS;
133 
134   EXCEPTION
135 
136     WHEN OKL_API.G_EXCEPTION_ERROR THEN
137       x_return_status := G_RET_STS_ERROR;
138 
139     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
140       x_return_status := G_RET_STS_UNEXP_ERROR;
141 
142     WHEN OTHERS THEN
143       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
144                            p_msg_name     => G_DB_ERROR,
145                            p_token1       => G_PROG_NAME_TOKEN,
146                            p_token1_value => l_api_name,
147                            p_token2       => G_SQLCODE_TOKEN,
148                            p_token2_value => sqlcode,
149                            p_token3       => G_SQLERRM_TOKEN,
150                            p_token3_value => sqlerrm);
151 
152       x_return_status := G_RET_STS_UNEXP_ERROR;
153 
154   END get_source_table;
155 
156   -------------------------------
157   -- PROCEDURE set_level_end_date
158   -------------------------------
159   PROCEDURE set_level_end_date (
160     p_contract_start_date IN DATE
161    ,p_contract_term       IN NUMBER
162    ,p_cashflow_header_rec IN cashflow_header_rec_type
163    ,p_cashflow_level_tbl  IN OUT NOCOPY cashflow_level_tbl_type
164    ,x_return_status          OUT NOCOPY VARCHAR2
165    ) IS
166 
167     l_program_name         CONSTANT VARCHAR2(30) := 'set_level_end_date';
168     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
169 
170     l_mpp                  PLS_INTEGER;
171 
172     l_contract_end_date    DATE;
173     l_next_start_date      DATE;
174     l_end_date             DATE;
175 
176     l_module       CONSTANT fnd_log_messages.module%TYPE := 'okl.plsql.OKL_LEASE_QUOTE_CASHFLOW_PVT.set_level_end_date';
177     l_debug_enabled    VARCHAR2(10);
178     is_debug_procedure_on  BOOLEAN;
179     is_debug_statement_on  BOOLEAN;
180 
181   BEGIN
182 
183     l_debug_enabled := NVL(okl_debug_pub.check_log_enabled,'N');
184     is_debug_procedure_on := okl_debug_pub.check_log_on(l_module
185                                                        ,fnd_log.level_procedure);
186 
187     IF (l_debug_enabled = 'Y' AND is_debug_procedure_on) THEN
188       okl_debug_pub.log_debug(fnd_log.level_procedure
189                              ,l_module
190                              ,'begin debug OKLRQUCB.pls procedure set_level_end_date');
191     END IF;
192     -- check for logging at STATEMENT level
193     is_debug_statement_on := okl_debug_pub.check_log_on(l_module
194                                                        ,fnd_log.level_statement);
195 
196     IF p_cashflow_header_rec.frequency_code = 'A' THEN
197       l_mpp := 12;
198     ELSIF p_cashflow_header_rec.frequency_code = 'S' THEN
199       l_mpp := 6;
200     ELSIF p_cashflow_header_rec.frequency_code = 'Q' THEN
201       l_mpp := 3;
202     ELSIF p_cashflow_header_rec.frequency_code = 'M' THEN
203       l_mpp := 1;
204     END IF;
205 
206     l_next_start_date := p_contract_start_date;
207 
208     FOR i IN p_cashflow_level_tbl.FIRST .. p_cashflow_level_tbl.LAST LOOP
209       IF p_cashflow_level_tbl.EXISTS(i) THEN
210 
211         IF p_cashflow_level_tbl(i).stub_days IS NOT NULL THEN
212           l_end_date := l_next_start_date + p_cashflow_level_tbl(i).stub_days - 1;
213         ELSE
214           l_end_date := ADD_MONTHS(l_next_start_date, l_mpp*p_cashflow_level_tbl(i).periods) - 1;
215         END IF;
216 
217         p_cashflow_level_tbl(i).start_date := l_next_start_date;
218         l_next_start_date                  := l_end_date + 1;
219 
220       END IF;
221       IF (nvl(l_debug_enabled, 'N') = 'Y' AND is_debug_statement_on) THEN
222           okl_debug_pub.log_debug(fnd_log.level_statement
223                                  ,l_module
224                                  ,' l_next_start_date = '  || l_next_start_date ||
225                                   ' l_end_date = '         || l_end_date
226                                  );
227       END IF;  -- end of NVL(l_debug_enabled,'N')='Y'
228     END LOOP;
229 
230     l_contract_end_date := ADD_MONTHS(p_contract_start_date, p_contract_term) - 1;
231 
232     IF (nvl(l_debug_enabled, 'N') = 'Y' AND is_debug_statement_on) THEN
233         okl_debug_pub.log_debug(fnd_log.level_statement
234                                ,l_module
235                                ,' p_contract_start_date = '       || p_contract_start_date       ||
236                                 ' l_contract_end_date = '         || l_contract_end_date         ||
237                                 ' p_contract_term = '             || p_contract_term             ||
238                                 ' l_end_date = '                  || l_end_date                  ||
239                                 ' l_next_start_date = '           || l_next_start_date           ||
240                                 ' l_mpp = '                       || l_mpp                       ||
241                                 ' p_cashflow_level_tbl_count = '  || p_cashflow_level_tbl.COUNT
242                                );
243     END IF;  -- end of NVL(l_debug_enabled,'N')='Y'
244 
245     IF l_end_date > l_contract_end_date THEN
246       OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_EXTENDS_K_END');
247       RAISE OKL_API.G_EXCEPTION_ERROR;
248     END IF;
249 
250     x_return_status := G_RET_STS_SUCCESS;
251 
252     IF (l_debug_enabled = 'Y' AND is_debug_procedure_on) THEN
253       okl_debug_pub.log_debug(fnd_log.level_procedure
254                              ,l_module
255                              ,'end debug OKLRQUCB.pls procedure set_level_end_date');
256     END IF;
257 
258   EXCEPTION
259 
260     WHEN OKL_API.G_EXCEPTION_ERROR THEN
261       x_return_status := G_RET_STS_ERROR;
262 
263     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
264       x_return_status := G_RET_STS_UNEXP_ERROR;
265 
266     WHEN OTHERS THEN
267       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
268                            p_msg_name     => G_DB_ERROR,
269                            p_token1       => G_PROG_NAME_TOKEN,
270                            p_token1_value => l_api_name,
271                            p_token2       => G_SQLCODE_TOKEN,
272                            p_token2_value => sqlcode,
273                            p_token3       => G_SQLERRM_TOKEN,
274                            p_token3_value => sqlerrm);
275 
276       x_return_status := G_RET_STS_UNEXP_ERROR;
277 
278   END set_level_end_date;
279 
280 
281   -----------------------------
282   -- PROCEDURE set_level_amount
283   -----------------------------
284   PROCEDURE set_level_amount (
285     p_contract_currency   IN VARCHAR2
286    ,p_cashflow_level_tbl  IN OUT NOCOPY cashflow_level_tbl_type
287    ,x_return_status          OUT NOCOPY VARCHAR2
288    ) IS
289 
290     l_program_name         CONSTANT VARCHAR2(30) := 'set_level_amount';
291     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
292 
293   BEGIN
294 
295     FOR i IN p_cashflow_level_tbl.FIRST .. p_cashflow_level_tbl.LAST LOOP
296       IF p_cashflow_level_tbl.EXISTS(i) THEN
297         IF p_cashflow_level_tbl(i).stub_amount IS NOT NULL THEN
298           p_cashflow_level_tbl(i).stub_amount :=
299             okl_accounting_util.round_amount( p_amount        => p_cashflow_level_tbl(i).stub_amount
300                                              ,p_currency_code => p_contract_currency
301                                              );
302         ELSIF p_cashflow_level_tbl(i).periodic_amount IS NOT NULL THEN
303           p_cashflow_level_tbl(i).periodic_amount :=
304             okl_accounting_util.round_amount( p_amount        => p_cashflow_level_tbl(i).periodic_amount
305                                              ,p_currency_code => p_contract_currency
306                                              );
307         END IF;
308       END IF;
309     END LOOP;
310 
311     x_return_status := G_RET_STS_SUCCESS;
312 
313   EXCEPTION
314 
315     WHEN OKL_API.G_EXCEPTION_ERROR THEN
316       x_return_status := G_RET_STS_ERROR;
317 
318     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
319       x_return_status := G_RET_STS_UNEXP_ERROR;
320 
321     WHEN OTHERS THEN
322       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
323                            p_msg_name     => G_DB_ERROR,
324                            p_token1       => G_PROG_NAME_TOKEN,
325                            p_token1_value => l_api_name,
326                            p_token2       => G_SQLCODE_TOKEN,
327                            p_token2_value => sqlcode,
328                            p_token3       => G_SQLERRM_TOKEN,
329                            p_token3_value => sqlerrm);
330 
331       x_return_status := G_RET_STS_UNEXP_ERROR;
332 
333   END set_level_amount;
334 
335 
336   -------------------------
337   -- PROCEDURE sanity_check
338   -------------------------
339   PROCEDURE sanity_check (
340     p_cashflow_header_rec IN  cashflow_header_rec_type
341    ,p_cashflow_level_tbl  IN  cashflow_level_tbl_type
342    ,x_return_status       OUT NOCOPY VARCHAR2
343    ) IS
344 
345     l_program_name         CONSTANT VARCHAR2(30) := 'sanity_check';
346     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
347 
348   BEGIN
349 
350     IF p_cashflow_header_rec.frequency_code NOT IN ('M','Q','S','A') THEN
351       OKL_API.SET_MESSAGE (
352         p_app_name     => G_APP_NAME
353        ,p_msg_name     => 'OKL_INVALID_VALUE2'
354        ,p_token1       => 'API_NAME'
355        ,p_token1_value => UPPER(l_api_name)
356        ,p_token2       => 'NAME'
357        ,p_token2_value => 'frequency_code'
358        ,p_token3       => 'VALUE'
359        ,p_token3_value => p_cashflow_header_rec.frequency_code
360        );
361       RAISE OKL_API.G_EXCEPTION_ERROR;
362     END IF;
363 
364     IF p_cashflow_header_rec.arrears_flag NOT IN ('Y' , 'N') THEN
365       OKL_API.SET_MESSAGE (
366         p_app_name     => G_APP_NAME
367        ,p_msg_name     => 'OKL_INVALID_VALUE2'
368        ,p_token1       => 'API_NAME'
369        ,p_token1_value => UPPER(l_api_name)
370        ,p_token2       => 'NAME'
371        ,p_token2_value => 'arrears_flag'
372        ,p_token3       => 'VALUE'
373        ,p_token3_value => p_cashflow_header_rec.arrears_flag
374        );
375       RAISE OKL_API.G_EXCEPTION_ERROR;
376     END IF;
377 
378     IF p_cashflow_header_rec.type_code NOT IN ('INFLOW' , 'OUTFLOW') THEN
379       OKL_API.SET_MESSAGE (
380         p_app_name     => G_APP_NAME
381        ,p_msg_name     => 'OKL_INVALID_VALUE2'
382        ,p_token1       => 'API_NAME'
383        ,p_token1_value => UPPER(l_api_name)
384        ,p_token2       => 'NAME'
385        ,p_token2_value => 'type_code'
386        ,p_token3       => 'VALUE'
387        ,p_token3_value => p_cashflow_header_rec.type_code
388        );
389       RAISE OKL_API.G_EXCEPTION_ERROR;
390     END IF;
391 
392     IF p_cashflow_header_rec.quote_type_code NOT IN ('LQ', 'QQ', 'LA') THEN
393       OKL_API.SET_MESSAGE (
394         p_app_name     => G_APP_NAME
395        ,p_msg_name     => 'OKL_INVALID_VALUE2'
396        ,p_token1       => 'API_NAME'
397        ,p_token1_value => UPPER(l_api_name)
398        ,p_token2       => 'NAME'
399        ,p_token2_value => 'quote_type_code'
400        ,p_token3       => 'VALUE'
401        ,p_token3_value => p_cashflow_header_rec.quote_type_code
402        );
403       RAISE OKL_API.G_EXCEPTION_ERROR;
404     END IF;
405 
406     IF p_cashflow_header_rec.quote_id IS NULL THEN
407       OKL_API.SET_MESSAGE (
408         p_app_name     => G_APP_NAME
409        ,p_msg_name     => 'OKL_INVALID_VALUE2'
410        ,p_token1       => 'API_NAME'
411        ,p_token1_value => UPPER(l_api_name)
412        ,p_token2       => 'NAME'
413        ,p_token2_value => 'quote_id'
414        ,p_token3       => 'VALUE'
415        ,p_token3_value => p_cashflow_header_rec.quote_id
416        );
417       RAISE OKL_API.G_EXCEPTION_ERROR;
418     END IF;
419 
420     FOR i IN p_cashflow_level_tbl.FIRST .. p_cashflow_level_tbl.LAST LOOP
421       IF p_cashflow_level_tbl.EXISTS(i) THEN
422         IF UPPER(p_cashflow_level_tbl(i).record_mode) NOT IN ('CREATE', 'UPDATE') OR p_cashflow_level_tbl(i).record_mode IS NULL THEN
423           OKL_API.SET_MESSAGE (
424             p_app_name     => G_APP_NAME
425            ,p_msg_name     => 'OKL_INVALID_VALUE2'
426            ,p_token1       => 'API_NAME'
427            ,p_token1_value => UPPER(l_api_name)
428            ,p_token2       => 'NAME'
429            ,p_token2_value => '('||i||') record_mode'
430            ,p_token3       => 'VALUE'
431            ,p_token3_value => UPPER(p_cashflow_level_tbl(i).record_mode)
432            );
433           RAISE OKL_API.G_EXCEPTION_ERROR;
434         END IF;
435       END IF;
436     END LOOP;
437 
438     x_return_status := G_RET_STS_SUCCESS;
439 
440   EXCEPTION
441 
442     WHEN OKL_API.G_EXCEPTION_ERROR THEN
443       x_return_status := G_RET_STS_ERROR;
444 
445     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
446       x_return_status := G_RET_STS_UNEXP_ERROR;
447 
448     WHEN OTHERS THEN
449       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
450                            p_msg_name     => G_DB_ERROR,
451                            p_token1       => G_PROG_NAME_TOKEN,
452                            p_token1_value => l_api_name,
453                            p_token2       => G_SQLCODE_TOKEN,
454                            p_token2_value => sqlcode,
455                            p_token3       => G_SQLERRM_TOKEN,
456                            p_token3_value => sqlerrm);
457 
458       x_return_status := G_RET_STS_UNEXP_ERROR;
459 
460   END sanity_check;
461 
462 
463   --------------------------------------
464   -- PROCEDURE validate_level_attributes
465   --------------------------------------
466   PROCEDURE validate_level_attributes (
467     p_cashflow_level_tbl  IN  cashflow_level_tbl_type
468    ,p_caf_status          IN  VARCHAR2
469    ,p_pricing_method      IN  VARCHAR2
470    ,x_return_status       OUT NOCOPY VARCHAR2
471    ) IS
472 
473     l_program_name         CONSTANT VARCHAR2(30) := 'validate_level_attributes';
474     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
475     l_periods_exists       VARCHAR2(3) := 'N';
476 
477   BEGIN
478 
479     FOR i IN p_cashflow_level_tbl.FIRST .. p_cashflow_level_tbl.LAST LOOP
480 
481       IF p_cashflow_level_tbl.EXISTS(i) THEN
482 
483         IF p_cashflow_level_tbl(i).periods IS NOT NULL THEN
484           l_periods_exists := 'Y';
485         END IF;
486 
487         IF p_cashflow_level_tbl(i).periods <= 0 THEN
488           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_PERIOD_ZERO');
489           RAISE OKL_API.G_EXCEPTION_ERROR;
490         END IF;
491 
492         IF TRUNC(p_cashflow_level_tbl(i).periods) <> p_cashflow_level_tbl(i).periods THEN
493           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_PERIOD_FRACTION');
494           RAISE OKL_API.G_EXCEPTION_ERROR;
495         END IF;
496 
497         IF p_cashflow_level_tbl(i).stub_days <= 0 THEN
498           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_STUBDAYS_ZERO');
499           RAISE OKL_API.G_EXCEPTION_ERROR;
500         END IF;
501 
502         IF TRUNC(p_cashflow_level_tbl(i).stub_days) <> p_cashflow_level_tbl(i).stub_days THEN
503           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_STUBDAYS_FRACTION');
504           RAISE OKL_API.G_EXCEPTION_ERROR;
505         END IF;
506         IF p_pricing_method <> 'SP' AND p_pricing_method <> 'SM' THEN
507           IF p_cashflow_level_tbl(i).periodic_amount < 0 THEN
508             OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_AMOUNT_ZERO');
509             RAISE OKL_API.G_EXCEPTION_ERROR;
510           END IF;
511         END IF;
512         IF p_pricing_method <> 'SP' AND p_pricing_method <> 'SM' THEN
513           IF p_cashflow_level_tbl(i).stub_amount < 0 THEN
514             OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_STUBAMT_ZERO');
515             RAISE OKL_API.G_EXCEPTION_ERROR;
516           END IF;
517         END IF;
518 
519         IF p_caf_status <> 'WORK' AND p_cashflow_level_tbl(i).rate <= 0 THEN
520           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_RATE_ZERO');
521           RAISE OKL_API.G_EXCEPTION_ERROR;
522         END IF;
523 
524         IF (p_cashflow_level_tbl(i).stub_days IS NULL) AND (p_cashflow_level_tbl(i).periods IS NULL) THEN
525           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_NO_STUB_AND_PER');
526           RAISE OKL_API.G_EXCEPTION_ERROR;
527         END IF;
528 
529         IF (p_cashflow_level_tbl(i).stub_days IS NOT NULL) AND (p_cashflow_level_tbl(i).periods IS NOT NULL) THEN
530           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_BOTH_STUB_AND_PER');
531           RAISE OKL_API.G_EXCEPTION_ERROR;
532         END IF;
533 
534         IF (p_cashflow_level_tbl(i).stub_amount IS NOT NULL) AND (p_cashflow_level_tbl(i).stub_days IS NULL) THEN
535           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_STUBAMT_WO_DAYS');
536           RAISE OKL_API.G_EXCEPTION_ERROR;
537         END IF;
538 
539         IF p_pricing_method <> 'SP' AND p_pricing_method <> 'SM' THEN
540           IF (p_cashflow_level_tbl(i).stub_amount IS  NULL) AND (p_cashflow_level_tbl(i).stub_days IS NOT NULL) THEN
541             OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_STUBDAYS_WO_AMT');
542             RAISE OKL_API.G_EXCEPTION_ERROR;
543           END IF;
544         END IF;
545         IF (p_cashflow_level_tbl(i).periodic_amount IS NOT NULL) AND (p_cashflow_level_tbl(i).periods IS NULL) THEN
546           OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_AMOUNT_WO_PERIODS');
547           RAISE OKL_API.G_EXCEPTION_ERROR;
548         END IF;
549         IF p_pricing_method <> 'SP' AND p_pricing_method <> 'SM' THEN
550           IF (p_cashflow_level_tbl(i).periodic_amount IS  NULL) AND (p_cashflow_level_tbl(i).periods IS NOT NULL) THEN
551             OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_PERIODS_WO_AMOUNT');
552             RAISE OKL_API.G_EXCEPTION_ERROR;
553           END IF;
554         END IF;
555       END IF;
556 
557     END LOOP;
558     IF l_periods_exists = 'N' THEN
559       OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_PERIODS_NOT_PRESENT');
560       RAISE OKL_API.G_EXCEPTION_ERROR;
561     END IF;
562     x_return_status := G_RET_STS_SUCCESS;
563 
564   EXCEPTION
565 
566     WHEN OKL_API.G_EXCEPTION_ERROR THEN
567       x_return_status := G_RET_STS_ERROR;
568 
569     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
570       x_return_status := G_RET_STS_UNEXP_ERROR;
571 
572     WHEN OTHERS THEN
573       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
574                            p_msg_name     => G_DB_ERROR,
575                            p_token1       => G_PROG_NAME_TOKEN,
576                            p_token1_value => l_api_name,
577                            p_token2       => G_SQLCODE_TOKEN,
578                            p_token2_value => sqlcode,
579                            p_token3       => G_SQLERRM_TOKEN,
580                            p_token3_value => sqlerrm);
581 
582       x_return_status := G_RET_STS_UNEXP_ERROR;
583 
584   END validate_level_attributes;
585 
586 
587   ---------------------------------
588   -- PROCEDURE get_contract_details
589   ---------------------------------
590   PROCEDURE get_contract_details (
591     p_quote_type       IN  VARCHAR2
592    ,p_quote_id         IN  NUMBER
593    ,x_contract_details OUT NOCOPY contract_details_rec_type
594    ,x_return_status    OUT NOCOPY VARCHAR2
595    ) IS
596 
597     l_program_name         CONSTANT VARCHAR2(30) := 'get_contract_details';
598     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
599 
600     CURSOR c_lq_hdr IS
601       SELECT
602         lop.currency_code
603        ,lsq.expected_start_date
604        ,lsq.term
605        ,lsq.pricing_method
606       FROM
607         okl_lease_quotes_b lsq
608        ,okl_lease_opportunities_b lop
609       WHERE lsq.id = p_quote_id
610         AND lsq.parent_object_code = 'LEASEOPP'
611         AND lsq.parent_object_id = lop.id;
612 
613     CURSOR c_la_hdr IS
614       SELECT
615         lap.currency_code
616        ,lsq.expected_start_date
617        ,lsq.term
618        ,lsq.pricing_method
619       FROM
620         okl_lease_quotes_b lsq
621        ,okl_lease_applications_b lap
622       WHERE lsq.id = p_quote_id
623         AND lsq.parent_object_code = 'LEASEAPP'
624         AND lsq.parent_object_id = lap.id;
625 
626     CURSOR c_qq_hdr IS
627       SELECT
628         currency_code
629        ,expected_start_date
630        ,term
631        ,pricing_method
632       FROM
633         okl_quick_quotes_b
634       WHERE id = p_quote_id;
635 
636   BEGIN
637 
638     IF p_quote_type = 'LQ' THEN
639       OPEN c_lq_hdr;
640       FETCH c_lq_hdr INTO x_contract_details;
641       CLOSE c_lq_hdr;
642     ELSIF p_quote_type = 'LA' THEN
643       OPEN c_la_hdr;
644       FETCH c_la_hdr INTO x_contract_details;
645       CLOSE c_la_hdr;
646     ELSIF p_quote_type = 'QQ' THEN
647       OPEN c_qq_hdr;
648       FETCH c_qq_hdr INTO x_contract_details;
649       CLOSE c_qq_hdr;
650     END IF;
651 
652     IF (x_contract_details.currency_code IS NULL) OR (x_contract_details.start_date IS NULL) OR
653        (x_contract_details.term IS NULL) OR (x_contract_details.pricing_method_code IS NULL) THEN
654 
655       OKL_API.SET_MESSAGE (
656         p_app_name     => G_APP_NAME
657        ,p_msg_name     => 'OKL_INVALID_VALUE2'
658        ,p_token1       => 'API_NAME'
659        ,p_token1_value => UPPER(l_api_name)
660        ,p_token2       => 'NAME'
661        ,p_token2_value => 'x_contract_details'
662        ,p_token3       => 'VALUE'
663        ,p_token3_value => 'null'
664        );
665       RAISE OKL_API.G_EXCEPTION_ERROR;
666 
667     END IF;
668 
669     x_return_status := G_RET_STS_SUCCESS;
670 
671   EXCEPTION
672 
673     WHEN OKL_API.G_EXCEPTION_ERROR THEN
674       x_return_status := G_RET_STS_ERROR;
675 
676     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
677       x_return_status := G_RET_STS_UNEXP_ERROR;
678 
679     WHEN OTHERS THEN
680       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
681                            p_msg_name     => G_DB_ERROR,
682                            p_token1       => G_PROG_NAME_TOKEN,
683                            p_token1_value => l_api_name,
684                            p_token2       => G_SQLCODE_TOKEN,
685                            p_token2_value => sqlcode,
686                            p_token3       => G_SQLERRM_TOKEN,
687                            p_token3_value => sqlerrm);
688 
689       x_return_status := G_RET_STS_UNEXP_ERROR;
690 
691   END get_contract_details;
692 
693 
694   ------------------------------
695   -- PROCEDURE process_cashflow
696   ------------------------------
697   PROCEDURE process_cashflow (
698     p_cashflow_header_rec IN OUT NOCOPY cashflow_header_rec_type
699    ,p_cashflow_level_tbl  IN OUT NOCOPY cashflow_level_tbl_type
700    ,x_return_status       OUT NOCOPY VARCHAR2
701    ) IS
702 
703     l_program_name         CONSTANT VARCHAR2(30) := 'process_cashflow';
704     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
705 
706     l_contract_details     contract_details_rec_type;
707 
708   BEGIN
709 
710     sanity_check (
711       p_cashflow_header_rec => p_cashflow_header_rec
712      ,p_cashflow_level_tbl => p_cashflow_level_tbl
713      ,x_return_status       => x_return_status
714      );
715 
716     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
717       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
718     ELSIF x_return_status = G_RET_STS_ERROR THEN
719       RAISE OKL_API.G_EXCEPTION_ERROR;
720     END IF;
721 
722     get_contract_details (
723       p_quote_type        => p_cashflow_header_rec.quote_type_code
724      ,p_quote_id          => p_cashflow_header_rec.quote_id
725      ,x_contract_details  => l_contract_details
726      ,x_return_status     => x_return_status
727      );
728 
729     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
730       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
731     ELSIF x_return_status = G_RET_STS_ERROR THEN
732       RAISE OKL_API.G_EXCEPTION_ERROR;
733     END IF;
734 
735     validate_level_attributes (
736       p_cashflow_level_tbl => p_cashflow_level_tbl
737      ,p_caf_status         => p_cashflow_header_rec.status_code
738      ,p_pricing_method     => l_contract_details.pricing_method_code
739      ,x_return_status      => x_return_status
740      );
741 
742     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
743       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
744     ELSIF x_return_status = G_RET_STS_ERROR THEN
745       RAISE OKL_API.G_EXCEPTION_ERROR;
746     END IF;
747 
748     set_level_end_date (
749       p_contract_start_date => l_contract_details.start_date
750      ,p_contract_term       => l_contract_details.term
751      ,p_cashflow_header_rec => p_cashflow_header_rec
752      ,p_cashflow_level_tbl  => p_cashflow_level_tbl
753      ,x_return_status       => x_return_status
754      );
755 
756     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
757       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
758     ELSIF x_return_status = G_RET_STS_ERROR THEN
759       RAISE OKL_API.G_EXCEPTION_ERROR;
760     END IF;
761 
762     set_level_amount (
763       p_contract_currency   => l_contract_details.currency_code
764      ,p_cashflow_level_tbl  => p_cashflow_level_tbl
765      ,x_return_status       => x_return_status
766      );
767 
768     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
769       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
770     ELSIF x_return_status = G_RET_STS_ERROR THEN
771       RAISE OKL_API.G_EXCEPTION_ERROR;
772     END IF;
773 
774     x_return_status    := G_RET_STS_SUCCESS;
775 
776   EXCEPTION
777 
778     WHEN OKL_API.G_EXCEPTION_ERROR THEN
779       x_return_status := G_RET_STS_ERROR;
780 
781     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
782       x_return_status := G_RET_STS_UNEXP_ERROR;
783 
784     WHEN OTHERS THEN
785       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
786                            p_msg_name     => G_DB_ERROR,
787                            p_token1       => G_PROG_NAME_TOKEN,
788                            p_token1_value => l_api_name,
789                            p_token2       => G_SQLCODE_TOKEN,
790                            p_token2_value => sqlcode,
791                            p_token3       => G_SQLERRM_TOKEN,
792                            p_token3_value => sqlerrm);
793 
794       x_return_status := G_RET_STS_UNEXP_ERROR;
795 
796   END process_cashflow;
797 
798 
799   ------------------------
800   -- PROCEDURE insert_rows
801   ------------------------
802   PROCEDURE insert_rows (
803     p_cashflow_header_rec IN  OUT NOCOPY cashflow_header_rec_type
804    ,p_cashflow_level_tbl  IN  OUT NOCOPY cashflow_level_tbl_type
805    ,x_return_status       OUT NOCOPY VARCHAR2
806    ,x_msg_count           OUT NOCOPY NUMBER
807    ,x_msg_data            OUT NOCOPY VARCHAR2
808    ) IS
809 
810     l_program_name         CONSTANT VARCHAR2(30) := 'insert_rows';
811     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
812 
813     l_cafv_rec             cafv_rec_type;
814     lx_cafv_rec            cafv_rec_type;
815 
816     l_cfov_rec             cfov_rec_type;
817     lx_cfov_rec            cfov_rec_type;
818 
819     l_cflv_tbl             cflv_tbl_type;
820     lx_cflv_tbl            cflv_tbl_type;
821 
822   BEGIN
823 
824     l_cfov_rec.object_version_number  := 1;
825     l_cfov_rec.oty_code               := p_cashflow_header_rec.parent_object_code;
826     l_cfov_rec.source_id              := p_cashflow_header_rec.parent_object_id;
827 
828     --Bug # 5142940 ssdeshpa start
829     IF (p_cashflow_header_rec.parent_object_code IN ('QUOTED_ASSET','QUOTED_ASSET_DOWN_PAYMENT','QUOTED_ASSET_PROPERTY_TAX')) THEN
830       l_cfov_rec.source_table := 'OKL_ASSETS_B';
831      --Bug # 5142940 ssdeshpa end
832     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUOTED_FEE') THEN
833       l_cfov_rec.source_table := 'OKL_FEES_B';
834     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUOTED_SERVICE') THEN
835       l_cfov_rec.source_table := 'OKL_SERVICES_B';
836     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUOTED_INSURANCE') THEN
837       l_cfov_rec.source_table := 'OKL_INSURANCE_ESTIMATES_B';
838     ELSIF (p_cashflow_header_rec.parent_object_code = 'LEASE_QUOTE') THEN
839       l_cfov_rec.source_table := 'OKL_LEASE_QUOTES_B';
840     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUICK_QUOTE') THEN
841       l_cfov_rec.source_table := 'OKL_QUICK_QUOTES_B';
842     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUICK_QUOTE_ASSET') THEN
843       l_cfov_rec.source_table := 'OKL_QUICK_QUOTE_LINES_B';
844     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUICK_QUOTE_SERVICE') THEN
845       l_cfov_rec.source_table := 'OKL_QUICK_QUOTE_LINES_B';
846     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUICK_QUOTE_FEE') THEN
847       l_cfov_rec.source_table := 'OKL_QUICK_QUOTE_LINES_B';
848     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUICK_QUOTE_TAX') THEN
849       l_cfov_rec.source_table := 'OKL_QUICK_QUOTE_LINES_B';
850     ELSIF (p_cashflow_header_rec.parent_object_code = 'QUICK_QUOTE_INSURANCE') THEN
851       l_cfov_rec.source_table := 'OKL_QUICK_QUOTE_LINES_B';
852     ELSIF (p_cashflow_header_rec.parent_object_code = 'LEASE_QUOTE_CONSOLIDATED') THEN
853       l_cfov_rec.source_table := 'OKL_LEASE_QUOTES_B';
854     END IF;
855 
856     okl_cfo_pvt.insert_row (
857       p_api_version   => G_API_VERSION
858      ,p_init_msg_list => G_FALSE
859      ,x_return_status => x_return_status
860      ,x_msg_count     => x_msg_count
861      ,x_msg_data      => x_msg_data
862      ,p_cfov_rec      => l_cfov_rec
863      ,x_cfov_rec      => lx_cfov_rec
864      );
865 
866     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
867       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
868     ELSIF x_return_status = G_RET_STS_ERROR THEN
869       RAISE OKL_API.G_EXCEPTION_ERROR;
870     END IF;
871 
872     l_cafv_rec.cfo_id                 := lx_cfov_rec.id;
873     l_cafv_rec.object_version_number  := 1;
874     --bug 4898499
875     IF p_cashflow_header_rec.status_code = 'WORK' THEN
876       l_cafv_rec.sts_code  := 'WORK';
877     ELSE
878       l_cafv_rec.sts_code  := 'CURRENT';
879     END IF;
880     l_cafv_rec.sty_id         := p_cashflow_header_rec.stream_type_id;
881     l_cafv_rec.due_arrears_yn := p_cashflow_header_rec.arrears_flag;
882     l_cafv_rec.dnz_qte_id     := p_cashflow_header_rec.quote_id;
883     l_cafv_rec.start_date     := p_cashflow_level_tbl(p_cashflow_level_tbl.FIRST).start_date;
884 
885     IF p_cashflow_header_rec.type_code = 'INFLOW' THEN
886       l_cafv_rec.cft_code := 'PAYMENT_SCHEDULE';
887     ELSIF p_cashflow_header_rec.type_code = 'OUTFLOW' THEN
888       l_cafv_rec.cft_code := 'OUTFLOW_SCHEDULE';
889     END IF;
890 
891     okl_caf_pvt.insert_row (
892       p_api_version   => G_API_VERSION
893      ,p_init_msg_list => G_FALSE
894      ,x_return_status => x_return_status
895      ,x_msg_count     => x_msg_count
896      ,x_msg_data      => x_msg_data
897      ,p_cafv_rec      => l_cafv_rec
898      ,x_cafv_rec      => lx_cafv_rec
899      );
900 
901     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
902       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
903     ELSIF x_return_status = G_RET_STS_ERROR THEN
904       RAISE OKL_API.G_EXCEPTION_ERROR;
905     END IF;
906 
907     FOR i IN p_cashflow_level_tbl.FIRST .. p_cashflow_level_tbl.LAST LOOP
908       IF p_cashflow_level_tbl.EXISTS(i) THEN
909         l_cflv_tbl(i).caf_id            := lx_cafv_rec.id;
910         l_cflv_tbl(i).object_version_number := 1;
911         l_cflv_tbl(i).number_of_periods := p_cashflow_level_tbl(i).periods;
912         l_cflv_tbl(i).amount            := p_cashflow_level_tbl(i).periodic_amount;
913         l_cflv_tbl(i).stub_days         := p_cashflow_level_tbl(i).stub_days;
914         l_cflv_tbl(i).stub_amount       := p_cashflow_level_tbl(i).stub_amount;
915         l_cflv_tbl(i).start_date        := p_cashflow_level_tbl(i).start_date;
916         l_cflv_tbl(i).fqy_code          := p_cashflow_header_rec.frequency_code;
917         l_cflv_tbl(i).rate              := p_cashflow_level_tbl(i).rate;
918         l_cflv_tbl(i).missing_pmt_flag  := p_cashflow_level_tbl(i).missing_pmt_flag;
919       END IF;
920     END LOOP;
921 
922     okl_cfl_pvt.insert_row (
923       p_api_version   => G_API_VERSION
924      ,p_init_msg_list => G_FALSE
925      ,x_return_status => x_return_status
926      ,x_msg_count     => x_msg_count
927      ,x_msg_data      => x_msg_data
928      ,p_cflv_tbl      => l_cflv_tbl
929      ,x_cflv_tbl      => lx_cflv_tbl
930      );
931 
932     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
933       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
934     ELSIF x_return_status = G_RET_STS_ERROR THEN
935       RAISE OKL_API.G_EXCEPTION_ERROR;
936     END IF;
937 
938     p_cashflow_header_rec.cashflow_object_id := lx_cfov_rec.id;
939     p_cashflow_header_rec.cashflow_header_id := lx_cafv_rec.id;
940 
941     populate_level_ids (
942       p_cf_header_id       => p_cashflow_header_rec.cashflow_header_id
943      ,x_cf_levels_tbl      => p_cashflow_level_tbl
944      ,x_return_status      => x_return_status
945      );
946 
947     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
948       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
949     ELSIF x_return_status = G_RET_STS_ERROR THEN
950       RAISE OKL_API.G_EXCEPTION_ERROR;
951     END IF;
952 
953   EXCEPTION
954 
955     WHEN OKL_API.G_EXCEPTION_ERROR THEN
956       x_return_status := G_RET_STS_ERROR;
957 
958     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
959       x_return_status := G_RET_STS_UNEXP_ERROR;
960 
961     WHEN OTHERS THEN
962       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
963                            p_msg_name     => G_DB_ERROR,
964                            p_token1       => G_PROG_NAME_TOKEN,
965                            p_token1_value => l_api_name,
966                            p_token2       => G_SQLCODE_TOKEN,
967                            p_token2_value => sqlcode,
968                            p_token3       => G_SQLERRM_TOKEN,
969                            p_token3_value => sqlerrm);
970 
971       x_return_status := G_RET_STS_UNEXP_ERROR;
972 
973   END insert_rows;
974 
975 
976   -------------------------------
977   -- PROCEDURE insert_update_rows
978   -------------------------------
979   PROCEDURE insert_update_rows (
980     p_cashflow_header_rec IN OUT NOCOPY cashflow_header_rec_type
981    ,p_cashflow_level_tbl  IN OUT NOCOPY cashflow_level_tbl_type
982    ,x_return_status       OUT NOCOPY VARCHAR2
983    ,x_msg_count           OUT NOCOPY NUMBER
984    ,x_msg_data            OUT NOCOPY VARCHAR2
985    ) IS
986 
987     l_program_name         CONSTANT VARCHAR2(30) := 'insert_update_rows';
988     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
989 
990     l_cafv_rec             cafv_rec_type;
991     lx_cafv_rec            cafv_rec_type;
992 
993     l_cflv_ins_tbl         cflv_tbl_type;
994     l_cflv_upd_tbl         cflv_tbl_type;
995     lx_cflv_tbl            cflv_tbl_type;
996 
997   BEGIN
998 
999     l_cafv_rec.id                     := p_cashflow_header_rec.cashflow_header_id;
1000     l_cafv_rec.object_version_number  := p_cashflow_header_rec.cashflow_header_ovn;
1001     l_cafv_rec.cfo_id                 := p_cashflow_header_rec.cashflow_object_id;
1002     l_cafv_rec.sty_id                 := p_cashflow_header_rec.stream_type_id;
1003     l_cafv_rec.due_arrears_yn         := p_cashflow_header_rec.arrears_flag;
1004     l_cafv_rec.start_date             := p_cashflow_level_tbl(p_cashflow_level_tbl.FIRST).start_date;
1005 
1006     okl_caf_pvt.update_row (
1007       p_api_version   => G_API_VERSION
1008      ,p_init_msg_list => G_FALSE
1009      ,x_return_status => x_return_status
1010      ,x_msg_count     => x_msg_count
1011      ,x_msg_data      => x_msg_data
1012      ,p_cafv_rec      => l_cafv_rec
1013      ,x_cafv_rec      => lx_cafv_rec
1014      );
1015 
1016     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1017       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1018     ELSIF x_return_status = G_RET_STS_ERROR THEN
1019       RAISE OKL_API.G_EXCEPTION_ERROR;
1020     END IF;
1021 
1022     FOR i IN p_cashflow_level_tbl.FIRST .. p_cashflow_level_tbl.LAST LOOP
1023       IF p_cashflow_level_tbl.EXISTS(i) THEN
1024         IF UPPER(p_cashflow_level_tbl(i).record_mode) = 'CREATE' THEN
1025           l_cflv_ins_tbl(i).caf_id            := lx_cafv_rec.id;
1026           l_cflv_ins_tbl(i).object_version_number := 1;
1027           l_cflv_ins_tbl(i).number_of_periods := p_cashflow_level_tbl(i).periods;
1028           l_cflv_ins_tbl(i).amount            := p_cashflow_level_tbl(i).periodic_amount;
1029           l_cflv_ins_tbl(i).stub_days         := p_cashflow_level_tbl(i).stub_days;
1030           l_cflv_ins_tbl(i).stub_amount       := p_cashflow_level_tbl(i).stub_amount;
1031           l_cflv_ins_tbl(i).start_date        := p_cashflow_level_tbl(i).start_date;
1032           l_cflv_ins_tbl(i).fqy_code          := p_cashflow_header_rec.frequency_code;
1033           l_cflv_ins_tbl(i).rate              := p_cashflow_level_tbl(i).rate;
1034           l_cflv_ins_tbl(i).missing_pmt_flag  := p_cashflow_level_tbl(i).missing_pmt_flag;
1035         ELSIF UPPER(p_cashflow_level_tbl(i).record_mode) = 'UPDATE' THEN
1036           l_cflv_upd_tbl(i).id                    := p_cashflow_level_tbl(i).cashflow_level_id;
1037           l_cflv_upd_tbl(i).caf_id                := lx_cafv_rec.id;
1038           l_cflv_upd_tbl(i).object_version_number := p_cashflow_level_tbl(i).cashflow_level_ovn;
1039           l_cflv_upd_tbl(i).number_of_periods     := p_cashflow_level_tbl(i).periods;
1040           l_cflv_upd_tbl(i).amount                := p_cashflow_level_tbl(i).periodic_amount;
1041           l_cflv_upd_tbl(i).stub_days             := p_cashflow_level_tbl(i).stub_days;
1042           l_cflv_upd_tbl(i).stub_amount           := p_cashflow_level_tbl(i).stub_amount;
1043           l_cflv_upd_tbl(i).start_date            := p_cashflow_level_tbl(i).start_date;
1044           l_cflv_upd_tbl(i).fqy_code              := p_cashflow_header_rec.frequency_code;
1045           l_cflv_upd_tbl(i).rate                  := p_cashflow_level_tbl(i).rate;
1046           l_cflv_upd_tbl(i).missing_pmt_flag      := p_cashflow_level_tbl(i).missing_pmt_flag;
1047         END IF;
1048       END IF;
1049     END LOOP;
1050 
1051     IF l_cflv_ins_tbl.COUNT > 0 THEN
1052 
1053       okl_cfl_pvt.insert_row (
1054         p_api_version   => G_API_VERSION
1055        ,p_init_msg_list => G_FALSE
1056        ,x_return_status => x_return_status
1057        ,x_msg_count     => x_msg_count
1058        ,x_msg_data      => x_msg_data
1059        ,p_cflv_tbl      => l_cflv_ins_tbl
1060        ,x_cflv_tbl      => lx_cflv_tbl
1061        );
1062 
1063       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1064         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1065       ELSIF x_return_status = G_RET_STS_ERROR THEN
1066         RAISE OKL_API.G_EXCEPTION_ERROR;
1067       END IF;
1068 
1069     END IF;
1070 
1071     IF l_cflv_upd_tbl.COUNT > 0 THEN
1072 
1073       okl_cfl_pvt.update_row (
1074         p_api_version   => G_API_VERSION
1075        ,p_init_msg_list => G_FALSE
1076        ,x_return_status => x_return_status
1077        ,x_msg_count     => x_msg_count
1078        ,x_msg_data      => x_msg_data
1079        ,p_cflv_tbl      => l_cflv_upd_tbl
1080        ,x_cflv_tbl      => lx_cflv_tbl
1081        );
1082 
1083       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1084         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1085       ELSIF x_return_status = G_RET_STS_ERROR THEN
1086         RAISE OKL_API.G_EXCEPTION_ERROR;
1087       END IF;
1088 
1089     END IF;
1090 
1091     populate_level_ids (
1092       p_cf_header_id       => p_cashflow_header_rec.cashflow_header_id
1093      ,x_cf_levels_tbl      => p_cashflow_level_tbl
1094      ,x_return_status      => x_return_status
1095      );
1096 
1097     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1098       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1099     ELSIF x_return_status = G_RET_STS_ERROR THEN
1100       RAISE OKL_API.G_EXCEPTION_ERROR;
1101     END IF;
1102 
1103   EXCEPTION
1104 
1105     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1106       x_return_status := G_RET_STS_ERROR;
1107 
1108     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1109       x_return_status := G_RET_STS_UNEXP_ERROR;
1110 
1111     WHEN OTHERS THEN
1112       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1113                            p_msg_name     => G_DB_ERROR,
1114                            p_token1       => G_PROG_NAME_TOKEN,
1115                            p_token1_value => l_api_name,
1116                            p_token2       => G_SQLCODE_TOKEN,
1117                            p_token2_value => sqlcode,
1118                            p_token3       => G_SQLERRM_TOKEN,
1119                            p_token3_value => sqlerrm);
1120 
1121       x_return_status := G_RET_STS_UNEXP_ERROR;
1122 
1123   END insert_update_rows;
1124 
1125 
1126   ----------------------------------------
1127   -- PROCEDURE get_deleted_cashflow_levels
1128   ----------------------------------------
1129   PROCEDURE get_deleted_cashflow_levels (p_cashflow_header_id            IN  NUMBER,
1130                                 p_cashflow_level_tbl       IN  cashflow_level_tbl_type,
1131                                 x_deleted_cashflow_level_tbl   OUT NOCOPY cflv_tbl_type,
1132                                 x_return_status       OUT NOCOPY VARCHAR2) IS
1133 
1134     l_program_name         CONSTANT VARCHAR2(30) := 'get_deleted_cashflow_levels';
1135     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
1136 
1137     CURSOR c_db_cashflow_levels IS
1138       SELECT id
1139       FROM   okl_cash_flow_levels
1140       WHERE  caf_id = p_cashflow_header_id;
1141 
1142     l_cashflow_level_tbl   cflv_tbl_type;
1143     l_delete_flag          VARCHAR2(1);
1144     i                      BINARY_INTEGER := 0;
1145 
1146   BEGIN
1147 
1148     IF (p_cashflow_level_tbl.COUNT > 0) THEN
1149       FOR l_db_cashflow_levels IN c_db_cashflow_levels LOOP
1150         l_delete_flag := 'Y';
1151         FOR j IN p_cashflow_level_tbl.FIRST .. p_cashflow_level_tbl.LAST LOOP
1152           IF p_cashflow_level_tbl.EXISTS(j) THEN
1153             IF l_db_cashflow_levels.id = p_cashflow_level_tbl(j).cashflow_level_id THEN
1154               l_delete_flag := 'N';
1155             END IF;
1156           END IF;
1157         END LOOP;
1158 
1159         IF l_delete_flag = 'Y' THEN
1160           l_cashflow_level_tbl(i).id := l_db_cashflow_levels.id;
1161           i := i + 1;
1162         END IF;
1163       END LOOP;
1164     ELSE
1165       FOR l_db_cashflow_levels IN c_db_cashflow_levels LOOP
1166         l_cashflow_level_tbl(i).id := l_db_cashflow_levels.id;
1167         i := i + 1;
1168       END LOOP;
1169     END IF;
1170 
1171     x_deleted_cashflow_level_tbl := l_cashflow_level_tbl;
1172     x_return_status := G_RET_STS_SUCCESS;
1173 
1174   EXCEPTION
1175 
1176     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1177       x_return_status := G_RET_STS_ERROR;
1178 
1179     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1180       x_return_status := G_RET_STS_UNEXP_ERROR;
1181 
1182     WHEN OTHERS THEN
1183       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1184                            p_msg_name     => G_DB_ERROR,
1185                            p_token1       => G_PROG_NAME_TOKEN,
1186                            p_token1_value => l_api_name,
1187                            p_token2       => G_SQLCODE_TOKEN,
1188                            p_token2_value => sqlcode,
1189                            p_token3       => G_SQLERRM_TOKEN,
1190                            p_token3_value => sqlerrm);
1191 
1192       x_return_status := G_RET_STS_UNEXP_ERROR;
1193 
1194   END get_deleted_cashflow_levels;
1195 
1196 
1197   --------------------------------------
1198   -- PROCEDURE process_cashflow_deletion
1199   --------------------------------------
1200   PROCEDURE process_cashflow_deletion (
1201     p_cashflow_header_rec IN  cashflow_header_rec_type
1202    ,p_cashflow_level_tbl  IN  cashflow_level_tbl_type
1203    ,x_return_status       OUT NOCOPY VARCHAR2
1204    ,x_msg_count           OUT NOCOPY NUMBER
1205    ,x_msg_data            OUT NOCOPY VARCHAR2
1206    ) IS
1207 
1208     l_program_name           CONSTANT VARCHAR2(30) := 'process_cashflow_deletion';
1209     l_api_name               CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
1210 
1211     l_deleted_cf_level_tbl   cflv_tbl_type;
1212 
1213     l_cafv_rec               cafv_rec_type;
1214     l_cfov_rec               cfov_rec_type;
1215 
1216   BEGIN
1217 
1218     get_deleted_cashflow_levels (
1219       p_cashflow_header_id         => p_cashflow_header_rec.cashflow_header_id
1220      ,p_cashflow_level_tbl         => p_cashflow_level_tbl
1221      ,x_deleted_cashflow_level_tbl => l_deleted_cf_level_tbl
1222      ,x_return_status              => x_return_status
1223      );
1224 
1225     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1226       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1227     ELSIF x_return_status = G_RET_STS_ERROR THEN
1228       RAISE OKL_API.G_EXCEPTION_ERROR;
1229     END IF;
1230 
1231     IF l_deleted_cf_level_tbl.COUNT > 0 THEN
1232 
1233       okl_cfl_pvt.delete_row (
1234         p_api_version   => G_API_VERSION
1235        ,p_init_msg_list => G_FALSE
1236        ,x_return_status => x_return_status
1237        ,x_msg_count     => x_msg_count
1238        ,x_msg_data      => x_msg_data
1239        ,p_cflv_tbl      => l_deleted_cf_level_tbl
1240        );
1241 
1242       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1243         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1244       ELSIF x_return_status = G_RET_STS_ERROR THEN
1245         RAISE OKL_API.G_EXCEPTION_ERROR;
1246       END IF;
1247 
1248     END IF;
1249 
1250     IF p_cashflow_level_tbl.COUNT = 0 THEN
1251 
1252       l_cafv_rec.id := p_cashflow_header_rec.cashflow_header_id;
1253 
1254       okl_caf_pvt.delete_row (
1255         p_api_version   => G_API_VERSION
1256        ,p_init_msg_list => G_FALSE
1257        ,x_return_status => x_return_status
1258        ,x_msg_count     => x_msg_count
1259        ,x_msg_data      => x_msg_data
1260        ,p_cafv_rec      => l_cafv_rec
1261        );
1262 
1263       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1264         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1265       ELSIF x_return_status = G_RET_STS_ERROR THEN
1266         RAISE OKL_API.G_EXCEPTION_ERROR;
1267       END IF;
1268 
1269       l_cfov_rec.id := p_cashflow_header_rec.cashflow_object_id;
1270 
1271       okl_cfo_pvt.delete_row (
1272         p_api_version   => G_API_VERSION
1273        ,p_init_msg_list => G_FALSE
1274        ,x_return_status => x_return_status
1275        ,x_msg_count     => x_msg_count
1276        ,x_msg_data      => x_msg_data
1277        ,p_cfov_rec      => l_cfov_rec
1278        );
1279 
1280       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1281         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1282       ELSIF x_return_status = G_RET_STS_ERROR THEN
1283         RAISE OKL_API.G_EXCEPTION_ERROR;
1284       END IF;
1285 
1286     END IF;
1287 
1288   EXCEPTION
1289 
1290     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1291       x_return_status := G_RET_STS_ERROR;
1292 
1293     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1294       x_return_status := G_RET_STS_UNEXP_ERROR;
1295 
1296     WHEN OTHERS THEN
1297       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1298                            p_msg_name     => G_DB_ERROR,
1299                            p_token1       => G_PROG_NAME_TOKEN,
1300                            p_token1_value => l_api_name,
1301                            p_token2       => G_SQLCODE_TOKEN,
1302                            p_token2_value => sqlcode,
1303                            p_token3       => G_SQLERRM_TOKEN,
1304                            p_token3_value => sqlerrm);
1305 
1306       x_return_status := G_RET_STS_UNEXP_ERROR;
1307 
1308   END process_cashflow_deletion;
1309 
1310 ----------------------------
1311   -- PROCEDURE create_cashflow
1312   ----------------------------
1313   PROCEDURE create_cashflow (
1314      p_api_version             IN  NUMBER
1315     ,p_init_msg_list           IN  VARCHAR2
1316     ,p_transaction_control     IN  VARCHAR2
1317     ,p_cashflow_header_rec     IN  OUT NOCOPY cashflow_header_rec_type
1318     ,p_cashflow_level_tbl      IN  OUT NOCOPY cashflow_level_tbl_type
1319     ,x_return_status           OUT NOCOPY VARCHAR2
1320     ,x_msg_count               OUT NOCOPY NUMBER
1321     ,x_msg_data                OUT NOCOPY VARCHAR2) IS
1322 
1323     l_program_name          CONSTANT VARCHAR2(30) := 'create_cashflow';
1324     l_api_name              CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
1325 
1326   BEGIN
1327 
1328     IF p_transaction_control = G_TRUE THEN
1329       SAVEPOINT l_program_name;
1330     END IF;
1331 
1332     IF p_init_msg_list = G_TRUE THEN
1333       FND_MSG_PUB.initialize;
1334     END IF;
1335 
1336     IF p_cashflow_level_tbl.COUNT = 0 THEN
1337       OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_REQD_LEVELS');
1338       RAISE OKL_API.G_EXCEPTION_ERROR;
1339     END IF;
1340 
1341     process_cashflow (
1342       p_cashflow_header_rec => p_cashflow_header_rec
1343      ,p_cashflow_level_tbl  => p_cashflow_level_tbl
1344      ,x_return_status       => x_return_status
1345      );
1346 
1347     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1348       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1349     ELSIF x_return_status = G_RET_STS_ERROR THEN
1350       RAISE OKL_API.G_EXCEPTION_ERROR;
1351     END IF;
1352 
1353     insert_rows (
1354       p_cashflow_header_rec => p_cashflow_header_rec
1355      ,p_cashflow_level_tbl  => p_cashflow_level_tbl
1356      ,x_return_status       => x_return_status
1357      ,x_msg_count           => x_msg_count
1358      ,x_msg_data            => x_msg_data
1359      );
1360 
1361     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1362       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1363     ELSIF x_return_status = G_RET_STS_ERROR THEN
1364       RAISE OKL_API.G_EXCEPTION_ERROR;
1365     END IF;
1366 
1367   EXCEPTION
1368 
1369      WHEN OKL_API.G_EXCEPTION_ERROR THEN
1370 
1371       IF p_transaction_control = G_TRUE THEN
1372         ROLLBACK TO l_program_name;
1373         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1374       END IF;
1375 
1376       x_return_status := G_RET_STS_ERROR;
1377 
1378     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1379 
1380       IF p_transaction_control = G_TRUE THEN
1381         ROLLBACK TO l_program_name;
1382         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1383       END IF;
1384 
1385       x_return_status := G_RET_STS_UNEXP_ERROR;
1386 
1387     WHEN OTHERS THEN
1388 
1389       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1390                            p_msg_name     => G_DB_ERROR,
1391                            p_token1       => G_PROG_NAME_TOKEN,
1392                            p_token1_value => l_api_name,
1393                            p_token2       => G_SQLCODE_TOKEN,
1394                            p_token2_value => sqlcode,
1395                            p_token3       => G_SQLERRM_TOKEN,
1396                            p_token3_value => sqlerrm);
1397 
1398       IF p_transaction_control = G_TRUE THEN
1399         ROLLBACK TO l_program_name;
1400         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1401       END IF;
1402 
1403       x_return_status := G_RET_STS_UNEXP_ERROR;
1404 
1405   END create_cashflow;
1406 
1407 
1408   ----------------------------
1409   -- PROCEDURE update_cashflow
1410   ----------------------------
1411   PROCEDURE update_cashflow (
1412      p_api_version             IN  NUMBER
1413     ,p_init_msg_list           IN  VARCHAR2
1414     ,p_transaction_control     IN  VARCHAR2
1415     ,p_cashflow_header_rec     IN  OUT NOCOPY cashflow_header_rec_type
1416     ,p_cashflow_level_tbl      IN  OUT NOCOPY cashflow_level_tbl_type
1417     ,x_return_status           OUT NOCOPY VARCHAR2
1418     ,x_msg_count               OUT NOCOPY NUMBER
1419     ,x_msg_data                OUT NOCOPY VARCHAR2) IS
1420 
1421     l_program_name         CONSTANT VARCHAR2(30) := 'update_cashflow';
1422     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
1423 
1424   BEGIN
1425 
1426     IF p_transaction_control = G_TRUE THEN
1427       SAVEPOINT l_program_name;
1428     END IF;
1429 
1430     IF p_init_msg_list = G_TRUE THEN
1431       FND_MSG_PUB.initialize;
1432     END IF;
1433 
1434     IF p_cashflow_level_tbl.COUNT = 0 AND p_cashflow_header_rec.stream_type_id IS NOT NULL THEN
1435       OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME, p_msg_name => 'OKL_LEVEL_REQD_LEVELS');
1436       RAISE OKL_API.G_EXCEPTION_ERROR;
1437     END IF;
1438 
1439     process_cashflow_deletion (
1440       p_cashflow_header_rec => p_cashflow_header_rec
1441      ,p_cashflow_level_tbl  => p_cashflow_level_tbl
1442      ,x_return_status       => x_return_status
1443      ,x_msg_count           => x_msg_count
1444      ,x_msg_data            => x_msg_data
1445      );
1446 
1447     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1448       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1449     ELSIF x_return_status = G_RET_STS_ERROR THEN
1450       RAISE OKL_API.G_EXCEPTION_ERROR;
1451     END IF;
1452 
1453     process_cashflow (
1454       p_cashflow_header_rec => p_cashflow_header_rec
1455      ,p_cashflow_level_tbl  => p_cashflow_level_tbl
1456      ,x_return_status       => x_return_status
1457      );
1458 
1459     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1460       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1461     ELSIF x_return_status = G_RET_STS_ERROR THEN
1462       RAISE OKL_API.G_EXCEPTION_ERROR;
1463     END IF;
1464 
1465     insert_update_rows (
1466       p_cashflow_header_rec => p_cashflow_header_rec
1467      ,p_cashflow_level_tbl  => p_cashflow_level_tbl
1468      ,x_return_status       => x_return_status
1469      ,x_msg_count           => x_msg_count
1470      ,x_msg_data            => x_msg_data
1471      );
1472 
1473     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1474       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1475     ELSIF x_return_status = G_RET_STS_ERROR THEN
1476       RAISE OKL_API.G_EXCEPTION_ERROR;
1477     END IF;
1478 
1479   EXCEPTION
1480 
1481      WHEN OKL_API.G_EXCEPTION_ERROR THEN
1482 
1483       IF p_transaction_control = G_TRUE THEN
1484         ROLLBACK TO l_program_name;
1485         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1486       END IF;
1487 
1488       x_return_status := G_RET_STS_ERROR;
1489 
1490     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1491 
1492       IF p_transaction_control = G_TRUE THEN
1493         ROLLBACK TO l_program_name;
1494         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1495       END IF;
1496 
1497       x_return_status := G_RET_STS_UNEXP_ERROR;
1498 
1499     WHEN OTHERS THEN
1500 
1501       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1502                            p_msg_name     => G_DB_ERROR,
1503                            p_token1       => G_PROG_NAME_TOKEN,
1504                            p_token1_value => l_api_name,
1505                            p_token2       => G_SQLCODE_TOKEN,
1506                            p_token2_value => sqlcode,
1507                            p_token3       => G_SQLERRM_TOKEN,
1508                            p_token3_value => sqlerrm);
1509 
1510       IF p_transaction_control = G_TRUE THEN
1511         ROLLBACK TO l_program_name;
1512         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1513       END IF;
1514 
1515       x_return_status := G_RET_STS_UNEXP_ERROR;
1516 
1517   END update_cashflow;
1518 
1519 
1520   --------------------------------
1521   -- PROCEDURE duplicate_cashflows
1522   --------------------------------
1523   PROCEDURE duplicate_cashflows (
1524      p_api_version             IN  NUMBER
1525     ,p_init_msg_list           IN  VARCHAR2
1526     ,p_transaction_control     IN  VARCHAR2
1527     ,p_source_object_code      IN  VARCHAR2
1528     ,p_source_object_id        IN  NUMBER
1529     ,p_target_object_id        IN  NUMBER
1530     ,p_quote_id          IN  NUMBER
1531     ,x_return_status           OUT NOCOPY VARCHAR2
1532     ,x_msg_count               OUT NOCOPY NUMBER
1533     ,x_msg_data                OUT NOCOPY VARCHAR2
1534     ,p_target_object_code      IN  VARCHAR2 DEFAULT NULL
1535     ) IS
1536 
1537     l_program_name         CONSTANT VARCHAR2(30) := 'duplicate_cashflows';
1538     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
1539 
1540     l_cashflow_header_rec  cashflow_header_rec_type;
1541     l_cashflow_level_tbl   cashflow_level_tbl_type;
1542 
1543     l_return_status        VARCHAR2(1);
1544     l_source_table         VARCHAR2(30);
1545     l_cashflow_object_id   NUMBER;
1546     l_cft_code             VARCHAR2(30);
1547     lv_frq_code            VARCHAR2(30);
1548     lv_parent_object_code  VARCHAR2(30);
1549     i                      BINARY_INTEGER := 0;
1550     j                      BINARY_INTEGER := 0;
1551     --Bug # 5021937 ssdeshpa start
1552     l_qte_price_method       VARCHAR2(30);
1553     l_qte_status             VARCHAR2(30);
1554     l_caf_status             VARCHAR2(30);
1555 
1556     CURSOR c_lq_hdr_rec_cur(p_lease_quote_id NUMBER)
1557     IS
1558     SELECT pricing_method,status,parent_object_code
1559     FROM OKL_LEASE_QUOTES_B
1560     where id = p_lease_quote_id;
1561     --Bug # 5021937 ssdeshpa end;
1562     CURSOR c_cf_objects (p_oty_code VARCHAR2, p_source_table VARCHAR2, p_source_id NUMBER)
1563     IS
1564     SELECT id
1565     FROM   okl_cash_flow_objects
1566     WHERE
1567            oty_code = p_oty_code
1568     AND    source_table = p_source_table
1569     AND    source_id = p_source_id;
1570 
1571     CURSOR c_cf_headers (p_cfo_id NUMBER)
1572     IS
1573     SELECT id, sty_id, due_arrears_yn, cft_code , sts_code
1574     FROM   okl_cash_flows
1575     WHERE  cfo_id = p_cfo_id;
1576     --Bug # 5021937 ssdeshpa start
1577     --changed the Cursor
1578     CURSOR c_cf_levels (p_caf_id NUMBER)
1579     IS
1580     SELECT amount, number_of_periods, fqy_code, stub_days, stub_amount, rate , missing_pmt_flag
1581     FROM   OKL_CASH_FLOW_LEVELS
1582     WHERE caf_id = p_caf_id;
1583     --Bug # 5021937 ssdeshpa End
1584   BEGIN
1585 
1586     IF p_transaction_control = G_TRUE THEN
1587       SAVEPOINT l_program_name;
1588     END IF;
1589 
1590     IF p_init_msg_list = G_TRUE THEN
1591       FND_MSG_PUB.initialize;
1592     END IF;
1593 
1594     get_source_table (
1595       p_source_object_code => p_source_object_code
1596      ,x_source_table       => l_source_table
1597      ,x_return_status      => x_return_status
1598      );
1599 
1600     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1601       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1602     ELSIF x_return_status = G_RET_STS_ERROR THEN
1603       RAISE OKL_API.G_EXCEPTION_ERROR;
1604     END IF;
1605     --Bug # 5021937 ssdeshpa start
1606     --This will fetch current Quote Status and Pricing Methods
1607       OPEN c_lq_hdr_rec_cur(p_quote_id);
1608       FETCH c_lq_hdr_rec_cur INTO l_qte_price_method,l_qte_status,lv_parent_object_code;
1609       CLOSE  c_lq_hdr_rec_cur;
1610     --Bug # 5021937 ssdeshpa end
1611     FOR l_cf_object IN c_cf_objects (
1612       p_oty_code     => p_source_object_code
1613      ,p_source_table => l_source_table
1614      , p_source_id   => p_source_object_id) LOOP
1615 
1616       OPEN  c_cf_headers(p_cfo_id => l_cf_object.id);
1617       --Bug # 5021937 ssdeshpa Start
1618       FETCH c_cf_headers INTO l_cashflow_header_rec.cashflow_header_id,
1619                               l_cashflow_header_rec.stream_type_id,
1620                               l_cashflow_header_rec.arrears_flag,
1621                               l_cft_code,
1622                               l_caf_status;
1623        --Bug # 5021937 ssdeshpa end
1624       CLOSE c_cf_headers;
1625 
1626       IF  ( l_caf_status = 'WORK' AND l_qte_status  = 'CT-ACCEPTED' )
1627       OR  ( l_caf_status = 'CURRENT' ) THEN
1628           -- gboomina added for bug 7033915   start
1629           l_cashflow_header_rec.status_code := l_caf_status;
1630           -- gboomina added for bug 7033915  end
1631 
1632           IF p_target_object_code IS NULL THEN
1633             l_cashflow_header_rec.parent_object_code := p_source_object_code;
1634           ELSE
1635             l_cashflow_header_rec.parent_object_code := p_target_object_code;
1636           END IF;
1637           l_cashflow_header_rec.parent_object_id   := p_target_object_id;
1638           l_cashflow_header_rec.quote_id           := p_quote_id;
1639     /*
1640           -- Fetch the Quote type
1641           SELECT parent_object_code
1642           INTO lv_parent_object_code
1643           FROM okl_lease_quotes_b
1644           WHERE id = p_quote_id;*/
1645 
1646       IF (lv_parent_object_code = 'LEASEOPP') THEN
1647         l_cashflow_header_rec.quote_type_code := 'LQ';
1648       ELSIF (lv_parent_object_code = 'LEASEAPP') THEN
1649         l_cashflow_header_rec.quote_type_code := 'LA';
1650       ELSE
1651         l_cashflow_header_rec.quote_type_code := 'QQ';
1652       END IF;
1653       -- End
1654 
1655       IF (l_cft_code = 'PAYMENT_SCHEDULE') THEN
1656         l_cashflow_header_rec.type_code := 'INFLOW';
1657       ELSIF (l_cft_code = 'OUTFLOW_SCHEDULE') THEN
1658         l_cashflow_header_rec.type_code := 'OUTFLOW';
1659       END IF;
1660       --asawanka bug 4936130 changes start
1661       j := 0;
1662       l_cashflow_level_tbl.delete;
1663       --asawanka bug 4936130 changes end
1664       FOR l_cf_level IN c_cf_levels (p_caf_id => l_cashflow_header_rec.cashflow_header_id) LOOP
1665             --Bug # 5021937 ssdeshpa start
1666             /*If pricing Method is solve For Missing Payment then,For Cash Flows which are Missing Payment For Quote
1667             Cash flow Level's Missing Payment Flag ,Periodic Amount ,Stub Amount will be nullified.
1668 
1669             If pricing Method is 'Solve for Payment' then,Cash Flow's Periodic Amount field will be nullified.
1670 
1671             For 'Solve for Yields' Rate will be nullified.*/
1672 
1673             IF(l_qte_status <> 'CT-ACCEPTED') THEN
1674             IF(l_qte_price_method ='SM' AND l_cf_level.missing_pmt_flag = 'Y') THEN
1675               l_cashflow_level_tbl(j).periods := l_cf_level.number_of_periods;
1676               l_cashflow_level_tbl(j).periodic_amount := null;
1677               l_cashflow_level_tbl(j).stub_days := l_cf_level.stub_days;
1678               l_cashflow_level_tbl(j).stub_amount := null;
1679               l_cashflow_level_tbl(j).rate := l_cf_level.rate;
1680               l_cashflow_level_tbl(j).missing_pmt_flag := null;
1681             ELSIF(l_qte_price_method ='SP') THEN
1682               l_cashflow_level_tbl(j).periods := l_cf_level.number_of_periods;
1683               l_cashflow_level_tbl(j).periodic_amount := null;
1684               l_cashflow_level_tbl(j).stub_days := l_cf_level.stub_days;
1685               l_cashflow_level_tbl(j).stub_amount := null;
1686               l_cashflow_level_tbl(j).rate := l_cf_level.rate;
1687 
1688             ELSIF(l_qte_price_method ='SY') THEN
1689               l_cashflow_level_tbl(j).periods := l_cf_level.number_of_periods;
1690               l_cashflow_level_tbl(j).periodic_amount := l_cf_level.amount;
1691               l_cashflow_level_tbl(j).stub_days := l_cf_level.stub_days;
1692               l_cashflow_level_tbl(j).stub_amount := l_cf_level.stub_amount;
1693               l_cashflow_level_tbl(j).rate := null;
1694             ELSE
1695               l_cashflow_level_tbl(j).periods := l_cf_level.number_of_periods;
1696               l_cashflow_level_tbl(j).periodic_amount := l_cf_level.amount;
1697               l_cashflow_level_tbl(j).stub_days := l_cf_level.stub_days;
1698               l_cashflow_level_tbl(j).stub_amount := l_cf_level.stub_amount;
1699               l_cashflow_level_tbl(j).rate := l_cf_level.rate;
1700             END IF;
1701           ELSE
1702               l_cashflow_level_tbl(j).periods := l_cf_level.number_of_periods;
1703               l_cashflow_level_tbl(j).periodic_amount := l_cf_level.amount;
1704               l_cashflow_level_tbl(j).stub_days := l_cf_level.stub_days;
1705               l_cashflow_level_tbl(j).stub_amount := l_cf_level.stub_amount;
1706               l_cashflow_level_tbl(j).rate := l_cf_level.rate;
1707 
1708           END IF;
1709             --Bug # 5021937 ssdeshpa end;
1710             lv_frq_code := l_cf_level.fqy_code;
1711             j := j + 1;
1712           END LOOP;
1713 
1714       l_cashflow_header_rec.frequency_code := lv_frq_code;
1715 
1716     -- Duplicate equals to 'create' mode, for sanity check purpose
1717       FOR i IN l_cashflow_level_tbl.FIRST .. l_cashflow_level_tbl.LAST LOOP
1718         IF l_cashflow_level_tbl.EXISTS(i) THEN
1719           l_cashflow_level_tbl(i).record_mode := 'create';
1720         END IF;
1721       END LOOP;
1722 
1723       create_cashflow ( p_api_version          => G_API_VERSION
1724                        ,p_init_msg_list        => G_FALSE
1725                        ,p_transaction_control  => G_FALSE
1726                        ,p_cashflow_header_rec  => l_cashflow_header_rec
1727                        ,p_cashflow_level_tbl   => l_cashflow_level_tbl
1728                        ,x_return_status        => l_return_status
1729                        ,x_msg_count            => x_msg_count
1730                        ,x_msg_data             => x_msg_data);
1731 
1732       IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
1733         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1734       ELSIF l_return_status = G_RET_STS_ERROR THEN
1735         RAISE OKL_API.G_EXCEPTION_ERROR;
1736       END IF;
1737 
1738      -- i := i + 1;
1739      END IF;
1740     END LOOP;
1741 
1742     x_return_status := G_RET_STS_SUCCESS;
1743 
1744   EXCEPTION
1745 
1746      WHEN OKL_API.G_EXCEPTION_ERROR THEN
1747 
1748       IF p_transaction_control = G_TRUE THEN
1749         ROLLBACK TO l_program_name;
1750         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1751       END IF;
1752 
1753       x_return_status := G_RET_STS_ERROR;
1754 
1755     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1756 
1757       IF p_transaction_control = G_TRUE THEN
1758         ROLLBACK TO l_program_name;
1759         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1760       END IF;
1761 
1762       x_return_status := G_RET_STS_UNEXP_ERROR;
1763 
1764     WHEN OTHERS THEN
1765 
1766       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1767                            p_msg_name     => G_DB_ERROR,
1768                            p_token1       => G_PROG_NAME_TOKEN,
1769                            p_token1_value => l_api_name,
1770                            p_token2       => G_SQLCODE_TOKEN,
1771                            p_token2_value => sqlcode,
1772                            p_token3       => G_SQLERRM_TOKEN,
1773                            p_token3_value => sqlerrm);
1774 
1775       IF p_transaction_control = G_TRUE THEN
1776         ROLLBACK TO l_program_name;
1777         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1778       END IF;
1779 
1780       x_return_status := G_RET_STS_UNEXP_ERROR;
1781 
1782   END duplicate_cashflows;
1783 
1784 
1785   -----------------------------
1786   -- PROCEDURE delete_cashflows
1787   -----------------------------
1788   PROCEDURE delete_cashflows (
1789      p_api_version             IN  NUMBER
1790     ,p_init_msg_list           IN  VARCHAR2
1791     ,p_transaction_control     IN  VARCHAR2
1792     ,p_source_object_code      IN  VARCHAR2
1793     ,p_source_object_id        IN  NUMBER
1794     ,x_return_status           OUT NOCOPY VARCHAR2
1795     ,x_msg_count               OUT NOCOPY NUMBER
1796     ,x_msg_data                OUT NOCOPY VARCHAR2
1797     ) IS
1798 
1799     l_program_name         CONSTANT VARCHAR2(30) := 'delete_cashflows';
1800     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
1801 
1802     l_source_table         VARCHAR2(30);
1803 
1804 
1805   BEGIN
1806 
1807     get_source_table (
1808       p_source_object_code => p_source_object_code
1809      ,x_source_table       => l_source_table
1810      ,x_return_status      => x_return_status
1811      );
1812 
1813     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
1814       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1815     ELSIF x_return_status = G_RET_STS_ERROR THEN
1816       RAISE OKL_API.G_EXCEPTION_ERROR;
1817     END IF;
1818 
1819     DELETE FROM okl_cash_flow_levels WHERE caf_id IN
1820       (SELECT id FROM okl_cash_flows WHERE cfo_id IN
1821         (SELECT id
1822          FROM okl_cash_flow_objects
1823          WHERE oty_code = p_source_object_code AND source_table = l_source_table AND source_id = p_source_object_id
1824         )
1825        );
1826 
1827     DELETE FROM okl_cash_flows WHERE cfo_id IN
1828         (SELECT id
1829          FROM okl_cash_flow_objects
1830          WHERE oty_code = p_source_object_code AND source_table = l_source_table AND source_id = p_source_object_id
1831         );
1832 
1833     DELETE FROM okl_cash_flow_objects
1834     WHERE oty_code = p_source_object_code AND source_table = l_source_table AND source_id = p_source_object_id;
1835 
1836     x_return_status := G_RET_STS_SUCCESS;
1837 
1838   EXCEPTION
1839 
1840      WHEN OKL_API.G_EXCEPTION_ERROR THEN
1841 
1842       IF p_transaction_control = G_TRUE THEN
1843         ROLLBACK TO l_program_name;
1844         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1845       END IF;
1846 
1847       x_return_status := G_RET_STS_ERROR;
1848 
1849     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1850 
1851       IF p_transaction_control = G_TRUE THEN
1852         ROLLBACK TO l_program_name;
1853         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1854       END IF;
1855 
1856       x_return_status := G_RET_STS_UNEXP_ERROR;
1857 
1858     WHEN OTHERS THEN
1859 
1860       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1861                            p_msg_name     => G_DB_ERROR,
1862                            p_token1       => G_PROG_NAME_TOKEN,
1863                            p_token1_value => l_api_name,
1864                            p_token2       => G_SQLCODE_TOKEN,
1865                            p_token2_value => sqlcode,
1866                            p_token3       => G_SQLERRM_TOKEN,
1867                            p_token3_value => sqlerrm);
1868 
1869       IF p_transaction_control = G_TRUE THEN
1870         ROLLBACK TO l_program_name;
1871         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1872       END IF;
1873 
1874       x_return_status := G_RET_STS_UNEXP_ERROR;
1875 
1876   END delete_cashflows;
1877 
1878 
1879   ----------------------------
1880   -- PROCEDURE delete_cashflow
1881   ----------------------------
1882   PROCEDURE delete_cashflow (
1883      p_api_version             IN  NUMBER
1884     ,p_init_msg_list           IN  VARCHAR2
1885     ,p_transaction_control     IN  VARCHAR2
1886     ,p_cashflow_header_id      IN  NUMBER
1887     ,x_return_status           OUT NOCOPY VARCHAR2
1888     ,x_msg_count               OUT NOCOPY NUMBER
1889     ,x_msg_data                OUT NOCOPY VARCHAR2
1890     ) IS
1891 
1892     l_program_name         CONSTANT VARCHAR2(30) := 'delete_cashflow';
1893     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
1894 
1895   BEGIN
1896 
1897     DELETE FROM okl_cash_flow_levels WHERE caf_id = p_cashflow_header_id;
1898     DELETE FROM okl_cash_flows WHERE id = p_cashflow_header_id;
1899 
1900     -- WIP
1901     -- EXISTENCE CHECK REQD FOR ADDl CF ON THE OBJECT
1902 
1903     x_return_status := G_RET_STS_SUCCESS;
1904 
1905   EXCEPTION
1906 
1907      WHEN OKL_API.G_EXCEPTION_ERROR THEN
1908 
1909       IF p_transaction_control = G_TRUE THEN
1910         ROLLBACK TO l_program_name;
1911         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1912       END IF;
1913 
1914       x_return_status := G_RET_STS_ERROR;
1915 
1916     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1917 
1918       IF p_transaction_control = G_TRUE THEN
1919         ROLLBACK TO l_program_name;
1920         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1921       END IF;
1922 
1923       x_return_status := G_RET_STS_UNEXP_ERROR;
1924 
1925     WHEN OTHERS THEN
1926 
1927       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1928                            p_msg_name     => G_DB_ERROR,
1929                            p_token1       => G_PROG_NAME_TOKEN,
1930                            p_token1_value => l_api_name,
1931                            p_token2       => G_SQLCODE_TOKEN,
1932                            p_token2_value => sqlcode,
1933                            p_token3       => G_SQLERRM_TOKEN,
1934                            p_token3_value => sqlerrm);
1935 
1936       IF p_transaction_control = G_TRUE THEN
1937         ROLLBACK TO l_program_name;
1938         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1939       END IF;
1940 
1941       x_return_status := G_RET_STS_UNEXP_ERROR;
1942 
1943   END delete_cashflow;
1944 
1945 
1946   ----------------------------------
1947   -- PROCEDURE delete_cashflow_level
1948   ----------------------------------
1949   PROCEDURE delete_cashflow_level (
1950      p_api_version             IN  NUMBER
1951     ,p_init_msg_list           IN  VARCHAR2
1952     ,p_transaction_control     IN  VARCHAR2
1953     ,p_cashflow_level_id       IN  NUMBER
1954     ,x_return_status           OUT NOCOPY VARCHAR2
1955     ,x_msg_count               OUT NOCOPY NUMBER
1956     ,x_msg_data                OUT NOCOPY VARCHAR2
1957     ) IS
1958 
1959     l_program_name         CONSTANT VARCHAR2(30) := 'delete_cashflow_level';
1960     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
1961 
1962   BEGIN
1963 
1964     DELETE FROM okl_cash_flow_levels WHERE id = p_cashflow_level_id;
1965 
1966     x_return_status := G_RET_STS_SUCCESS;
1967 
1968   EXCEPTION
1969 
1970      WHEN OKL_API.G_EXCEPTION_ERROR THEN
1971 
1972       IF p_transaction_control = G_TRUE THEN
1973         ROLLBACK TO l_program_name;
1974         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1975       END IF;
1976 
1977       x_return_status := G_RET_STS_ERROR;
1978 
1979     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1980 
1981       IF p_transaction_control = G_TRUE THEN
1982         ROLLBACK TO l_program_name;
1983         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
1984       END IF;
1985 
1986       x_return_status := G_RET_STS_UNEXP_ERROR;
1987 
1988     WHEN OTHERS THEN
1989 
1990       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
1991                            p_msg_name     => G_DB_ERROR,
1992                            p_token1       => G_PROG_NAME_TOKEN,
1993                            p_token1_value => l_api_name,
1994                            p_token2       => G_SQLCODE_TOKEN,
1995                            p_token2_value => sqlcode,
1996                            p_token3       => G_SQLERRM_TOKEN,
1997                            p_token3_value => sqlerrm);
1998 
1999       IF p_transaction_control = G_TRUE THEN
2000         ROLLBACK TO l_program_name;
2001         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
2002       END IF;
2003 
2004       x_return_status := G_RET_STS_UNEXP_ERROR;
2005 
2006   END delete_cashflow_level;
2007 
2008   ----------------------------------------
2009   -- PROCEDURE process_quote_pricing_reset
2010   ----------------------------------------
2011   PROCEDURE process_quote_pricing_reset (
2012      p_api_version             IN  NUMBER
2013     ,p_init_msg_list           IN  VARCHAR2
2014     ,p_transaction_control     IN  VARCHAR2
2015     ,p_quote_id                IN  NUMBER
2016     ,x_return_status           OUT NOCOPY VARCHAR2
2017     ,x_msg_count               OUT NOCOPY NUMBER
2018     ,x_msg_data                OUT NOCOPY VARCHAR2
2019    ) IS
2020 
2021 
2022     l_program_name           CONSTANT VARCHAR2(30) := 'process_quote_pricing_reset';
2023     l_api_name               CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
2024 
2025     l_deleted_cf_level_tbl   cflv_tbl_type;
2026     l_sm_cashflow_levels_tbl cflv_tbl_type;
2027     x_sm_cashflow_levels_tbl cflv_tbl_type;
2028 
2029     l_cafv_rec               cafv_rec_type;
2030     l_cfov_rec               cfov_rec_type;
2031     l_lease_qte_rec      okl_lsq_pvt.lsqv_rec_type;
2032     x_lease_qte_rec      okl_lsq_pvt.lsqv_rec_type;
2033     l_quote_id         Number;
2034     i                        BINARY_INTEGER := 0;
2035     l_pricing_method         VARCHAR2(30);
2036     l_cdjv_tbl               okl_cdj_pvt.cdjv_tbl_type;
2037 
2038     CURSOR csr_db_cashflows IS
2039       SELECT id
2040       FROM   okl_cash_flows
2041       WHERE  sts_code = 'WORK'
2042       AND DNZ_QTE_ID = p_quote_id;
2043 
2044     CURSOR csr_db_cashflow_levels IS
2045       SELECT distinct a.id
2046       FROM   okl_cash_flow_levels a,
2047              okl_cash_flows b
2048       WHERE  a.caf_id = b.id
2049       AND b.sts_code = 'WORK'
2050       AND B.DNZ_QTE_ID = p_quote_id;
2051 
2052     CURSOR csr_db_cashflow_objects IS
2053       SELECT cfo_id
2054       FROM   okl_cash_flows
2055       WHERE  sts_code = 'WORK'
2056       AND DNZ_QTE_ID = p_quote_id;
2057 
2058     CURSOR csr_sm_cashflow_levels IS
2059       SELECT distinct a.id, a.object_version_number
2060       FROM   okl_cash_flow_levels a,
2061              okl_cash_flows b,
2062              okl_lease_quotes_b qte
2063       WHERE  a.caf_id = b.id
2064       AND a.missing_pmt_flag = 'Y'
2065       AND B.DNZ_QTE_ID = p_quote_id
2066       AND B.DNZ_QTE_ID = qte.id
2067       AND qte.pricing_method = 'SM';
2068 
2069     CURSOR csr_qte_adjustments(p_adj_src_type IN VARCHAR2, p_qte_id IN NUMBER)IS
2070         select cdj.id
2071         from okl_cost_adjustments_b cdj,
2072         okl_assets_b ast
2073         where cdj.adjustment_source_type = p_adj_src_type
2074         and cdj.parent_object_code ='ASSET'
2075         and cdj.parent_object_id = ast.id
2076         and ast.parent_object_code = 'LEASEQUOTE'
2077         and ast.parent_object_id = p_qte_id;
2078   BEGIN
2079 
2080     FOR l_db_cashflow_levels IN csr_db_cashflow_levels LOOP
2081 
2082         l_deleted_cf_level_tbl(i).id := l_db_cashflow_levels.id;
2083         i := i + 1;
2084 
2085     END LOOP;
2086 
2087     IF l_deleted_cf_level_tbl.COUNT > 0 THEN
2088 
2089       okl_cfl_pvt.delete_row (
2090         p_api_version   => G_API_VERSION
2091        ,p_init_msg_list => G_FALSE
2092        ,x_return_status => x_return_status
2093        ,x_msg_count     => x_msg_count
2094        ,x_msg_data      => x_msg_data
2095        ,p_cflv_tbl      => l_deleted_cf_level_tbl
2096        );
2097 
2098       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
2099         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2100       ELSIF x_return_status = G_RET_STS_ERROR THEN
2101         RAISE OKL_API.G_EXCEPTION_ERROR;
2102       END IF;
2103 
2104     END IF;
2105 
2106     FOR l_db_cashflow_objects IN csr_db_cashflow_objects LOOP
2107 
2108       l_cfov_rec.id := l_db_cashflow_objects.cfo_id;
2109 
2110       okl_cfo_pvt.delete_row (
2111         p_api_version   => G_API_VERSION
2112        ,p_init_msg_list => G_FALSE
2113        ,x_return_status => x_return_status
2114        ,x_msg_count     => x_msg_count
2115        ,x_msg_data      => x_msg_data
2116        ,p_cfov_rec      => l_cfov_rec
2117        );
2118 
2119       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
2120         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2121       ELSIF x_return_status = G_RET_STS_ERROR THEN
2122         RAISE OKL_API.G_EXCEPTION_ERROR;
2123       END IF;
2124 
2125     END LOOP;
2126 
2127     FOR l_db_cashflows IN csr_db_cashflows LOOP
2128 
2129       l_cafv_rec.id := l_db_cashflows.id;
2130 
2131       okl_caf_pvt.delete_row (
2132         p_api_version   => G_API_VERSION
2133        ,p_init_msg_list => G_FALSE
2134        ,x_return_status => x_return_status
2135        ,x_msg_count     => x_msg_count
2136        ,x_msg_data      => x_msg_data
2137        ,p_cafv_rec      => l_cafv_rec
2138        );
2139 
2140       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
2141         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2142       ELSIF x_return_status = G_RET_STS_ERROR THEN
2143         RAISE OKL_API.G_EXCEPTION_ERROR;
2144       END IF;
2145 
2146     END LOOP;
2147 
2148     i := 0;
2149     FOR l_sm_cashflow_levels IN csr_sm_cashflow_levels LOOP
2150 
2151         l_sm_cashflow_levels_tbl(i).id := l_sm_cashflow_levels.id;
2152         l_sm_cashflow_levels_tbl(i).object_version_number := l_sm_cashflow_levels.object_version_number;
2153         l_sm_cashflow_levels_tbl(i).missing_pmt_flag := NULL;
2154         l_sm_cashflow_levels_tbl(i).amount := NULL;
2155         i := i + 1;
2156 
2157     END LOOP;
2158 
2159     IF l_sm_cashflow_levels_tbl.COUNT > 0 THEN
2160 
2161       okl_cfl_pvt.update_row (
2162         p_api_version   => G_API_VERSION
2163        ,p_init_msg_list => G_FALSE
2164        ,x_return_status => x_return_status
2165        ,x_msg_count     => x_msg_count
2166        ,x_msg_data      => x_msg_data
2167        ,p_cflv_tbl      => l_sm_cashflow_levels_tbl
2168        ,x_cflv_tbl      => x_sm_cashflow_levels_tbl
2169        );
2170       IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
2171         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2172       ELSIF x_return_status = G_RET_STS_ERROR THEN
2173         RAISE OKL_API.G_EXCEPTION_ERROR;
2174       END IF;
2175 
2176     END IF;
2177     ---------------------------------------------------
2178     --start added abhsaxen for bug#5257890
2179     --if additional lines are available for pricinig method
2180     --ss or si or sd then delete respective adjustments.
2181     SELECT pricing_method
2182     INTO l_pricing_method
2183     FROM okl_lease_quotes_b
2184     WHERE ID = p_quote_id;
2185 
2186     i := 0;
2187     IF l_pricing_method = 'SS' THEN
2188         FOR l_cdj_rec IN csr_qte_adjustments('SUBSIDY',p_quote_id) LOOP
2189          l_cdjv_tbl(i).id := l_cdj_rec.id;
2190          i := i + 1;
2191         END LOOP;
2192     ELSIF l_pricing_method = 'SD' THEN
2193         FOR l_cdj_rec IN csr_qte_adjustments('DOWN_PAYMENT',p_quote_id) LOOP
2194          l_cdjv_tbl(i).id := l_cdj_rec.id;
2195          i := i + 1;
2196         END LOOP;
2197     ELSIF l_pricing_method = 'SI' THEN
2198         FOR l_cdj_rec IN csr_qte_adjustments('TRADEIN',p_quote_id) LOOP
2199          l_cdjv_tbl(i).id := l_cdj_rec.id;
2200          i := i + 1;
2201         END LOOP;
2202     END IF;
2203     IF l_cdjv_tbl.count  > 0 THEN
2204         okl_cdj_pvt.delete_row (
2205                                 p_api_version   => G_API_VERSION
2206                                ,p_init_msg_list => G_FALSE
2207                                ,x_return_status => x_return_status
2208                                ,x_msg_count     => x_msg_count
2209                                ,x_msg_data      => x_msg_data
2210                                ,p_cdjv_tbl      => l_cdjv_tbl
2211                                );
2212     END IF;
2213 --end added abhsaxen for bug#5257890
2214     ---------------------------------------------------
2215     l_lease_qte_rec.id :=  p_quote_id;
2216     l_lease_qte_rec.status := 'PR-INCOMPLETE';
2217     l_lease_qte_rec.iir := null;
2218     l_lease_qte_rec.booking_yield := null;
2219     l_lease_qte_rec.pirr := null;
2220     l_lease_qte_rec.airr := null;
2221     l_lease_qte_rec.sub_iir := null;
2222     l_lease_qte_rec.sub_booking_yield := null;
2223     l_lease_qte_rec.sub_pirr := null;
2224     l_lease_qte_rec.sub_airr := null;
2225 
2226     OKL_LEASE_QUOTE_PVT.update_lease_qte (
2227                p_api_version   => G_API_VERSION
2228               ,p_init_msg_list => G_FALSE
2229               ,p_transaction_control   => G_TRUE
2230               ,p_lease_qte_rec => l_lease_qte_rec
2231               ,x_lease_qte_rec => x_lease_qte_rec
2232               ,x_return_status => x_return_status
2233               ,x_msg_count     => x_msg_count
2234               ,x_msg_data      => x_msg_data);
2235 
2236     IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
2237         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2238     ELSIF x_return_status = G_RET_STS_ERROR THEN
2239         RAISE OKL_API.G_EXCEPTION_ERROR;
2240     END IF;
2241 
2242   EXCEPTION
2243 
2244     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2245       x_return_status := G_RET_STS_ERROR;
2246 
2247     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2248       x_return_status := G_RET_STS_UNEXP_ERROR;
2249 
2250     WHEN OTHERS THEN
2251       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
2252                            p_msg_name     => G_DB_ERROR,
2253                            p_token1       => G_PROG_NAME_TOKEN,
2254                            p_token1_value => l_api_name,
2255                            p_token2       => G_SQLCODE_TOKEN,
2256                            p_token2_value => sqlcode,
2257                            p_token3       => G_SQLERRM_TOKEN,
2258                            p_token3_value => sqlerrm);
2259 
2260       x_return_status := G_RET_STS_UNEXP_ERROR;
2261 
2262   END process_quote_pricing_reset;
2263   --------------------------------
2264   -- PROCEDURE copy_pmts_from_est_to_quote
2265   --------------------------------
2266   PROCEDURE copy_pmts_from_est_to_quote (
2267      p_api_version             IN  NUMBER
2268     ,p_init_msg_list           IN  VARCHAR2
2269     ,p_transaction_control     IN  VARCHAR2
2270     ,p_estimate_id             IN  NUMBER
2271     ,p_quote_id                IN  NUMBER
2272     ,x_return_status           OUT NOCOPY VARCHAR2
2273     ,x_msg_count               OUT NOCOPY NUMBER
2274     ,x_msg_data                OUT NOCOPY VARCHAR2
2275     ) IS
2276 
2277     l_program_name         CONSTANT VARCHAR2(30) := 'cpy_pmts';
2278     l_api_name             CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_program_name;
2279 
2280     l_lease_qte_rec        okl_lsq_pvt.lsqv_rec_type;
2281     x_lease_qte_rec        okl_lsq_pvt.lsqv_rec_type;
2282     l_cashflow_header_rec  cashflow_header_rec_type;
2283     l_cashflow_level_tbl   cashflow_level_tbl_type;
2284 
2285 
2286     l_return_status        VARCHAR2(1);
2287     l_cft_code             VARCHAR2(30);
2288     lv_frq_code            VARCHAR2(30);
2289     i                      BINARY_INTEGER := 0;
2290     j                      BINARY_INTEGER := 0;
2291 
2292 
2293 
2294     CURSOR get_estimate_details_csr IS
2295       SELECT  id,
2296               expected_start_date,
2297               term,
2298               end_of_term_option_id,
2299               pricing_method,
2300               structured_pricing,
2301               rate_template_id,
2302               rate_card_id,
2303               target_amount,
2304               target_arrears,
2305               target_frequency,
2306               lease_rate_factor,
2307               target_rate,
2308               target_rate_type,
2309               target_periods
2310       FROM  okl_quick_quotes_b where
2311       id = p_estimate_id;
2312       estimate_details_csr_rec  get_estimate_details_csr%ROWTYPE;
2313 
2314     CURSOR get_quote_details_csr IS
2315       SELECT
2316          attribute_category
2317         ,attribute1
2318         ,attribute2
2319         ,attribute3
2320         ,attribute4
2321         ,attribute5
2322         ,attribute6
2323         ,attribute7
2324         ,attribute8
2325         ,attribute9
2326         ,attribute10
2327         ,attribute11
2328         ,attribute12
2329         ,attribute13
2330         ,attribute14
2331         ,attribute15
2332         ,reference_number
2333         ,object_version_number
2334 		,parent_object_id
2335 		,parent_object_code
2336 		,valid_from
2337 		,valid_to
2338 		,customer_bookclass
2339 		,customer_taxowner
2340 		,expected_start_date
2341 		,expected_funding_date
2342 		,expected_delivery_date
2343 		,pricing_method
2344 		,term
2345 		,product_id
2346 		,end_of_term_option_id
2347 		,usage_category
2348 		,usage_industry_class
2349 		,usage_industry_code
2350 		,usage_amount
2351 		,usage_location_id
2352 		,property_tax_applicable
2353 		,property_tax_billing_type
2354 		,upfront_tax_treatment
2355 		,upfront_tax_stream_type
2356 		,transfer_of_title
2357 		,age_of_equipment
2358 		,purchase_of_lease
2359 		,sale_and_lease_back
2360 		,interest_disclosed
2361 		,target_rate_type
2362 		,target_rate
2363 		,target_amount
2364 		,target_frequency
2365 		,target_arrears_yn
2366 		,target_periods
2367 		,structured_pricing
2368 		,line_level_pricing
2369 		,lease_rate_factor
2370 		,rate_card_id
2371 		,rate_template_id
2372 		,iir
2373 		,booking_yield
2374 		,pirr
2375 		,airr
2376 		,sub_iir
2377 		,sub_booking_yield
2378 		,sub_pirr
2379 		,sub_airr
2380 		,primary_quote
2381         ,short_description
2382         ,description
2383         ,comments
2384     FROM okl_lease_quotes_v
2385     where id= p_quote_id;
2386     quote_details_csr_rec  get_quote_details_csr%ROWTYPE;
2387 
2388     -- Cursor to fetch the Stream Type
2389     CURSOR c_strm_type (
2390              pdtId        NUMBER,
2391              expStartDate DATE,
2392              strm_purpose VARCHAR) IS
2393     SELECT STRM.STY_ID PAYMENT_TYPE_ID,
2394            STRM.STY_NAME PAYMENT_TYPE,
2395            STRM.START_DATE,
2396            STRM.END_DATE,
2397            STRM.STY_PURPOSE
2398     FROM OKL_STRM_TMPT_PRIMARY_UV STRM
2399     WHERE STY_PURPOSE = strm_purpose
2400       AND START_DATE <= expStartDate
2401       AND NVL(END_DATE, expStartDate) >= expStartDate
2402       AND STRM.PDT_ID = pdtId;
2403 
2404     CURSOR c_cf_objects (p_oty_code VARCHAR2, p_source_table VARCHAR2, p_source_id NUMBER)
2405     IS
2406     SELECT id
2407     FROM   okl_cash_flow_objects
2408     WHERE
2409            oty_code = p_oty_code
2410     AND    source_table = p_source_table
2411     AND    source_id = p_source_id;
2412 
2413     CURSOR c_cf_headers (p_cfo_id NUMBER)
2414     IS
2415     SELECT id, sty_id, due_arrears_yn, cft_code
2416     FROM   okl_cash_flows
2417     WHERE  cfo_id = p_cfo_id;
2418 
2419     CURSOR c_cf_levels (p_caf_id NUMBER)
2420     IS
2421     SELECT amount, number_of_periods, fqy_code, stub_days, stub_amount, rate
2422     FROM   OKL_CASH_FLOW_LEVELS
2423     WHERE caf_id = p_caf_id;
2424 
2425   BEGIN
2426 
2427     IF p_transaction_control = G_TRUE THEN
2428       SAVEPOINT l_program_name;
2429     END IF;
2430 
2431     IF p_init_msg_list = G_TRUE THEN
2432       FND_MSG_PUB.initialize;
2433     END IF;
2434 
2435     OPEN get_estimate_details_csr;
2436     FETCH get_estimate_details_csr INTO estimate_details_csr_rec;
2437     CLOSE get_estimate_details_csr;
2438 
2439     OPEN get_quote_details_csr;
2440     FETCH get_quote_details_csr INTO quote_details_csr_rec;
2441     CLOSE get_quote_details_csr;
2442     --asawanka modified for bug #6790770 start
2443     IF  trunc(estimate_details_csr_rec.expected_start_date) = trunc(quote_details_csr_rec.expected_start_date)
2444     --asawanka modified for bug #6790770 end
2445     AND estimate_details_csr_rec.term = quote_details_csr_rec.term
2446     AND estimate_details_csr_rec.end_of_term_option_id = quote_details_csr_rec.end_of_term_option_id
2447  -- added modifying abhsaxen for bug #5257890
2448  --converting pricing method from 'SS' to 'SY',following condition shold not be here
2449     AND ( estimate_details_csr_rec.pricing_method = quote_details_csr_rec.pricing_method
2450          OR ( estimate_details_csr_rec.pricing_method = 'SS'
2451               AND quote_details_csr_rec.pricing_method = 'SY'
2452             )
2453         )
2454     AND  ( NOT( estimate_details_csr_rec.pricing_method = 'SS' AND quote_details_csr_rec.pricing_method = 'SS'))
2455     THEN
2456        IF nvl(estimate_details_csr_rec.structured_pricing,'N') = 'N' AND quote_details_csr_rec.pricing_method <> 'SY' THEN
2457  --end modifying abhsaxen for bug#5257890
2458             l_lease_qte_rec.id :=  p_quote_id;
2459             l_lease_qte_rec.object_version_number := quote_details_csr_rec.object_version_number;
2460             l_lease_qte_rec.rate_template_id  := estimate_details_csr_rec.rate_template_id;
2461             l_lease_qte_rec.target_amount  := estimate_details_csr_rec.target_amount;
2462             l_lease_qte_rec.structured_pricing := 'N';
2463             l_lease_qte_rec.target_arrears_yn := estimate_details_csr_rec.target_arrears;
2464             l_lease_qte_rec.rate_card_id := estimate_details_csr_rec.rate_card_id;
2465             IF quote_details_csr_rec.pricing_method = 'TR' THEN
2466               l_lease_qte_rec.target_rate := estimate_details_csr_rec.target_rate;
2467               l_lease_qte_rec.target_rate_type := estimate_details_csr_rec.target_rate_type;
2468               l_lease_qte_rec.target_frequency := estimate_details_csr_rec.target_frequency;
2469               l_lease_qte_rec.target_periods := estimate_details_csr_rec.target_periods;
2470             END IF;
2471        ELSE
2472           l_lease_qte_rec.id :=  p_quote_id;
2473           l_lease_qte_rec.object_version_number := quote_details_csr_rec.object_version_number;
2474           l_lease_qte_rec.structured_pricing := 'Y';
2475           IF quote_details_csr_rec.pricing_method = 'RC' THEN
2476             l_lease_qte_rec.target_arrears_yn := estimate_details_csr_rec.target_arrears;
2477             l_lease_qte_rec.target_frequency := estimate_details_csr_rec.target_frequency;
2478             l_lease_qte_rec.lease_rate_factor := estimate_details_csr_rec.lease_rate_factor;
2479           ELSE
2480 
2481             FOR l_cf_object IN c_cf_objects (
2482               p_oty_code     => 'QUICK_QUOTE'
2483              ,p_source_table => 'OKL_QUICK_QUOTES_B'
2484              ,p_source_id    => p_estimate_id)
2485             LOOP
2486 
2487               OPEN  c_cf_headers(p_cfo_id => l_cf_object.id);
2488               FETCH c_cf_headers INTO l_cashflow_header_rec.cashflow_header_id,
2489                                       l_cashflow_header_rec.stream_type_id,
2490                                       l_cashflow_header_rec.arrears_flag,
2491                                       l_cft_code;
2492               CLOSE c_cf_headers;
2493 
2494               l_cashflow_header_rec.parent_object_code := 'LEASE_QUOTE';
2495               l_cashflow_header_rec.parent_object_id   := p_quote_id;
2496               l_cashflow_header_rec.quote_id           := p_quote_id;
2497               l_cashflow_header_rec.quote_type_code := 'LQ';
2498 
2499               --populate stream type id
2500               FOR t_rec IN c_strm_type (
2501                  pdtId        => quote_details_csr_rec.product_id,
2502                  expStartDate => quote_details_csr_rec.expected_start_date,
2503                  strm_purpose => 'RENT')
2504               LOOP
2505                  l_cashflow_header_rec.stream_type_id := t_rec.payment_type_id;
2506               END LOOP;
2507 
2508               IF (l_cft_code = 'PAYMENT_SCHEDULE') THEN
2509                 l_cashflow_header_rec.type_code := 'INFLOW';
2510               ELSIF (l_cft_code = 'OUTFLOW_SCHEDULE') THEN
2511                 l_cashflow_header_rec.type_code := 'OUTFLOW';
2512               END IF;
2513               j := 0;
2514               l_cashflow_level_tbl.delete;
2515               FOR l_cf_level IN c_cf_levels (p_caf_id => l_cashflow_header_rec.cashflow_header_id) LOOP
2516                 l_cashflow_level_tbl(j).periods := l_cf_level.number_of_periods;
2517                 IF quote_details_csr_rec.pricing_method = 'SP' THEN
2518                   l_cashflow_level_tbl(j).periodic_amount := NULL;
2519                   l_cashflow_level_tbl(j).stub_amount := NULL;
2520                 ELSE
2521                   l_cashflow_level_tbl(j).periodic_amount := l_cf_level.amount;
2522                 END IF;
2523                 l_cashflow_level_tbl(j).stub_days := l_cf_level.stub_days;
2524                 l_cashflow_level_tbl(j).stub_amount := l_cf_level.stub_amount;
2525                 l_cashflow_level_tbl(j).rate := l_cf_level.rate;
2526                 lv_frq_code := l_cf_level.fqy_code;
2527                 j := j + 1;
2528               END LOOP;
2529 
2530               l_cashflow_header_rec.frequency_code := lv_frq_code;
2531 
2532             -- Duplicate equals to 'create' mode, for sanity check purpose
2533               FOR i IN l_cashflow_level_tbl.FIRST .. l_cashflow_level_tbl.LAST LOOP
2534                 IF l_cashflow_level_tbl.EXISTS(i) THEN
2535                   l_cashflow_level_tbl(i).record_mode := 'create';
2536                 END IF;
2537               END LOOP;
2538 
2539               create_cashflow ( p_api_version          => G_API_VERSION
2540                                ,p_init_msg_list        => G_FALSE
2541                                ,p_transaction_control  => G_FALSE
2542                                ,p_cashflow_header_rec  => l_cashflow_header_rec
2543                                ,p_cashflow_level_tbl   => l_cashflow_level_tbl
2544                                ,x_return_status        => l_return_status
2545                                ,x_msg_count            => x_msg_count
2546                                ,x_msg_data             => x_msg_data);
2547 
2548               IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
2549                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2550               ELSIF l_return_status = G_RET_STS_ERROR THEN
2551                 RAISE OKL_API.G_EXCEPTION_ERROR;
2552               END IF;
2553 
2554               i := i + 1;
2555 
2556             END LOOP;
2557           END IF;
2558        END IF;
2559        OKL_LEASE_QUOTE_PVT.update_lease_qte (
2560                    p_api_version   => G_API_VERSION
2561                   ,p_init_msg_list => G_FALSE
2562                   ,p_transaction_control   => G_TRUE
2563                   ,p_lease_qte_rec => l_lease_qte_rec
2564                   ,x_lease_qte_rec => x_lease_qte_rec
2565                   ,x_return_status => x_return_status
2566                   ,x_msg_count     => x_msg_count
2567                   ,x_msg_data      => x_msg_data);
2568 
2569        IF x_return_status = G_RET_STS_UNEXP_ERROR THEN
2570            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2571        ELSIF x_return_status = G_RET_STS_ERROR THEN
2572            RAISE OKL_API.G_EXCEPTION_ERROR;
2573        END IF;
2574 
2575     END IF;
2576     x_return_status := G_RET_STS_SUCCESS;
2577 
2578   EXCEPTION
2579 
2580      WHEN OKL_API.G_EXCEPTION_ERROR THEN
2581 
2582       IF p_transaction_control = G_TRUE THEN
2583         ROLLBACK TO l_program_name;
2584         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
2585       END IF;
2586 
2587       x_return_status := G_RET_STS_ERROR;
2588 
2589     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2590 
2591       IF p_transaction_control = G_TRUE THEN
2592         ROLLBACK TO l_program_name;
2593         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
2594       END IF;
2595 
2596       x_return_status := G_RET_STS_UNEXP_ERROR;
2597 
2598     WHEN OTHERS THEN
2599 
2600       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
2601                            p_msg_name     => G_DB_ERROR,
2602                            p_token1       => G_PROG_NAME_TOKEN,
2603                            p_token1_value => l_api_name,
2604                            p_token2       => G_SQLCODE_TOKEN,
2605                            p_token2_value => sqlcode,
2606                            p_token3       => G_SQLERRM_TOKEN,
2607                            p_token3_value => sqlerrm);
2608 
2609       IF p_transaction_control = G_TRUE THEN
2610         ROLLBACK TO l_program_name;
2611         fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data  => x_msg_data);
2612       END IF;
2613 
2614       x_return_status := G_RET_STS_UNEXP_ERROR;
2615 
2616   END copy_pmts_from_est_to_quote;
2617 
2618 END OKL_LEASE_QUOTE_CASHFLOW_PVT;