DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_AM_REPURCHASE_ASSET_PVT

Source


1 PACKAGE BODY okl_am_repurchase_asset_pvt AS
2 /* $Header: OKLRRQUB.pls 120.6 2007/12/18 09:32:20 akrangan noship $ */
3 
4    ---------------------------------------------------------------------------
5 -- GLOBAL DATASTRUCTURES
6 ---------------------------------------------------------------------------
7    SUBTYPE rulv_rec_type IS okl_rule_pub.rulv_rec_type;
8 
9    SUBTYPE asset_tbl_type IS okl_am_calculate_quote_pvt.asset_tbl_type;
10 
11    SUBTYPE taiv_rec_type IS okl_trx_ar_invoices_pub.taiv_rec_type;
12 
13    SUBTYPE qpyv_tbl_type IS okl_quote_parties_pub.qpyv_tbl_type;
14 
15    --akrangan added for debug logging begin
16    g_module_name                VARCHAR2 (255)
17                                 := 'okl.am.plsql.okl_am_repurchase_asset_pvt';
18    g_level_procedure   CONSTANT NUMBER         := fnd_log.level_procedure;
19    g_level_exception   CONSTANT NUMBER         := fnd_log.level_exception;
20    g_level_statement   CONSTANT NUMBER         := fnd_log.level_statement;
21 
22    --akrangan added for debug logging end
23 
24    -- Start of comments
25    --
26    -- Procedure Name  : get_db_values
27    -- Description     : get the stored database fields for the quote
28    -- Business Rules  :
29    -- Parameters      :
30    -- Version         : 1.0
31    -- End of comments
32    PROCEDURE get_db_values (
33       p_qte_id                IN              NUMBER,
34       x_accepted_yn           OUT NOCOPY      VARCHAR2,
35       x_quote_number          OUT NOCOPY      NUMBER,
36       x_date_effective_from   OUT NOCOPY      DATE,
37       x_date_effective_to     OUT NOCOPY      DATE,
38       x_khr_id                OUT NOCOPY      NUMBER,
39       x_qtp_code              OUT NOCOPY      VARCHAR2,
40       x_return_status         OUT NOCOPY      VARCHAR2
41    ) AS
42       -- akrangan added for debug feature start
43       l_module_name           VARCHAR2 (500)
44                                           := g_module_name || 'get_db_values';
45       is_debug_exception_on   BOOLEAN
46              := okl_debug_pub.check_log_on (l_module_name, g_level_exception);
47       is_debug_procedure_on   BOOLEAN
48              := okl_debug_pub.check_log_on (l_module_name, g_level_procedure);
49       is_debug_statement_on   BOOLEAN
50              := okl_debug_pub.check_log_on (l_module_name, g_level_statement);
51 
52       -- akrangan added for debug feature end
53         -- Select existing db values.
54       CURSOR l_qtev_csr (p_id IN NUMBER) IS
55          SELECT accepted_yn,
56                 quote_number,
57                 date_effective_from,
58                 date_effective_to,
59                 khr_id,
60                 qtp_code
61            FROM okl_trx_quotes_v qtev
62           WHERE qtev.ID = p_id;
63    BEGIN
64       IF (is_debug_procedure_on) THEN
65          okl_debug_pub.log_debug (g_level_procedure,
66                                   l_module_name,
67                                   'Begin(+)'
68                                  );
69       END IF;
70 
71       IF (is_debug_statement_on) THEN
72          okl_debug_pub.log_debug (g_level_statement,
73                                   l_module_name,
74                                   'p_qte_id =' || p_qte_id
75                                  );
76       END IF;
77 
78       x_return_status := okc_api.g_ret_sts_success;
79 
80       -- Select existing db values.
81       OPEN l_qtev_csr (p_qte_id);
82 
83       FETCH l_qtev_csr
84        INTO x_accepted_yn,
85             x_quote_number,
86             x_date_effective_from,
87             x_date_effective_to,
88             x_khr_id,
89             x_qtp_code;
90 
91       -- Invalid Value for the column COL_NAME
92       IF (l_qtev_csr%NOTFOUND) THEN
93          okc_api.set_message (p_app_name          => 'OKC',
94                               p_msg_name          => g_invalid_value,
95                               p_token1            => g_col_name_token,
96                               p_token1_value      => 'qte_id'
97                              );
98          x_return_status := okc_api.g_ret_sts_error;
99       END IF;
100 
101       CLOSE l_qtev_csr;
102 
103       IF (is_debug_statement_on) THEN
104          okl_debug_pub.log_debug (g_level_statement,
105                                   l_module_name,
106                                   'x_return_status =' || x_return_status
107                                  );
108       END IF;
109 
110       IF (is_debug_procedure_on) THEN
111          okl_debug_pub.log_debug (g_level_procedure, l_module_name, 'End(-)');
112       END IF;
113    EXCEPTION
114       WHEN OTHERS THEN
115          IF (l_qtev_csr%ISOPEN) THEN
116             CLOSE l_qtev_csr;
117          END IF;
118 
119          okc_api.set_message (p_app_name          => 'OKC',
120                               p_msg_name          => g_unexpected_error,
121                               p_token1            => g_sqlcode_token,
122                               p_token1_value      => SQLCODE,
123                               p_token2            => g_sqlerrm_token,
124                               p_token2_value      => SQLERRM
125                              );
126          x_return_status := okc_api.g_ret_sts_unexp_error;
127    END get_db_values;
128 
129    -- Start of comments
130    --
131    -- Procedure Name  : get_sysdate
132    -- Description     : get the sysdate
133    -- Business Rules  :
134    -- Parameters      :
135    -- Version         : 1.0
136    -- End of comments
137    PROCEDURE get_sysdate (x_sysdate OUT NOCOPY DATE) AS
138       -- get the sysdate
139       CURSOR l_db_date_csr IS
140          SELECT SYSDATE
141            FROM DUAL;
142    BEGIN
143       -- get the sysdate
144       OPEN l_db_date_csr;
145 
146       FETCH l_db_date_csr
147        INTO x_sysdate;
148 
149       CLOSE l_db_date_csr;
150    EXCEPTION
151       WHEN OTHERS THEN
152          IF (l_db_date_csr%ISOPEN) THEN
153             CLOSE l_db_date_csr;
154          END IF;
155 
156          okc_api.set_message (p_app_name          => 'OKC',
157                               p_msg_name          => g_unexpected_error,
158                               p_token1            => g_sqlcode_token,
159                               p_token1_value      => SQLCODE,
160                               p_token2            => g_sqlerrm_token,
161                               p_token2_value      => SQLERRM
162                              );
163    END get_sysdate;
164 
165    -- Start of comments
166    --
167    -- Procedure Name  : quote_effectivity
168    -- Description     : gets the rule to determine the quote effective dates
169    -- Business Rules  :
170    -- Parameters      :
171    -- Version         : 1.0
172    -- End of comments
173    PROCEDURE quote_effectivity (
174       p_contract_id          IN              NUMBER,
175       x_quote_eff_days       OUT NOCOPY      NUMBER,
176       x_quote_eff_max_days   OUT NOCOPY      NUMBER,
177       x_return_status        OUT NOCOPY      VARCHAR2
178    ) IS
179       l_return_status              VARCHAR2 (1)   := okc_api.g_ret_sts_error;
180       l_rule_found                 BOOLEAN        := FALSE;
181       l_rulv_rec                   rulv_rec_type;
182       l_rule_code         CONSTANT VARCHAR2 (30)  := 'AMQTEF';
183       l_rule_group_code   CONSTANT VARCHAR2 (30)  := 'AMTQPR';
184       -- akrangan added for debug feature start
185       l_module_name                VARCHAR2 (500)
186                                       := g_module_name || 'quote_effectivity';
187       is_debug_exception_on        BOOLEAN
188              := okl_debug_pub.check_log_on (l_module_name, g_level_exception);
189       is_debug_procedure_on        BOOLEAN
190              := okl_debug_pub.check_log_on (l_module_name, g_level_procedure);
191       is_debug_statement_on        BOOLEAN
192              := okl_debug_pub.check_log_on (l_module_name, g_level_statement);
193    -- akrangan added for debug feature end
194    BEGIN
195       IF (is_debug_procedure_on) THEN
196          okl_debug_pub.log_debug (g_level_procedure,
197                                   l_module_name,
198                                   'Begin(+)'
199                                  );
200       END IF;
201 
202       IF (is_debug_statement_on) THEN
203          okl_debug_pub.log_debug (g_level_statement,
204                                   l_module_name,
205                                   'p_contract_id       =' || p_contract_id
206                                  );
207       END IF;
208 
209       IF (is_debug_statement_on) THEN
210          okl_debug_pub.log_debug (g_level_statement,
211                                   l_module_name,
212                                   'before okl_am_util_pvt.get_rule_record'
213                                  );
214          okl_debug_pub.log_debug (g_level_statement,
215                                   l_module_name,
216                                   'p_rgd_code   =' || l_rule_group_code
217                                  );
218          okl_debug_pub.log_debug (g_level_statement,
219                                   l_module_name,
220                                   'p_rdf_code   =' || l_rule_code
221                                  );
222          okl_debug_pub.log_debug (g_level_statement,
223                                   l_module_name,
224                                   'p_chr_id     =' || p_contract_id
225                                  );
226       END IF;
227 
228       okl_am_util_pvt.get_rule_record (p_rgd_code           => l_rule_group_code,
229                                        p_rdf_code           => l_rule_code,
230                                        p_chr_id             => p_contract_id,
231                                        p_cle_id             => NULL,
232                                        x_rulv_rec           => l_rulv_rec,
233                                        x_return_status      => l_return_status,
234                                        p_message_yn         => TRUE
235                                       );
236 
237       IF (is_debug_statement_on) THEN
238          okl_debug_pub.log_debug (g_level_statement,
239                                   l_module_name,
240                                   'after okl_am_util_pvt.get_rule_record'
241                                  );
242          okl_debug_pub.log_debug (g_level_statement,
243                                   l_module_name,
244                                   'l_return_status   =' || l_return_status
245                                  );
246       END IF;
247 
248       IF (l_return_status = okc_api.g_ret_sts_success) THEN
249          x_quote_eff_days := l_rulv_rec.rule_information1;
250          x_quote_eff_max_days := l_rulv_rec.rule_information2;
251          l_return_status := okc_api.g_ret_sts_success;
252       END IF;
253 
254       x_return_status := l_return_status;
255 
256       IF (is_debug_procedure_on) THEN
257          okl_debug_pub.log_debug (g_level_procedure, l_module_name, 'End(-)');
258       END IF;
259    EXCEPTION
260       WHEN OTHERS THEN
261          okc_api.set_message (p_app_name          => 'OKC',
262                               p_msg_name          => g_unexpected_error,
263                               p_token1            => g_sqlcode_token,
264                               p_token1_value      => SQLCODE,
265                               p_token2            => g_sqlerrm_token,
266                               p_token2_value      => SQLERRM
267                              );
268          x_return_status := okc_api.g_ret_sts_unexp_error;
269    END quote_effectivity;
270 
271    -- Start of comments
272    --
273    -- Procedure Name  : quote_type_check
274    -- Description     : checks the quote type
275    -- Business Rules  :
276    -- Parameters      :
277    -- Version         : 1.0
278    -- End of comments
279    PROCEDURE quote_type_check (
280       p_qtp_code        IN              VARCHAR2,
281       x_return_status   OUT NOCOPY      VARCHAR2
282    ) IS
283       l_return_status         VARCHAR2 (1)   := okc_api.g_ret_sts_error;
284       -- akrangan added for debug feature start
285       l_module_name           VARCHAR2 (500)
286                                        := g_module_name || 'quote_type_check';
287       is_debug_exception_on   BOOLEAN
288              := okl_debug_pub.check_log_on (l_module_name, g_level_exception);
289       is_debug_procedure_on   BOOLEAN
290              := okl_debug_pub.check_log_on (l_module_name, g_level_procedure);
291       is_debug_statement_on   BOOLEAN
292              := okl_debug_pub.check_log_on (l_module_name, g_level_statement);
293    -- akrangan added for debug feature end
294    BEGIN
295       IF (is_debug_procedure_on) THEN
296          okl_debug_pub.log_debug (g_level_procedure,
297                                   l_module_name,
298                                   'Begin(+)'
299                                  );
300       END IF;
301 
302       IF ((p_qtp_code IS NOT NULL) AND (p_qtp_code = 'REP_STANDARD')) THEN
303          l_return_status := okc_api.g_ret_sts_success;
304       END IF;
305 
306       x_return_status := l_return_status;
307 
308       IF (is_debug_procedure_on) THEN
309          okl_debug_pub.log_debug (g_level_procedure, l_module_name, 'End(-)');
310       END IF;
311    EXCEPTION
312       WHEN OTHERS THEN
313          okc_api.set_message (p_app_name          => 'OKC',
314                               p_msg_name          => g_unexpected_error,
315                               p_token1            => g_sqlcode_token,
316                               p_token1_value      => SQLCODE,
317                               p_token2            => g_sqlerrm_token,
318                               p_token2_value      => SQLERRM
319                              );
320          x_return_status := okc_api.g_ret_sts_unexp_error;
321    END quote_type_check;
322 
323    -- Start of comments
324    --
325    -- Procedure Name  : set_quote_defaults
326    -- Description     :
327    -- Business Rules  :
328    -- Parameters      :
329    -- Version         : 1.0
330    -- End of comments
331    PROCEDURE set_quote_defaults (
332       px_qtev_rec       IN OUT NOCOPY   qtev_rec_type,
333       x_return_status   OUT NOCOPY      VARCHAR2
334    ) IS
335       l_quote_eff_days        NUMBER;
336       l_quote_eff_max_days    NUMBER;
337       l_db_date               DATE;
338       l_quote_status          VARCHAR2 (200) := 'DRAFTED';
339       l_quote_reason          VARCHAR2 (200) := 'EOT';
340       l_return_status         VARCHAR2 (1)   := okc_api.g_ret_sts_success;
341       -- akrangan added for debug feature start
342       l_module_name           VARCHAR2 (500)
343                                      := g_module_name || 'set_quote_defaults';
344       is_debug_exception_on   BOOLEAN
345              := okl_debug_pub.check_log_on (l_module_name, g_level_exception);
346       is_debug_procedure_on   BOOLEAN
347              := okl_debug_pub.check_log_on (l_module_name, g_level_procedure);
348       is_debug_statement_on   BOOLEAN
349              := okl_debug_pub.check_log_on (l_module_name, g_level_statement);
350    -- akrangan added for debug feature end
351    BEGIN
352       IF (is_debug_procedure_on) THEN
353          okl_debug_pub.log_debug (g_level_procedure,
354                                   l_module_name,
355                                   'Begin(+)'
356                                  );
357       END IF;
358 
359       IF (is_debug_statement_on) THEN
360          okl_debug_pub.log_debug (g_level_procedure,
361                                   l_module_name,
362                                   'px_qtev_rec.id : ' || px_qtev_rec.ID
363                                  );
364          okl_debug_pub.log_debug (g_level_procedure,
365                                   l_module_name,
366                                      'px_qtev_rec.qrs_code : '
367                                   || px_qtev_rec.qrs_code
368                                  );
369          okl_debug_pub.log_debug (g_level_procedure,
370                                   l_module_name,
371                                      'px_qtev_rec.qst_code : '
372                                   || px_qtev_rec.qst_code
373                                  );
374          okl_debug_pub.log_debug (g_level_procedure,
375                                   l_module_name,
376                                      'px_qtev_rec.consolidated_qte_id : '
377                                   || px_qtev_rec.consolidated_qte_id
378                                  );
379          okl_debug_pub.log_debug (g_level_procedure,
380                                   l_module_name,
381                                   'px_qtev_rec.khr_id : '
382                                   || px_qtev_rec.khr_id
383                                  );
384          okl_debug_pub.log_debug (g_level_procedure,
385                                   l_module_name,
386                                   'px_qtev_rec.art_id : '
387                                   || px_qtev_rec.art_id
388                                  );
389          okl_debug_pub.log_debug (g_level_procedure,
390                                   l_module_name,
391                                      'px_qtev_rec.qtp_code : '
392                                   || px_qtev_rec.qtp_code
393                                  );
394          okl_debug_pub.log_debug (g_level_procedure,
395                                   l_module_name,
396                                      'px_qtev_rec.trn_code : '
397                                   || px_qtev_rec.trn_code
398                                  );
399          okl_debug_pub.log_debug (g_level_procedure,
400                                   l_module_name,
401                                   'px_qtev_rec.pdt_id : '
402                                   || px_qtev_rec.pdt_id
403                                  );
404          okl_debug_pub.log_debug (g_level_procedure,
405                                   l_module_name,
406                                      'px_qtev_rec.date_effective_from : '
407                                   || px_qtev_rec.date_effective_from
408                                  );
409          okl_debug_pub.log_debug (g_level_procedure,
410                                   l_module_name,
411                                      'px_qtev_rec.quote_number : '
412                                   || px_qtev_rec.quote_number
413                                  );
414          okl_debug_pub.log_debug (g_level_procedure,
415                                   l_module_name,
416                                      'px_qtev_rec.early_termination_yn : '
417                                   || px_qtev_rec.early_termination_yn
418                                  );
419          okl_debug_pub.log_debug (g_level_procedure,
420                                   l_module_name,
421                                      'px_qtev_rec.partial_yn : '
422                                   || px_qtev_rec.partial_yn
423                                  );
424          okl_debug_pub.log_debug (g_level_procedure,
425                                   l_module_name,
426                                      'px_qtev_rec.preproceeds_yn : '
427                                   || px_qtev_rec.preproceeds_yn
428                                  );
429          okl_debug_pub.log_debug (g_level_procedure,
430                                   l_module_name,
431                                      'px_qtev_rec.summary_format_yn : '
432                                   || px_qtev_rec.summary_format_yn
433                                  );
434          okl_debug_pub.log_debug (g_level_procedure,
435                                   l_module_name,
436                                      'px_qtev_rec.consolidated_yn : '
437                                   || px_qtev_rec.consolidated_yn
438                                  );
439          okl_debug_pub.log_debug (g_level_procedure,
440                                   l_module_name,
441                                      'px_qtev_rec.date_requested : '
442                                   || px_qtev_rec.date_requested
443                                  );
444          okl_debug_pub.log_debug (g_level_procedure,
445                                   l_module_name,
446                                      'px_qtev_rec.date_proposal : '
447                                   || px_qtev_rec.date_proposal
448                                  );
449          okl_debug_pub.log_debug (g_level_procedure,
450                                   l_module_name,
451                                      'px_qtev_rec.date_effective_to : '
452                                   || px_qtev_rec.date_effective_to
453                                  );
454          okl_debug_pub.log_debug (g_level_procedure,
455                                   l_module_name,
456                                      'px_qtev_rec.date_accepted : '
457                                   || px_qtev_rec.date_accepted
458                                  );
459          okl_debug_pub.log_debug (g_level_procedure,
460                                   l_module_name,
461                                      'px_qtev_rec.payment_received_yn : '
462                                   || px_qtev_rec.payment_received_yn
463                                  );
464          okl_debug_pub.log_debug (g_level_procedure,
465                                   l_module_name,
466                                      'px_qtev_rec.requested_by : '
467                                   || px_qtev_rec.requested_by
468                                  );
469          okl_debug_pub.log_debug (g_level_procedure,
470                                   l_module_name,
471                                      'px_qtev_rec.approved_yn : '
472                                   || px_qtev_rec.approved_yn
473                                  );
474          okl_debug_pub.log_debug (g_level_procedure,
475                                   l_module_name,
476                                      'px_qtev_rec.accepted_yn : '
477                                   || px_qtev_rec.accepted_yn
478                                  );
479          okl_debug_pub.log_debug (g_level_procedure,
480                                   l_module_name,
481                                   'px_qtev_rec.org_id : '
482                                   || px_qtev_rec.org_id
483                                  );
484          okl_debug_pub.log_debug (g_level_procedure,
485                                   l_module_name,
486                                      'px_qtev_rec.purchase_amount : '
487                                   || px_qtev_rec.purchase_amount
488                                  );
489          okl_debug_pub.log_debug (g_level_procedure,
490                                   l_module_name,
491                                      'px_qtev_rec.purchase_formula : '
492                                   || px_qtev_rec.purchase_formula
493                                  );
494          okl_debug_pub.log_debug (g_level_procedure,
495                                   l_module_name,
496                                      'px_qtev_rec.asset_value : '
497                                   || px_qtev_rec.asset_value
498                                  );
499          okl_debug_pub.log_debug (g_level_procedure,
500                                   l_module_name,
501                                      'px_qtev_rec.residual_value : '
502                                   || px_qtev_rec.residual_value
503                                  );
504          okl_debug_pub.log_debug (g_level_procedure,
505                                   l_module_name,
506                                      'px_qtev_rec.unbilled_receivables : '
507                                   || px_qtev_rec.unbilled_receivables
508                                  );
509          okl_debug_pub.log_debug (g_level_procedure,
510                                   l_module_name,
511                                      'px_qtev_rec.gain_loss : '
512                                   || px_qtev_rec.gain_loss
513                                  );
514          okl_debug_pub.log_debug (g_level_procedure,
515                                   l_module_name,
516                                      'px_qtev_rec.PERDIEM_AMOUNT : '
517                                   || px_qtev_rec.perdiem_amount
518                                  );
519          okl_debug_pub.log_debug (g_level_procedure,
520                                   l_module_name,
521                                      'px_qtev_rec.currency_code : '
522                                   || px_qtev_rec.currency_code
523                                  );
524          okl_debug_pub.log_debug (g_level_procedure,
525                                   l_module_name,
526                                      'px_qtev_rec.currency_conversion_code : '
527                                   || px_qtev_rec.currency_conversion_code
528                                  );
529          okl_debug_pub.log_debug (g_level_procedure,
530                                   l_module_name,
531                                      'px_qtev_rec.legal_entity_id : '
532                                   || px_qtev_rec.legal_entity_id
533                                  );
534          okl_debug_pub.log_debug (g_level_procedure,
535                                   l_module_name,
536                                      'px_qtev_rec.repo_quote_indicator_yn : '
537                                   || px_qtev_rec.repo_quote_indicator_yn
538                                  );
539       END IF;
540 
541       IF (   (px_qtev_rec.date_effective_from IS NULL)
542           OR (px_qtev_rec.date_effective_from = okc_api.g_miss_date)
543          ) THEN
544          -- get the sysdate
545          get_sysdate (l_db_date);
546          px_qtev_rec.date_effective_from := l_db_date;
547       END IF;
548 
549       IF (   (px_qtev_rec.date_effective_to IS NULL)
550           OR (px_qtev_rec.date_effective_to = okc_api.g_miss_date)
551          ) THEN
552          IF (is_debug_statement_on) THEN
553             okl_debug_pub.log_debug (g_level_statement,
554                                      l_module_name,
555                                      'Before quote_effectivity'
556                                     );
557             okl_debug_pub.log_debug (g_level_statement,
558                                      l_module_name,
559                                         'In param, p_contract_id: '
560                                      || px_qtev_rec.khr_id
561                                     );
562          END IF;
563 
564          -- set the date eff to using rules
565          quote_effectivity (p_contract_id             => px_qtev_rec.khr_id,
566                             x_quote_eff_days          => l_quote_eff_days,
567                             x_quote_eff_max_days      => l_quote_eff_max_days,
568                             x_return_status           => l_return_status
569                            );
570 
571          IF (is_debug_statement_on) THEN
572             okl_debug_pub.log_debug (g_level_statement,
573                                      l_module_name,
574                                      'After quote_effectivity '
575                                     );
576             okl_debug_pub.log_debug (g_level_statement,
577                                      l_module_name,
578                                      'l_return_status: ' || l_return_status
579                                     );
580          END IF;
581 
582          IF (l_return_status = okc_api.g_ret_sts_success) THEN
583             px_qtev_rec.date_effective_to :=
584                            px_qtev_rec.date_effective_from + l_quote_eff_days;
585          ELSE
586             RAISE g_exception_halt_validation;
587          END IF;
588       END IF;
589 
590       IF (   (px_qtev_rec.qst_code IS NULL)
591           OR (px_qtev_rec.qst_code = okc_api.g_miss_char)
592          ) THEN
593          px_qtev_rec.qst_code := l_quote_status;
594       END IF;
595 
596       IF (   (px_qtev_rec.qrs_code IS NULL)
597           OR (px_qtev_rec.qrs_code = okc_api.g_miss_char)
598          ) THEN
599          px_qtev_rec.qrs_code := l_quote_reason;
600       END IF;
601 
602       -- Always NO during quote creation
603       px_qtev_rec.accepted_yn := g_no;
604       px_qtev_rec.approved_yn := g_no;
605       x_return_status := l_return_status;
606 
607       IF (is_debug_procedure_on) THEN
608          okl_debug_pub.log_debug (g_level_procedure, l_module_name, 'End(-)');
609       END IF;
610    EXCEPTION
611       WHEN g_exception_halt_validation THEN
612          x_return_status := l_return_status;
613       WHEN OTHERS THEN
614          x_return_status := l_return_status;
615          okc_api.set_message (p_app_name          => 'OKC',
616                               p_msg_name          => g_unexpected_error,
617                               p_token1            => g_sqlcode_token,
618                               p_token1_value      => SQLCODE,
619                               p_token2            => g_sqlerrm_token,
620                               p_token2_value      => SQLERRM
621                              );
622    END set_quote_defaults;
623 
624    -- Start of comments
625    --
626    -- Procedure Name  : validate_quote
627    -- Description     : checks the validity of the quote
628    -- Business Rules  :
629    -- Parameters      :
630    -- Version         : 1.0
631    -- History         : SECHAWLA 22-JAN-03 Bug # 2762419 : Modified the logic to check for the terminated/expired
632    --                   asset line instead of a terminated/expired contract
633    -- End of comments
634    PROCEDURE validate_quote (
635       p_api_version     IN              NUMBER,
636       p_init_msg_list   IN              VARCHAR2 DEFAULT okl_api.g_false,
637       x_return_status   OUT NOCOPY      VARCHAR2,
638       x_msg_count       OUT NOCOPY      NUMBER,
639       x_msg_data        OUT NOCOPY      VARCHAR2,
640       p_qtev_rec        IN OUT NOCOPY   qtev_rec_type,
641       p_tqlv_tbl        IN              tqlv_tbl_type,
642       p_call_flag       IN              VARCHAR2
643    ) IS
644       -- select the contract id for the contract line id
645       CURSOR l_clev_csr (p_kle_id NUMBER) IS
646          SELECT chr_id
647            FROM okc_k_lines_b
648           WHERE ID = p_kle_id;
649 
650       -- see if any quotes already exist for this asset return id
651       CURSOR l_qtev_csr (p_art_id NUMBER) IS
652          SELECT quote_number
653            FROM okl_trx_quotes_b
654           WHERE art_id = p_art_id;
655 
656       -- select the asset return id to see if valid
657 
658       -- SECHAWLA 22-JAN-03 Bug # 2762419 : Added asset_number in the SELECT clause. Modified the FROM clause to use
659     -- okl_am_asset_returns_uv instead of OKL_ASSET_RETURNS_B
660 --start changed by abhsaxen for Bug#6174484
661       CURSOR l_artv_csr (p_art_id NUMBER) IS
662          SELECT oar.ID ID,
663                 kle.NAME asset_number,
664                 oar.repurchase_agmt_yn repurchase_agmt_yn,
665                 oar.legal_entity_id legal_entity_id
666            FROM okl_asset_returns_all_b oar, okl_k_lines_full_v kle
667           WHERE oar.ID = p_art_id AND oar.kle_id = kle.ID;
668 
669 --end changed by abhsaxen for Bug#6174484
670 
671       -- Select contract number for contract id
672       CURSOR l_chr_csr (p_khr_id IN NUMBER) IS
673          SELECT k.contract_number
674            FROM okl_k_headers_full_v k
675           WHERE k.ID = p_khr_id;
676 
677       -- Select the accepted_yn flag
678       CURSOR l_acpt_csr (p_qte_id IN NUMBER) IS
679          SELECT accepted_yn
680            FROM okl_trx_quotes_b
681           WHERE ID = p_qte_id;
682 
683       -- SECHAWLA 22-JAN-03 Bug # 2762419 : Added this cursor to check the status of the asset line
684       CURSOR l_okclines_csr (p_kle_id IN NUMBER) IS
685          SELECT sts_code
686            FROM okc_k_lines_b
687           WHERE ID = p_kle_id;
688 
689       l_contract_number       VARCHAR2 (120);
690       l_contract_mismatch     BOOLEAN                                 := FALSE;
691       l_chr_id                NUMBER                                      := 1;
692       l_art_id                NUMBER                                      := 1;
693       i                       NUMBER                                      := 0;
694       l_quote_number          NUMBER                                      := 1;
695       l_repurchase_agmt_yn    VARCHAR2 (3)                              := 'N';
696       l_missing_lines         BOOLEAN                                 := FALSE;
697       lx_contract_status      VARCHAR2 (200);
698       l_control_flag_create   VARCHAR2 (200)           := 'REPUR_QUOTE_CREATE';
699       l_control_flag_update   VARCHAR2 (200)           := 'REPUR_QUOTE_UPDATE';
700       l_taiv_rec              taiv_rec_type;
701       db_accepted_yn          VARCHAR2 (1);
702       -- SECHAWLA 22-JAN-03 Bug # 2762419 : New declarations
703       l_sts_code              okc_k_lines_b.sts_code%TYPE;
704       l_asset_number          okl_am_asset_returns_uv.asset_number%TYPE;
705       -- RRAVIKIR Legal Entity Changes
706       l_legal_entity_id       NUMBER;
707        -- Legal Entity Changes End
708       -- akrangan added for debug feature start
709       l_module_name           VARCHAR2 (500)
710                                           := g_module_name || 'validate_quote';
711       is_debug_exception_on   BOOLEAN
712               := okl_debug_pub.check_log_on (l_module_name, g_level_exception);
713       is_debug_procedure_on   BOOLEAN
714               := okl_debug_pub.check_log_on (l_module_name, g_level_procedure);
715       is_debug_statement_on   BOOLEAN
716               := okl_debug_pub.check_log_on (l_module_name, g_level_statement);
717    -- akrangan added for debug feature end
718    BEGIN
719       IF (is_debug_procedure_on) THEN
720          okl_debug_pub.log_debug (g_level_procedure,
721                                   l_module_name,
722                                   'Begin(+)'
723                                  );
724       END IF;
725 
726       IF (is_debug_statement_on) THEN
727          okl_debug_pub.log_debug (g_level_statement,
728                                   l_module_name,
729                                   'p_api_version :' || p_api_version
730                                  );
731          okl_debug_pub.log_debug (g_level_statement,
732                                   l_module_name,
733                                   'p_init_msg_list :' || p_init_msg_list
734                                  );
735          okl_debug_pub.log_debug (g_level_procedure,
736                                   l_module_name,
737                                   'p_qtev_rec.id : ' || p_qtev_rec.ID
738                                  );
739          okl_debug_pub.log_debug (g_level_procedure,
740                                   l_module_name,
741                                      'p_qtev_rec.qrs_code : '
742                                   || p_qtev_rec.qrs_code
743                                  );
744          okl_debug_pub.log_debug (g_level_procedure,
745                                   l_module_name,
746                                      'p_qtev_rec.qst_code : '
747                                   || p_qtev_rec.qst_code
748                                  );
749          okl_debug_pub.log_debug (g_level_procedure,
750                                   l_module_name,
751                                      'p_qtev_rec.consolidated_qte_id : '
752                                   || p_qtev_rec.consolidated_qte_id
753                                  );
754          okl_debug_pub.log_debug (g_level_procedure,
755                                   l_module_name,
756                                   'p_qtev_rec.khr_id : ' || p_qtev_rec.khr_id
757                                  );
758          okl_debug_pub.log_debug (g_level_procedure,
759                                   l_module_name,
760                                   'p_qtev_rec.art_id : ' || p_qtev_rec.art_id
761                                  );
762          okl_debug_pub.log_debug (g_level_procedure,
763                                   l_module_name,
764                                      'p_qtev_rec.qtp_code : '
765                                   || p_qtev_rec.qtp_code
766                                  );
767          okl_debug_pub.log_debug (g_level_procedure,
768                                   l_module_name,
769                                      'p_qtev_rec.trn_code : '
770                                   || p_qtev_rec.trn_code
771                                  );
772          okl_debug_pub.log_debug (g_level_procedure,
773                                   l_module_name,
774                                   'p_qtev_rec.pdt_id : ' || p_qtev_rec.pdt_id
775                                  );
776          okl_debug_pub.log_debug (g_level_procedure,
777                                   l_module_name,
778                                      'p_qtev_rec.date_effective_from : '
779                                   || p_qtev_rec.date_effective_from
780                                  );
781          okl_debug_pub.log_debug (g_level_procedure,
782                                   l_module_name,
783                                      'p_qtev_rec.quote_number : '
784                                   || p_qtev_rec.quote_number
785                                  );
786          okl_debug_pub.log_debug (g_level_procedure,
787                                   l_module_name,
788                                      'p_qtev_rec.early_termination_yn : '
789                                   || p_qtev_rec.early_termination_yn
790                                  );
791          okl_debug_pub.log_debug (g_level_procedure,
792                                   l_module_name,
793                                      'p_qtev_rec.partial_yn : '
794                                   || p_qtev_rec.partial_yn
795                                  );
796          okl_debug_pub.log_debug (g_level_procedure,
797                                   l_module_name,
798                                      'p_qtev_rec.preproceeds_yn : '
799                                   || p_qtev_rec.preproceeds_yn
800                                  );
801          okl_debug_pub.log_debug (g_level_procedure,
802                                   l_module_name,
803                                      'p_qtev_rec.summary_format_yn : '
804                                   || p_qtev_rec.summary_format_yn
805                                  );
806          okl_debug_pub.log_debug (g_level_procedure,
807                                   l_module_name,
808                                      'p_qtev_rec.consolidated_yn : '
809                                   || p_qtev_rec.consolidated_yn
810                                  );
811          okl_debug_pub.log_debug (g_level_procedure,
812                                   l_module_name,
813                                      'p_qtev_rec.date_requested : '
814                                   || p_qtev_rec.date_requested
815                                  );
816          okl_debug_pub.log_debug (g_level_procedure,
817                                   l_module_name,
818                                      'p_qtev_rec.date_proposal : '
819                                   || p_qtev_rec.date_proposal
820                                  );
821          okl_debug_pub.log_debug (g_level_procedure,
822                                   l_module_name,
823                                      'p_qtev_rec.date_effective_to : '
824                                   || p_qtev_rec.date_effective_to
825                                  );
826          okl_debug_pub.log_debug (g_level_procedure,
827                                   l_module_name,
828                                      'p_qtev_rec.date_accepted : '
829                                   || p_qtev_rec.date_accepted
830                                  );
831          okl_debug_pub.log_debug (g_level_procedure,
832                                   l_module_name,
833                                      'p_qtev_rec.payment_received_yn : '
834                                   || p_qtev_rec.payment_received_yn
835                                  );
836          okl_debug_pub.log_debug (g_level_procedure,
837                                   l_module_name,
838                                      'p_qtev_rec.requested_by : '
839                                   || p_qtev_rec.requested_by
840                                  );
841          okl_debug_pub.log_debug (g_level_procedure,
842                                   l_module_name,
843                                      'p_qtev_rec.approved_yn : '
844                                   || p_qtev_rec.approved_yn
845                                  );
846          okl_debug_pub.log_debug (g_level_procedure,
847                                   l_module_name,
848                                      'p_qtev_rec.accepted_yn : '
849                                   || p_qtev_rec.accepted_yn
850                                  );
851          okl_debug_pub.log_debug (g_level_procedure,
852                                   l_module_name,
853                                   'p_qtev_rec.org_id : ' || p_qtev_rec.org_id
854                                  );
855          okl_debug_pub.log_debug (g_level_procedure,
856                                   l_module_name,
857                                      'p_qtev_rec.purchase_amount : '
858                                   || p_qtev_rec.purchase_amount
859                                  );
860          okl_debug_pub.log_debug (g_level_procedure,
861                                   l_module_name,
862                                      'p_qtev_rec.purchase_formula : '
863                                   || p_qtev_rec.purchase_formula
864                                  );
865          okl_debug_pub.log_debug (g_level_procedure,
866                                   l_module_name,
867                                      'p_qtev_rec.asset_value : '
868                                   || p_qtev_rec.asset_value
869                                  );
870          okl_debug_pub.log_debug (g_level_procedure,
871                                   l_module_name,
872                                      'p_qtev_rec.residual_value : '
873                                   || p_qtev_rec.residual_value
874                                  );
875          okl_debug_pub.log_debug (g_level_procedure,
876                                   l_module_name,
877                                      'p_qtev_rec.unbilled_receivables : '
878                                   || p_qtev_rec.unbilled_receivables
879                                  );
880          okl_debug_pub.log_debug (g_level_procedure,
881                                   l_module_name,
882                                      'p_qtev_rec.gain_loss : '
883                                   || p_qtev_rec.gain_loss
884                                  );
885          okl_debug_pub.log_debug (g_level_procedure,
886                                   l_module_name,
887                                      'p_qtev_rec.PERDIEM_AMOUNT : '
888                                   || p_qtev_rec.perdiem_amount
889                                  );
890          okl_debug_pub.log_debug (g_level_procedure,
891                                   l_module_name,
892                                      'p_qtev_rec.currency_code : '
893                                   || p_qtev_rec.currency_code
894                                  );
895          okl_debug_pub.log_debug (g_level_procedure,
896                                   l_module_name,
897                                      'p_qtev_rec.currency_conversion_code : '
898                                   || p_qtev_rec.currency_conversion_code
899                                  );
900          okl_debug_pub.log_debug (g_level_procedure,
901                                   l_module_name,
902                                      'p_qtev_rec.legal_entity_id : '
903                                   || p_qtev_rec.legal_entity_id
904                                  );
905          okl_debug_pub.log_debug (g_level_procedure,
906                                   l_module_name,
907                                      'p_qtev_rec.repo_quote_indicator_yn : '
908                                   || p_qtev_rec.repo_quote_indicator_yn
909                                  );
910       END IF;
911 
912       x_return_status := okc_api.g_ret_sts_success;
913 
914       -- SECHAWLA 22-JAN-03 Bug # 2762419 :Moved the quote header level validations to the beginning
915       IF p_call_flag = 'UPDATE' THEN
916          OPEN l_acpt_csr (p_qtev_rec.ID);
917 
918          FETCH l_acpt_csr
919           INTO db_accepted_yn;
920 
921          -- SECHAWLA 22-JAN-03 Bug # 2762419 : Added the following exception handling code
922          IF l_acpt_csr%NOTFOUND THEN
923             okc_api.set_message (p_app_name          => 'OKC',
924                                  p_msg_name          => g_invalid_value,
925                                  p_token1            => g_col_name_token,
926                                  p_token1_value      => 'qte_id'
927                                 );
928             RAISE g_exception_halt_validation;
929          END IF;
930 
931          -- SECHAWLA 22-JAN-03 Bug # 2762419 : end new code
932          CLOSE l_acpt_csr;
933       END IF;
934 
935       IF (is_debug_statement_on) THEN
936          okl_debug_pub.log_debug (g_level_statement,
937                                   l_module_name,
938                                   'before quote_type_check '
939                                  );
940          okl_debug_pub.log_debug (g_level_statement,
941                                   l_module_name,
942                                   'p_qtp_code: ' || p_qtev_rec.qtp_code
943                                  );
944       END IF;
945 
946       -- check if quote type is valid
947       quote_type_check (p_qtp_code           => p_qtev_rec.qtp_code,
948                         x_return_status      => x_return_status
949                        );
950 
951       IF (is_debug_statement_on) THEN
952          okl_debug_pub.log_debug (g_level_statement,
953                                   l_module_name,
954                                   'After quote_type_check '
955                                  );
956          okl_debug_pub.log_debug (g_level_statement,
957                                   l_module_name,
958                                   'x_return_status: ' || x_return_status
959                                  );
960       END IF;
961 
962       IF x_return_status = okc_api.g_ret_sts_error THEN
963          --Please select a valid Quote Type.
964          okc_api.set_message (p_app_name      => g_app_name,
965                               p_msg_name      => 'OKL_AM_QTP_CODE_INVALID'
966                              );
967          RAISE g_exception_halt_validation;
968       END IF;
969 
970       -- check asset return id is populated and valid
971       IF (    (p_qtev_rec.art_id IS NOT NULL)
972           AND (p_qtev_rec.art_id <> okc_api.g_miss_num)
973          ) THEN
974          -- select the asset return id to see if valid
975          OPEN l_artv_csr (p_qtev_rec.art_id);
976 
977          FETCH l_artv_csr
978           INTO l_art_id,
979                l_asset_number,
980                l_repurchase_agmt_yn,
981                l_legal_entity_id;
982 
983          CLOSE l_artv_csr;
984       END IF;
985 
986       IF (l_art_id = 1) THEN
987          okc_api.set_message (p_app_name          => 'OKC',
988                               p_msg_name          => g_invalid_value,
989                               p_token1            => g_col_name_token,
990                               p_token1_value      => 'art_id'
991                              );
992          RAISE g_exception_halt_validation;
993       END IF;
994 
995       -- RRAVIKIR Legal Entity Changes
996       IF (l_legal_entity_id IS NULL OR l_legal_entity_id = okc_api.g_miss_num
997          ) THEN
998          okl_api.set_message (p_app_name          => g_app_name,
999                               p_msg_name          => g_required_value,
1000                               p_token1            => g_col_name_token,
1001                               p_token1_value      => 'legal_entity_id'
1002                              );
1003          RAISE okc_api.g_exception_error;
1004       ELSE
1005          p_qtev_rec.legal_entity_id := l_legal_entity_id;
1006       END IF;
1007 
1008       -- Legal Entity Changes End
1009 
1010       -- see if there is a repurchase agreement
1011       IF (l_repurchase_agmt_yn IS NULL) OR (l_repurchase_agmt_yn = 'N') THEN
1012          -- Get the contract number
1013          OPEN l_chr_csr (p_qtev_rec.khr_id);
1014 
1015          FETCH l_chr_csr
1016           INTO l_contract_number;
1017 
1018          CLOSE l_chr_csr;
1019 
1020          -- No repurchase agreement exists for contract CONTRACT_NUMBER.
1021          okc_api.set_message (p_app_name          => g_app_name,
1022                               p_msg_name          => 'OKL_AM_NO_REPURCHASE_AGMT',
1023                               p_token1            => 'CONTRACT_NUMBER',
1024                               p_token1_value      => l_contract_number
1025                              );
1026          RAISE g_exception_halt_validation;
1027       END IF;
1028 
1029       -- SECHAWLA 22-JAN-03 Bug # 2762419 : end of moved validations
1030 
1031       -- Check that there are contract lines passed as parameters.
1032       IF (p_tqlv_tbl.COUNT > 0) THEN
1033          i := p_tqlv_tbl.FIRST;
1034 
1035          LOOP
1036             IF (   (p_tqlv_tbl (i).kle_id IS NULL)
1037                 OR (p_tqlv_tbl (i).kle_id = okc_api.g_miss_num)
1038                ) THEN
1039                l_missing_lines := TRUE;
1040                --SECHAWLA 22-JAN-03 Bug # 2762419 : Added the EXIT statement
1041                EXIT;
1042             END IF;
1043 
1044             EXIT WHEN (i = p_tqlv_tbl.LAST);
1045             i := p_tqlv_tbl.NEXT (i);
1046          END LOOP;
1047       ELSE
1048          l_missing_lines := TRUE;
1049       END IF;
1050 
1051       IF (l_missing_lines) THEN
1052          okc_api.set_message (p_app_name          => 'OKC',
1053                               p_msg_name          => g_required_value,
1054                               p_token1            => g_col_name_token,
1055                               p_token1_value      => 'kle_id'
1056                              );
1057          RAISE g_exception_halt_validation;
1058       END IF;
1059 
1060       -- validate that the contract line ids are valid and belong to the same contract
1061       IF (    (p_tqlv_tbl.COUNT > 0)
1062           AND (    (p_qtev_rec.khr_id IS NOT NULL)
1063                AND (p_qtev_rec.khr_id <> okc_api.g_miss_num)
1064               )
1065          ) THEN
1066          i := p_tqlv_tbl.FIRST;
1067          l_contract_mismatch := FALSE;
1068 
1069          LOOP
1070             l_chr_id := 1;
1071 
1072             -- select the contract id for the contract line id
1073             OPEN l_clev_csr (p_tqlv_tbl (i).kle_id);
1074 
1075             FETCH l_clev_csr
1076              INTO l_chr_id;
1077 
1078             CLOSE l_clev_csr;
1079 
1080             IF (l_chr_id <> p_qtev_rec.khr_id) OR (l_chr_id = 1) THEN
1081                l_contract_mismatch := TRUE;
1082             END IF;
1083 
1084             EXIT WHEN (i = p_tqlv_tbl.LAST);
1085             i := p_tqlv_tbl.NEXT (i);
1086          END LOOP;
1087 
1088          IF (l_contract_mismatch) THEN
1089             okc_api.set_message (p_app_name          => 'OKC',
1090                                  p_msg_name          => g_invalid_value,
1091                                  p_token1            => g_col_name_token,
1092                                  p_token1_value      => 'kle_id'
1093                                 );
1094             RAISE g_exception_halt_validation;
1095          END IF;
1096       ELSE
1097 -- Either no lines selected (which is not needed here since done earlier) or khr_id is invalid
1098          okc_api.set_message (p_app_name          => 'OKC',
1099                               p_msg_name          => g_required_value,
1100                               p_token1            => g_col_name_token,
1101                               p_token1_value      => 'khr_id'
1102                              );
1103          RAISE g_exception_halt_validation;
1104       END IF;
1105 
1106       -- SECHAWLA 22-JAN-03 Bug # 2762419 : Check if the asset line is terminated or expired
1107       IF    (p_call_flag = 'CREATE')
1108          OR (p_call_flag = 'UPDATE' AND db_accepted_yn <> 'Y') THEN
1109          i := p_tqlv_tbl.FIRST;
1110 
1111          LOOP
1112             --Check if asset line is terminated or expired
1113             OPEN l_okclines_csr (p_tqlv_tbl (i).kle_id);
1114 
1115             FETCH l_okclines_csr
1116              INTO l_sts_code;
1117 
1118             IF l_okclines_csr%NOTFOUND THEN
1119                x_return_status := okl_api.g_ret_sts_error;
1120                -- Kle ID is invalid
1121                okl_api.set_message (p_app_name          => 'OKC',
1122                                     p_msg_name          => g_invalid_value,
1123                                     p_token1            => g_col_name_token,
1124                                     p_token1_value      => 'KLE_ID'
1125                                    );
1126                RAISE g_exception_halt_validation;
1127             END IF;
1128 
1129             CLOSE l_okclines_csr;
1130 
1131             IF l_sts_code NOT IN ('TERMINATED', 'EXPIRED') THEN
1132                x_return_status := okl_api.g_ret_sts_error;
1133                -- Asset ASSET_NUMBER is still STATUS. Asset should be terminated or expired.
1134                okl_api.set_message
1135                                 (p_app_name          => 'OKL',
1136                                  p_msg_name          => 'OKL_AM_ASSET_NOT_TERMINATED',
1137                                  p_token1            => 'ASSET_NUMBER',
1138                                  p_token1_value      => l_asset_number,
1139                                  p_token2            => 'STATUS',
1140                                  p_token2_value      => l_sts_code
1141                                 );
1142                RAISE g_exception_halt_validation;
1143             END IF;
1144 
1145             EXIT WHEN (i = p_tqlv_tbl.LAST);
1146             i := p_tqlv_tbl.NEXT (i);
1147          END LOOP;
1148       END IF;
1149 
1150       -- SECHAWLA 22-JAN-03 Bug # 2762419 : end new code
1151 
1152       /*
1153     -- check if contract active
1154     IF check_contract_active_yn ( p_qtev_rec,l_contract_number) = TRUE THEN
1155       -- Contract CONTRACT_NUMBER is still Active. Unable to generate the quote
1156       -- until the contract has been terminated.
1157       OKC_API.SET_MESSAGE (
1158           p_app_name => G_APP_NAME
1159          ,p_msg_name => 'OKL_AM_CONTRACT_STILL_ACTIVE'
1160          ,p_token1   => 'CONTRACT_NUMBER'
1161          ,p_token1_value   => l_contract_number);
1162 
1163       RAISE G_EXCEPTION_HALT_VALIDATION;
1164     END IF;
1165 */
1166 
1167       -- see if vendor billing information exists
1168       l_taiv_rec.khr_id := p_qtev_rec.khr_id;
1169       okl_am_invoices_pvt.get_vendor_billing_info
1170                                            (px_taiv_rec          => l_taiv_rec,
1171                                             x_return_status      => x_return_status
1172                                            );
1173 
1174       -- If error then above api will set the message, so exit now
1175       IF x_return_status <> okl_api.g_ret_sts_success THEN
1176          RAISE g_exception_halt_validation;
1177       END IF;
1178 
1179       -- see if any quotes already exist for this asset return id
1180       OPEN l_qtev_csr (p_qtev_rec.art_id);
1181 
1182       FETCH l_qtev_csr
1183        INTO l_quote_number;
1184 
1185       CLOSE l_qtev_csr;
1186 
1187       IF (l_quote_number <> 1) THEN
1188          -- Repurchase quote (QUOTE_NUMBER) already exists for this Asset.
1189          okc_api.set_message (p_app_name          => g_app_name,
1190                               p_msg_name          => 'OKL_AM_REP_QUOTE_ALREADY_EXIST',
1191                               p_token1            => 'QUOTE_NUMBER',
1192                               p_token1_value      => TO_CHAR (l_quote_number)
1193                              );
1194          RAISE g_exception_halt_validation;
1195       END IF;
1196 
1197       IF (is_debug_procedure_on) THEN
1198          okl_debug_pub.log_debug (g_level_procedure, l_module_name, 'End(-)');
1199       END IF;
1200    EXCEPTION
1201       WHEN g_exception_halt_validation THEN
1202          IF (l_clev_csr%ISOPEN) THEN
1203             CLOSE l_clev_csr;
1204          END IF;
1205 
1206          IF (l_artv_csr%ISOPEN) THEN
1207             CLOSE l_artv_csr;
1208          END IF;
1209 
1210          IF (l_qtev_csr%ISOPEN) THEN
1211             CLOSE l_qtev_csr;
1212          END IF;
1213 
1214          IF (l_chr_csr%ISOPEN) THEN
1215             CLOSE l_chr_csr;
1216          END IF;
1217 
1218          IF (l_acpt_csr%ISOPEN) THEN
1219             CLOSE l_acpt_csr;
1220          END IF;
1221 
1222          -- SECHAWLA 22-JAN-03 Bug # 2762419 : Close the new cursor
1223          IF l_okclines_csr%ISOPEN THEN
1224             CLOSE l_okclines_csr;
1225          END IF;
1226 
1227          x_return_status := okc_api.g_ret_sts_error;
1228       WHEN OTHERS THEN
1229          IF (l_clev_csr%ISOPEN) THEN
1230             CLOSE l_clev_csr;
1231          END IF;
1232 
1233          IF (l_artv_csr%ISOPEN) THEN
1234             CLOSE l_artv_csr;
1235          END IF;
1236 
1237          IF (l_qtev_csr%ISOPEN) THEN
1238             CLOSE l_qtev_csr;
1239          END IF;
1240 
1241          IF (l_chr_csr%ISOPEN) THEN
1242             CLOSE l_chr_csr;
1243          END IF;
1244 
1245          IF (l_acpt_csr%ISOPEN) THEN
1246             CLOSE l_acpt_csr;
1247          END IF;
1248 
1249          -- SECHAWLA 22-JAN-03 Bug # 2762419 : Close the new cursor
1250          IF l_okclines_csr%ISOPEN THEN
1251             CLOSE l_okclines_csr;
1252          END IF;
1253 
1254          okc_api.set_message (p_app_name          => okc_api.g_app_name,
1255                               p_msg_name          => g_unexpected_error,
1256                               p_token1            => g_sqlcode_token,
1257                               p_token1_value      => SQLCODE,
1258                               p_token2            => g_sqlerrm_token,
1259                               p_token2_value      => SQLERRM
1260                              );
1261          x_return_status := okc_api.g_ret_sts_unexp_error;
1262    END validate_quote;
1263 
1264    -- Start of comments
1265    --
1266    -- Procedure Name  : create_repurchase_quote
1267    -- Description     :
1268    -- Business Rules  :
1269    -- Parameters      :
1270    -- Version         : 1.0
1271    -- End of comments
1272    PROCEDURE create_repurchase_quote (
1273       p_api_version     IN              NUMBER,
1274       p_init_msg_list   IN              VARCHAR2,
1275       x_return_status   OUT NOCOPY      VARCHAR2,
1276       x_msg_count       OUT NOCOPY      NUMBER,
1277       x_msg_data        OUT NOCOPY      VARCHAR2,
1278       p_qtev_rec        IN              qtev_rec_type,
1279       p_tqlv_tbl        IN              tqlv_tbl_type,
1280       x_qtev_rec        OUT NOCOPY      qtev_rec_type,
1281       x_tqlv_tbl        OUT NOCOPY      tqlv_tbl_type
1282    ) AS
1283       i                        NUMBER         := 0;
1284       l_contract_active_yn     VARCHAR2 (200);
1285       l_contract_term_yn       VARCHAR2 (200);
1286       l_partial_allowed_yn     VARCHAR2 (200);
1287       lp_qtev_rec              qtev_rec_type  := p_qtev_rec;
1288       lx_qtev_rec              qtev_rec_type;
1289       lp_tqlv_tbl              tqlv_tbl_type  := p_tqlv_tbl;
1290       lx_tqlv_tbl              tqlv_tbl_type  := p_tqlv_tbl;
1291       l_asset_tbl              asset_tbl_type;
1292       lx_qpyv_tbl              qpyv_tbl_type;
1293       l_quote_number           NUMBER;
1294       l_api_version   CONSTANT NUMBER         := 1;
1295       l_api_name      CONSTANT VARCHAR2 (30)  := 'create_repurchase_quote';
1296       l_return_status          VARCHAR2 (1)   := okc_api.g_ret_sts_success;
1297       -- akrangan added for debug feature start
1298       l_module_name            VARCHAR2 (500)
1299                                 := g_module_name || 'create_repurchase_quote';
1300       is_debug_exception_on    BOOLEAN
1301              := okl_debug_pub.check_log_on (l_module_name, g_level_exception);
1302       is_debug_procedure_on    BOOLEAN
1303              := okl_debug_pub.check_log_on (l_module_name, g_level_procedure);
1304       is_debug_statement_on    BOOLEAN
1305              := okl_debug_pub.check_log_on (l_module_name, g_level_statement);
1306    -- akrangan added for debug feature end
1307    BEGIN
1308       IF (is_debug_procedure_on) THEN
1309          okl_debug_pub.log_debug (g_level_procedure,
1310                                   l_module_name,
1311                                   'Begin(+)'
1312                                  );
1313       END IF;
1314 
1315       IF (is_debug_statement_on) THEN
1316          okl_debug_pub.log_debug (g_level_statement,
1317                                   l_module_name,
1318                                   'p_api_version :' || p_api_version
1319                                  );
1320          okl_debug_pub.log_debug (g_level_statement,
1321                                   l_module_name,
1322                                   'p_init_msg_list :' || p_init_msg_list
1323                                  );
1324          okl_debug_pub.log_debug (g_level_procedure,
1325                                   l_module_name,
1326                                   'p_qtev_rec.id : ' || p_qtev_rec.ID
1327                                  );
1328          okl_debug_pub.log_debug (g_level_procedure,
1329                                   l_module_name,
1330                                      'p_qtev_rec.qrs_code : '
1331                                   || p_qtev_rec.qrs_code
1332                                  );
1333          okl_debug_pub.log_debug (g_level_procedure,
1334                                   l_module_name,
1335                                      'p_qtev_rec.qst_code : '
1336                                   || p_qtev_rec.qst_code
1337                                  );
1338          okl_debug_pub.log_debug (g_level_procedure,
1339                                   l_module_name,
1340                                      'p_qtev_rec.consolidated_qte_id : '
1341                                   || p_qtev_rec.consolidated_qte_id
1342                                  );
1343          okl_debug_pub.log_debug (g_level_procedure,
1344                                   l_module_name,
1345                                   'p_qtev_rec.khr_id : ' || p_qtev_rec.khr_id
1346                                  );
1347          okl_debug_pub.log_debug (g_level_procedure,
1348                                   l_module_name,
1349                                   'p_qtev_rec.art_id : ' || p_qtev_rec.art_id
1350                                  );
1351          okl_debug_pub.log_debug (g_level_procedure,
1352                                   l_module_name,
1353                                      'p_qtev_rec.qtp_code : '
1354                                   || p_qtev_rec.qtp_code
1355                                  );
1356          okl_debug_pub.log_debug (g_level_procedure,
1357                                   l_module_name,
1358                                      'p_qtev_rec.trn_code : '
1359                                   || p_qtev_rec.trn_code
1360                                  );
1361          okl_debug_pub.log_debug (g_level_procedure,
1362                                   l_module_name,
1363                                   'p_qtev_rec.pdt_id : ' || p_qtev_rec.pdt_id
1364                                  );
1365          okl_debug_pub.log_debug (g_level_procedure,
1366                                   l_module_name,
1367                                      'p_qtev_rec.date_effective_from : '
1368                                   || p_qtev_rec.date_effective_from
1369                                  );
1370          okl_debug_pub.log_debug (g_level_procedure,
1371                                   l_module_name,
1372                                      'p_qtev_rec.quote_number : '
1373                                   || p_qtev_rec.quote_number
1374                                  );
1375          okl_debug_pub.log_debug (g_level_procedure,
1376                                   l_module_name,
1377                                      'p_qtev_rec.early_termination_yn : '
1378                                   || p_qtev_rec.early_termination_yn
1379                                  );
1380          okl_debug_pub.log_debug (g_level_procedure,
1381                                   l_module_name,
1382                                      'p_qtev_rec.partial_yn : '
1383                                   || p_qtev_rec.partial_yn
1384                                  );
1385          okl_debug_pub.log_debug (g_level_procedure,
1386                                   l_module_name,
1387                                      'p_qtev_rec.preproceeds_yn : '
1388                                   || p_qtev_rec.preproceeds_yn
1389                                  );
1390          okl_debug_pub.log_debug (g_level_procedure,
1391                                   l_module_name,
1392                                      'p_qtev_rec.summary_format_yn : '
1393                                   || p_qtev_rec.summary_format_yn
1394                                  );
1395          okl_debug_pub.log_debug (g_level_procedure,
1396                                   l_module_name,
1397                                      'p_qtev_rec.consolidated_yn : '
1398                                   || p_qtev_rec.consolidated_yn
1399                                  );
1400          okl_debug_pub.log_debug (g_level_procedure,
1401                                   l_module_name,
1402                                      'p_qtev_rec.date_requested : '
1403                                   || p_qtev_rec.date_requested
1404                                  );
1405          okl_debug_pub.log_debug (g_level_procedure,
1406                                   l_module_name,
1407                                      'p_qtev_rec.date_proposal : '
1408                                   || p_qtev_rec.date_proposal
1409                                  );
1410          okl_debug_pub.log_debug (g_level_procedure,
1411                                   l_module_name,
1412                                      'p_qtev_rec.date_effective_to : '
1413                                   || p_qtev_rec.date_effective_to
1414                                  );
1415          okl_debug_pub.log_debug (g_level_procedure,
1416                                   l_module_name,
1417                                      'p_qtev_rec.date_accepted : '
1418                                   || p_qtev_rec.date_accepted
1419                                  );
1420          okl_debug_pub.log_debug (g_level_procedure,
1421                                   l_module_name,
1422                                      'p_qtev_rec.payment_received_yn : '
1423                                   || p_qtev_rec.payment_received_yn
1424                                  );
1425          okl_debug_pub.log_debug (g_level_procedure,
1426                                   l_module_name,
1427                                      'p_qtev_rec.requested_by : '
1428                                   || p_qtev_rec.requested_by
1429                                  );
1430          okl_debug_pub.log_debug (g_level_procedure,
1431                                   l_module_name,
1432                                      'p_qtev_rec.approved_yn : '
1433                                   || p_qtev_rec.approved_yn
1434                                  );
1435          okl_debug_pub.log_debug (g_level_procedure,
1436                                   l_module_name,
1437                                      'p_qtev_rec.accepted_yn : '
1438                                   || p_qtev_rec.accepted_yn
1439                                  );
1440          okl_debug_pub.log_debug (g_level_procedure,
1441                                   l_module_name,
1442                                   'p_qtev_rec.org_id : ' || p_qtev_rec.org_id
1443                                  );
1444          okl_debug_pub.log_debug (g_level_procedure,
1445                                   l_module_name,
1446                                      'p_qtev_rec.purchase_amount : '
1447                                   || p_qtev_rec.purchase_amount
1448                                  );
1449          okl_debug_pub.log_debug (g_level_procedure,
1450                                   l_module_name,
1451                                      'p_qtev_rec.purchase_formula : '
1452                                   || p_qtev_rec.purchase_formula
1453                                  );
1454          okl_debug_pub.log_debug (g_level_procedure,
1455                                   l_module_name,
1456                                      'p_qtev_rec.asset_value : '
1457                                   || p_qtev_rec.asset_value
1458                                  );
1459          okl_debug_pub.log_debug (g_level_procedure,
1460                                   l_module_name,
1461                                      'p_qtev_rec.residual_value : '
1462                                   || p_qtev_rec.residual_value
1463                                  );
1464          okl_debug_pub.log_debug (g_level_procedure,
1465                                   l_module_name,
1466                                      'p_qtev_rec.unbilled_receivables : '
1467                                   || p_qtev_rec.unbilled_receivables
1468                                  );
1469          okl_debug_pub.log_debug (g_level_procedure,
1470                                   l_module_name,
1471                                      'p_qtev_rec.gain_loss : '
1472                                   || p_qtev_rec.gain_loss
1473                                  );
1474          okl_debug_pub.log_debug (g_level_procedure,
1475                                   l_module_name,
1476                                      'p_qtev_rec.PERDIEM_AMOUNT : '
1477                                   || p_qtev_rec.perdiem_amount
1478                                  );
1479          okl_debug_pub.log_debug (g_level_procedure,
1480                                   l_module_name,
1481                                      'p_qtev_rec.currency_code : '
1482                                   || p_qtev_rec.currency_code
1483                                  );
1484          okl_debug_pub.log_debug (g_level_procedure,
1485                                   l_module_name,
1486                                      'p_qtev_rec.currency_conversion_code : '
1487                                   || p_qtev_rec.currency_conversion_code
1488                                  );
1489          okl_debug_pub.log_debug (g_level_procedure,
1490                                   l_module_name,
1491                                      'p_qtev_rec.legal_entity_id : '
1492                                   || p_qtev_rec.legal_entity_id
1493                                  );
1494          okl_debug_pub.log_debug (g_level_procedure,
1495                                   l_module_name,
1496                                      'p_qtev_rec.repo_quote_indicator_yn : '
1497                                   || p_qtev_rec.repo_quote_indicator_yn
1498                                  );
1499       END IF;
1500 
1501       --Check API version, initialize message list and create savepoint.
1502       l_return_status :=
1503          okl_api.start_activity (l_api_name,
1504                                  g_pkg_name,
1505                                  p_init_msg_list,
1506                                  l_api_version,
1507                                  p_api_version,
1508                                  '_PVT',
1509                                  x_return_status
1510                                 );
1511 
1512       IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1513          RAISE okl_api.g_exception_unexpected_error;
1514       ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1515          RAISE okl_api.g_exception_error;
1516       END IF;
1517 
1518       IF (is_debug_statement_on) THEN
1519          okl_debug_pub.log_debug (g_level_statement,
1520                                   l_module_name,
1521                                   'before validate_quote '
1522                                  );
1523          okl_debug_pub.log_debug (g_level_statement,
1524                                   l_module_name,
1525                                   'l_return_status: ' || l_return_status
1526                                  );
1527       END IF;
1528 
1529       -- check if quote valid
1530       validate_quote
1531             (p_api_version        => p_api_version,
1532              p_init_msg_list      => p_init_msg_list,
1533              x_return_status      => l_return_status,
1534              x_msg_count          => x_msg_count,
1535              x_msg_data           => x_msg_data,
1536              p_qtev_rec           => lp_qtev_rec,
1537                                        --lx_qtev_rec, --code added by akrangan
1538              p_tqlv_tbl           => lp_tqlv_tbl,
1539              p_call_flag          => 'CREATE'
1540             );
1541 
1542       IF (is_debug_statement_on) THEN
1543          okl_debug_pub.log_debug (g_level_statement,
1544                                   l_module_name,
1545                                   'after validate_quote '
1546                                  );
1547          okl_debug_pub.log_debug (g_level_statement,
1548                                   l_module_name,
1549                                   'l_return_status: ' || l_return_status
1550                                  );
1551       END IF;
1552 
1553       IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
1554          RAISE okc_api.g_exception_unexpected_error;
1555       ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
1556          RAISE okc_api.g_exception_error;
1557       END IF;
1558 
1559       IF (is_debug_statement_on) THEN
1560          okl_debug_pub.log_debug (g_level_statement,
1561                                   l_module_name,
1562                                   'before set_quote_defaults '
1563                                  );
1564          okl_debug_pub.log_debug (g_level_statement,
1565                                   l_module_name,
1566                                   'l_return_status: ' || l_return_status
1567                                  );
1568       END IF;
1569 
1570       -- set quote default values
1571       set_quote_defaults
1572            (px_qtev_rec          => lp_qtev_rec,
1573                                        --lx_qtev_rec, --code added by akrangan
1574             x_return_status      => l_return_status);
1575 
1576       IF (is_debug_statement_on) THEN
1577          okl_debug_pub.log_debug (g_level_statement,
1578                                   l_module_name,
1579                                   'after set_quote_defaults '
1580                                  );
1581          okl_debug_pub.log_debug (g_level_statement,
1582                                   l_module_name,
1583                                   'l_return_status: ' || l_return_status
1584                                  );
1585       END IF;
1586 
1587       IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
1588          RAISE okc_api.g_exception_unexpected_error;
1589       ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
1590          RAISE okc_api.g_exception_error;
1591       END IF;
1592 
1593       IF (is_debug_statement_on) THEN
1594          okl_debug_pub.log_debug
1595                               (g_level_statement,
1596                                l_module_name,
1597                                'before OKL_TRX_QUOTES_PUB.insert_trx_quotes '
1598                               );
1599          okl_debug_pub.log_debug (g_level_statement,
1600                                   l_module_name,
1601                                   'l_return_status: ' || l_return_status
1602                                  );
1603       END IF;
1604 
1605       -- call the pub tapi insert
1606       okl_trx_quotes_pub.insert_trx_quotes
1607             (p_api_version        => p_api_version,
1608              p_init_msg_list      => p_init_msg_list,
1609              x_msg_count          => x_msg_count,
1610              x_msg_data           => x_msg_data,
1611              p_qtev_rec           => lp_qtev_rec,
1612                                        --lx_qtev_rec, --code added by akrangan
1613              x_qtev_rec           => lx_qtev_rec,
1614              x_return_status      => l_return_status
1615             );
1616 
1617       IF (is_debug_statement_on) THEN
1618          okl_debug_pub.log_debug
1619                                (g_level_statement,
1620                                 l_module_name,
1621                                 'after OKL_TRX_QUOTES_PUB.insert_trx_quotes '
1622                                );
1623          okl_debug_pub.log_debug (g_level_statement,
1624                                   l_module_name,
1625                                   'l_return_status: ' || l_return_status
1626                                  );
1627       END IF;
1628 
1629       IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
1630          RAISE okc_api.g_exception_unexpected_error;
1631       ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
1632          RAISE okc_api.g_exception_error;
1633       END IF;
1634 
1635       IF (is_debug_statement_on) THEN
1636          okl_debug_pub.log_debug
1637                     (g_level_statement,
1638                      l_module_name,
1639                      'before OKL_AM_PARTIES_PVT.create_partner_as_recipient '
1640                     );
1641          okl_debug_pub.log_debug (g_level_statement,
1642                                   l_module_name,
1643                                   'l_return_status: ' || l_return_status
1644                                  );
1645       END IF;
1646 
1647       -- Create quote parties
1648       okl_am_parties_pvt.create_partner_as_recipient
1649                                            (p_qtev_rec           => lx_qtev_rec,
1650                                             x_qpyv_tbl           => lx_qpyv_tbl,
1651                                             x_return_status      => l_return_status
1652                                            );
1653 
1654       IF (is_debug_statement_on) THEN
1655          okl_debug_pub.log_debug
1656                      (g_level_statement,
1657                       l_module_name,
1658                       'after OKL_AM_PARTIES_PVT.create_partner_as_recipient '
1659                      );
1660          okl_debug_pub.log_debug (g_level_statement,
1661                                   l_module_name,
1662                                   'l_return_status: ' || l_return_status
1663                                  );
1664       END IF;
1665 
1666       IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1667          RAISE okl_api.g_exception_unexpected_error;
1668       ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1669          RAISE okl_api.g_exception_error;
1670       END IF;
1671 
1672       -- set the asset table to be passed to the calculate quote api
1673       IF (lp_tqlv_tbl.COUNT > 0) THEN
1674          i := lp_tqlv_tbl.FIRST;
1675 
1676          LOOP
1677             l_asset_tbl (i).p_asset_id := lp_tqlv_tbl (i).kle_id;
1678             EXIT WHEN (i = lp_tqlv_tbl.LAST);
1679             i := lp_tqlv_tbl.NEXT (i);
1680          END LOOP;
1681       ELSE                                     -- No assets selected for quote
1682          okc_api.set_message (p_app_name          => 'OKC',
1683                               p_msg_name          => g_required_value,
1684                               p_token1            => g_col_name_token,
1685                               p_token1_value      => 'p_tqlv_tbl'
1686                              );
1687          RAISE g_exception_halt_validation;
1688       END IF;
1689 
1690       IF (is_debug_statement_on) THEN
1691          okl_debug_pub.log_debug
1692                               (g_level_statement,
1693                                l_module_name,
1694                                'before  OKL_AM_CALCULATE_QUOTE_PVT.generate '
1695                               );
1696          okl_debug_pub.log_debug (g_level_statement,
1697                                   l_module_name,
1698                                   'l_return_status: ' || l_return_status
1699                                  );
1700       END IF;
1701 
1702       -- call quote calculation api (pass assets tbl)
1703       -- this will insert quote lines
1704       okl_am_calculate_quote_pvt.generate (p_api_version        => p_api_version,
1705                                            p_init_msg_list      => p_init_msg_list,
1706                                            x_msg_count          => x_msg_count,
1707                                            x_msg_data           => x_msg_data,
1708                                            p_qtev_rec           => lx_qtev_rec,
1709                                            p_asset_tbl          => l_asset_tbl,
1710                                            x_tqlv_tbl           => lx_tqlv_tbl,
1711                                            x_return_status      => l_return_status
1712                                           );
1713 
1714       IF (is_debug_statement_on) THEN
1715          okl_debug_pub.log_debug
1716                                (g_level_statement,
1717                                 l_module_name,
1718                                 'after  OKL_AM_CALCULATE_QUOTE_PVT.generate '
1719                                );
1720          okl_debug_pub.log_debug (g_level_statement,
1721                                   l_module_name,
1722                                   'l_return_status: ' || l_return_status
1723                                  );
1724       END IF;
1725 
1726       IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
1727          RAISE okc_api.g_exception_unexpected_error;
1728       ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
1729          RAISE okc_api.g_exception_error;
1730       END IF;
1731 
1732       -- set the return status and out variables
1733       x_return_status := l_return_status;
1734       x_qtev_rec := lx_qtev_rec;
1735       x_tqlv_tbl := lx_tqlv_tbl;
1736       -- end the transaction
1737       okc_api.end_activity (x_msg_count, x_msg_data);
1738 
1739       IF (is_debug_procedure_on) THEN
1740          okl_debug_pub.log_debug (g_level_procedure, l_module_name, 'End(-)');
1741       END IF;
1742    EXCEPTION
1743       WHEN okc_api.g_exception_error THEN
1744          x_return_status :=
1745             okc_api.handle_exceptions (l_api_name,
1746                                        g_pkg_name,
1747                                        'OKC_API.G_RET_STS_ERROR',
1748                                        x_msg_count,
1749                                        x_msg_data,
1750                                        '_PVT'
1751                                       );
1752       WHEN okc_api.g_exception_unexpected_error THEN
1753          x_return_status :=
1754             okc_api.handle_exceptions (l_api_name,
1755                                        g_pkg_name,
1756                                        'OKC_API.G_RET_STS_UNEXP_ERROR',
1757                                        x_msg_count,
1758                                        x_msg_data,
1759                                        '_PVT'
1760                                       );
1761       WHEN OTHERS THEN
1762          x_return_status :=
1763             okc_api.handle_exceptions (l_api_name,
1764                                        g_pkg_name,
1765                                        'OTHERS',
1766                                        x_msg_count,
1767                                        x_msg_data,
1768                                        '_PVT'
1769                                       );
1770    END create_repurchase_quote;
1771 
1772    -- Start of comments
1773    --
1774    -- Procedure Name  : update_repurchase_quote
1775    -- Description     :
1776    -- Business Rules  :
1777    -- Parameters      :
1778    -- Version         : 1.0
1779    -- History         : rmunjulu Sales_Tax_Enhancement Call the OKL Tax engine to calculate tax
1780    --                   Also modified to not pass tax line for updates
1781    -- End of comments
1782    PROCEDURE update_repurchase_quote (
1783       p_api_version     IN              NUMBER,
1784       p_init_msg_list   IN              VARCHAR2,
1785       x_return_status   OUT NOCOPY      VARCHAR2,
1786       x_msg_count       OUT NOCOPY      NUMBER,
1787       x_msg_data        OUT NOCOPY      VARCHAR2,
1788       p_qtev_rec        IN              qtev_rec_type,
1789       p_tqlv_tbl        IN              tqlv_tbl_type,
1790       x_qtev_rec        OUT NOCOPY      qtev_rec_type,
1791       x_tqlv_tbl        OUT NOCOPY      tqlv_tbl_type
1792    ) AS
1793       l_db_date                  DATE;
1794       i                          NUMBER          := 0;
1795       l_db_khr_id                NUMBER;
1796       l_db_accepted_yn           VARCHAR2 (3);
1797       l_db_date_effective_from   DATE;
1798       l_db_date_effective_to     DATE;
1799       l_db_qtp_code              VARCHAR2 (200);
1800       lp_qtev_rec                qtev_rec_type   := p_qtev_rec;
1801       lx_qtev_rec                qtev_rec_type   := p_qtev_rec;
1802       lp_tqlv_tbl                tqlv_tbl_type   := p_tqlv_tbl;
1803       lx_tqlv_tbl                tqlv_tbl_type   := p_tqlv_tbl;
1804       l_quote_number             NUMBER;
1805       l_quote_eff_days           NUMBER;
1806       l_quote_eff_max_days       NUMBER;
1807       l_max_quote_eff_to_dt      DATE;
1808       l_api_version     CONSTANT NUMBER          := 1;
1809       l_api_name        CONSTANT VARCHAR2 (30)   := 'update_repurchase_quote';
1810       l_return_status            VARCHAR2 (1)    := okc_api.g_ret_sts_success;
1811       l_event_name               VARCHAR2 (200)
1812                                       := 'oracle.apps.okl.am.repurchasequote';
1813       l_event_desc               VARCHAR2 (2000);
1814       l_date_eff_from            DATE;
1815       -- rmunjulu Sales_Tax_Enhancement
1816       llp_tqlv_tbl               tqlv_tbl_type;
1817       j                          NUMBER;
1818       -- akrangan added for debug feature start
1819       l_module_name              VARCHAR2 (500)
1820                                 := g_module_name || 'update_repurchase_quote';
1821       is_debug_exception_on      BOOLEAN
1822              := okl_debug_pub.check_log_on (l_module_name, g_level_exception);
1823       is_debug_procedure_on      BOOLEAN
1824              := okl_debug_pub.check_log_on (l_module_name, g_level_procedure);
1825       is_debug_statement_on      BOOLEAN
1826              := okl_debug_pub.check_log_on (l_module_name, g_level_statement);
1827    -- akrangan added for debug feature end
1828    BEGIN
1829       IF (is_debug_procedure_on) THEN
1830          okl_debug_pub.log_debug (g_level_procedure,
1831                                   l_module_name,
1832                                   'Begin(+)'
1833                                  );
1834       END IF;
1835 
1836       IF (is_debug_statement_on) THEN
1837          okl_debug_pub.log_debug (g_level_statement,
1838                                   l_module_name,
1839                                   'p_api_version :' || p_api_version
1840                                  );
1841          okl_debug_pub.log_debug (g_level_statement,
1842                                   l_module_name,
1843                                   'p_init_msg_list :' || p_init_msg_list
1844                                  );
1845          okl_debug_pub.log_debug (g_level_procedure,
1846                                   l_module_name,
1847                                   'p_qtev_rec.id : ' || p_qtev_rec.ID
1848                                  );
1849          okl_debug_pub.log_debug (g_level_procedure,
1850                                   l_module_name,
1851                                      'p_qtev_rec.qrs_code : '
1852                                   || p_qtev_rec.qrs_code
1853                                  );
1854          okl_debug_pub.log_debug (g_level_procedure,
1855                                   l_module_name,
1856                                      'p_qtev_rec.qst_code : '
1857                                   || p_qtev_rec.qst_code
1858                                  );
1859          okl_debug_pub.log_debug (g_level_procedure,
1860                                   l_module_name,
1861                                      'p_qtev_rec.consolidated_qte_id : '
1862                                   || p_qtev_rec.consolidated_qte_id
1863                                  );
1864          okl_debug_pub.log_debug (g_level_procedure,
1865                                   l_module_name,
1866                                   'p_qtev_rec.khr_id : ' || p_qtev_rec.khr_id
1867                                  );
1868          okl_debug_pub.log_debug (g_level_procedure,
1869                                   l_module_name,
1870                                   'p_qtev_rec.art_id : ' || p_qtev_rec.art_id
1871                                  );
1872          okl_debug_pub.log_debug (g_level_procedure,
1873                                   l_module_name,
1874                                      'p_qtev_rec.qtp_code : '
1875                                   || p_qtev_rec.qtp_code
1876                                  );
1877          okl_debug_pub.log_debug (g_level_procedure,
1878                                   l_module_name,
1879                                      'p_qtev_rec.trn_code : '
1880                                   || p_qtev_rec.trn_code
1881                                  );
1882          okl_debug_pub.log_debug (g_level_procedure,
1883                                   l_module_name,
1884                                   'p_qtev_rec.pdt_id : ' || p_qtev_rec.pdt_id
1885                                  );
1886          okl_debug_pub.log_debug (g_level_procedure,
1887                                   l_module_name,
1888                                      'p_qtev_rec.date_effective_from : '
1889                                   || p_qtev_rec.date_effective_from
1890                                  );
1891          okl_debug_pub.log_debug (g_level_procedure,
1892                                   l_module_name,
1893                                      'p_qtev_rec.quote_number : '
1894                                   || p_qtev_rec.quote_number
1895                                  );
1896          okl_debug_pub.log_debug (g_level_procedure,
1897                                   l_module_name,
1898                                      'p_qtev_rec.early_termination_yn : '
1899                                   || p_qtev_rec.early_termination_yn
1900                                  );
1901          okl_debug_pub.log_debug (g_level_procedure,
1902                                   l_module_name,
1903                                      'p_qtev_rec.partial_yn : '
1904                                   || p_qtev_rec.partial_yn
1905                                  );
1906          okl_debug_pub.log_debug (g_level_procedure,
1907                                   l_module_name,
1908                                      'p_qtev_rec.preproceeds_yn : '
1909                                   || p_qtev_rec.preproceeds_yn
1910                                  );
1911          okl_debug_pub.log_debug (g_level_procedure,
1912                                   l_module_name,
1913                                      'p_qtev_rec.summary_format_yn : '
1914                                   || p_qtev_rec.summary_format_yn
1915                                  );
1916          okl_debug_pub.log_debug (g_level_procedure,
1917                                   l_module_name,
1918                                      'p_qtev_rec.consolidated_yn : '
1919                                   || p_qtev_rec.consolidated_yn
1920                                  );
1921          okl_debug_pub.log_debug (g_level_procedure,
1922                                   l_module_name,
1923                                      'p_qtev_rec.date_requested : '
1924                                   || p_qtev_rec.date_requested
1925                                  );
1926          okl_debug_pub.log_debug (g_level_procedure,
1927                                   l_module_name,
1928                                      'p_qtev_rec.date_proposal : '
1929                                   || p_qtev_rec.date_proposal
1930                                  );
1931          okl_debug_pub.log_debug (g_level_procedure,
1932                                   l_module_name,
1933                                      'p_qtev_rec.date_effective_to : '
1934                                   || p_qtev_rec.date_effective_to
1935                                  );
1936          okl_debug_pub.log_debug (g_level_procedure,
1937                                   l_module_name,
1938                                      'p_qtev_rec.date_accepted : '
1939                                   || p_qtev_rec.date_accepted
1940                                  );
1941          okl_debug_pub.log_debug (g_level_procedure,
1942                                   l_module_name,
1943                                      'p_qtev_rec.payment_received_yn : '
1944                                   || p_qtev_rec.payment_received_yn
1945                                  );
1946          okl_debug_pub.log_debug (g_level_procedure,
1947                                   l_module_name,
1948                                      'p_qtev_rec.requested_by : '
1949                                   || p_qtev_rec.requested_by
1950                                  );
1951          okl_debug_pub.log_debug (g_level_procedure,
1952                                   l_module_name,
1953                                      'p_qtev_rec.approved_yn : '
1954                                   || p_qtev_rec.approved_yn
1955                                  );
1956          okl_debug_pub.log_debug (g_level_procedure,
1957                                   l_module_name,
1958                                      'p_qtev_rec.accepted_yn : '
1959                                   || p_qtev_rec.accepted_yn
1960                                  );
1961          okl_debug_pub.log_debug (g_level_procedure,
1962                                   l_module_name,
1963                                   'p_qtev_rec.org_id : ' || p_qtev_rec.org_id
1964                                  );
1965          okl_debug_pub.log_debug (g_level_procedure,
1966                                   l_module_name,
1967                                      'p_qtev_rec.purchase_amount : '
1968                                   || p_qtev_rec.purchase_amount
1969                                  );
1970          okl_debug_pub.log_debug (g_level_procedure,
1971                                   l_module_name,
1972                                      'p_qtev_rec.purchase_formula : '
1973                                   || p_qtev_rec.purchase_formula
1974                                  );
1975          okl_debug_pub.log_debug (g_level_procedure,
1976                                   l_module_name,
1977                                      'p_qtev_rec.asset_value : '
1978                                   || p_qtev_rec.asset_value
1979                                  );
1980          okl_debug_pub.log_debug (g_level_procedure,
1981                                   l_module_name,
1982                                      'p_qtev_rec.residual_value : '
1983                                   || p_qtev_rec.residual_value
1984                                  );
1985          okl_debug_pub.log_debug (g_level_procedure,
1986                                   l_module_name,
1987                                      'p_qtev_rec.unbilled_receivables : '
1988                                   || p_qtev_rec.unbilled_receivables
1989                                  );
1990          okl_debug_pub.log_debug (g_level_procedure,
1991                                   l_module_name,
1992                                      'p_qtev_rec.gain_loss : '
1993                                   || p_qtev_rec.gain_loss
1994                                  );
1995          okl_debug_pub.log_debug (g_level_procedure,
1996                                   l_module_name,
1997                                      'p_qtev_rec.PERDIEM_AMOUNT : '
1998                                   || p_qtev_rec.perdiem_amount
1999                                  );
2000          okl_debug_pub.log_debug (g_level_procedure,
2001                                   l_module_name,
2002                                      'p_qtev_rec.currency_code : '
2003                                   || p_qtev_rec.currency_code
2004                                  );
2005          okl_debug_pub.log_debug (g_level_procedure,
2006                                   l_module_name,
2007                                      'p_qtev_rec.currency_conversion_code : '
2008                                   || p_qtev_rec.currency_conversion_code
2009                                  );
2010          okl_debug_pub.log_debug (g_level_procedure,
2011                                   l_module_name,
2012                                      'p_qtev_rec.legal_entity_id : '
2013                                   || p_qtev_rec.legal_entity_id
2014                                  );
2015          okl_debug_pub.log_debug (g_level_procedure,
2016                                   l_module_name,
2017                                      'p_qtev_rec.repo_quote_indicator_yn : '
2018                                   || p_qtev_rec.repo_quote_indicator_yn
2019                                  );
2020       END IF;
2021 
2022       --Check API version, initialize message list and create savepoint.
2023       l_return_status :=
2024          okl_api.start_activity (l_api_name,
2025                                  g_pkg_name,
2026                                  p_init_msg_list,
2027                                  l_api_version,
2028                                  p_api_version,
2029                                  '_PVT',
2030                                  x_return_status
2031                                 );
2032 
2033       IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
2034          RAISE okl_api.g_exception_unexpected_error;
2035       ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
2036          RAISE okl_api.g_exception_error;
2037       END IF;
2038 
2039       -- initialize return variables
2040       x_return_status := okc_api.g_ret_sts_success;
2041 
2042       IF (is_debug_statement_on) THEN
2043          okl_debug_pub.log_debug (g_level_statement,
2044                                   l_module_name,
2045                                   'before  get_db_values '
2046                                  );
2047          okl_debug_pub.log_debug (g_level_statement,
2048                                   l_module_name,
2049                                   'l_return_status: ' || l_return_status
2050                                  );
2051       END IF;
2052 
2053       -- get the db values
2054       get_db_values (lp_qtev_rec.ID,
2055                      l_db_accepted_yn,
2056                      l_quote_number,
2057                      l_db_date_effective_from,
2058                      l_db_date_effective_to,
2059                      l_db_khr_id,
2060                      l_db_qtp_code,
2061                      l_return_status
2062                     );
2063 
2064       IF (is_debug_statement_on) THEN
2065          okl_debug_pub.log_debug (g_level_statement,
2066                                   l_module_name,
2067                                   'after  get_db_values '
2068                                  );
2069          okl_debug_pub.log_debug (g_level_statement,
2070                                   l_module_name,
2071                                   'l_return_status: ' || l_return_status
2072                                  );
2073       END IF;
2074 
2075       IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
2076          RAISE okc_api.g_exception_unexpected_error;
2077       ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
2078          RAISE okc_api.g_exception_error;
2079       END IF;
2080 
2081       IF (    (lp_qtev_rec.khr_id IS NOT NULL)
2082           AND (p_qtev_rec.khr_id <> okc_api.g_miss_num)
2083           AND (l_db_khr_id <> p_qtev_rec.khr_id)
2084          ) THEN
2085          okc_api.set_message (p_app_name          => 'OKC',
2086                               p_msg_name          => g_invalid_value,
2087                               p_token1            => g_col_name_token,
2088                               p_token1_value      => 'kle_id'
2089                              );
2090          RAISE g_exception_halt_validation;
2091       END IF;
2092 
2093       -- get the sysdate
2094       get_sysdate (l_db_date);
2095 
2096       -- IF qtp_code not null then check if valid
2097       IF     lp_qtev_rec.qtp_code IS NOT NULL
2098          AND lp_qtev_rec.qtp_code <> okl_api.g_miss_char
2099          AND lp_qtev_rec.qtp_code NOT LIKE 'REP_STANDARD' THEN
2100          -- Please select a valid Quote Type.
2101          okl_api.set_message (p_app_name      => okl_api.g_app_name,
2102                               p_msg_name      => 'OKL_AM_QTP_CODE_INVALID'
2103                              );
2104          RAISE g_exception_halt_validation;
2105       -- if qtp_code is null then get from db and check
2106       ELSIF     (   lp_qtev_rec.qtp_code IS NULL
2107                  OR lp_qtev_rec.qtp_code = okl_api.g_miss_char
2108                 )
2109             AND l_db_qtp_code NOT LIKE 'REP_STANDARD' THEN
2110          -- Please select a valid Quote Type.
2111          okl_api.set_message (p_app_name      => okl_api.g_app_name,
2112                               p_msg_name      => 'OKL_AM_QTP_CODE_INVALID'
2113                              );
2114          RAISE g_exception_halt_validation;
2115       END IF;
2116 
2117       -- Check if date_effective_to is NULL
2118       IF    lp_qtev_rec.date_effective_to IS NULL
2119          OR lp_qtev_rec.date_effective_to = okl_api.g_miss_date THEN
2120          -- You must enter a value for PROMPT
2121          okl_api.set_message
2122             (p_app_name          => okl_api.g_app_name,
2123              p_msg_name          => 'OKL_AM_REQ_FIELD_ERR',
2124              p_token1            => 'PROMPT',
2125              p_token1_value      => okl_am_util_pvt.get_ak_attribute
2126                                                            ('OKL_EFFECTIVE_TO')
2127             );
2128          RAISE g_exception_halt_validation;
2129       END IF;
2130 
2131       -- Get the date_eff_from from database if not passed
2132       IF     (lp_qtev_rec.date_effective_from IS NOT NULL)
2133          AND (lp_qtev_rec.date_effective_from <> okl_api.g_miss_date) THEN
2134          l_date_eff_from := lp_qtev_rec.date_effective_from;
2135       ELSE
2136          l_date_eff_from := l_db_date_effective_from;
2137       END IF;
2138 
2139       -- Check date_eff_to > date_eff_from
2140       IF     (l_date_eff_from IS NOT NULL)
2141          AND (l_date_eff_from <> okl_api.g_miss_date)
2142          AND (lp_qtev_rec.date_effective_to IS NOT NULL)
2143          AND (lp_qtev_rec.date_effective_to <> okl_api.g_miss_date) THEN
2144          IF (TRUNC (lp_qtev_rec.date_effective_to) <= TRUNC (l_date_eff_from)
2145             ) THEN
2146             -- Message : Date Effective To DATE_EFFECTIVE_TO cannot be before
2147             -- Date Effective From DATE_EFFECTIVE_FROM.
2148             okl_api.set_message
2149                             (p_app_name          => 'OKL',
2150                              p_msg_name          => 'OKL_AM_DATE_EFF_FROM_LESS_TO',
2151                              p_token1            => 'DATE_EFFECTIVE_TO',
2152                              p_token1_value      => lp_qtev_rec.date_effective_to,
2153                              p_token2            => 'DATE_EFFECTIVE_FROM',
2154                              p_token2_value      => l_date_eff_from
2155                             );
2156             RAISE g_exception_halt_validation;
2157          END IF;
2158       END IF;
2159 
2160       -- if date effective to changed then
2161       IF (    (lp_qtev_rec.date_effective_to IS NOT NULL)
2162           AND (lp_qtev_rec.date_effective_to <> okc_api.g_miss_date)
2163           AND (lp_qtev_rec.date_effective_to <> l_db_date_effective_to)
2164          ) THEN
2165          IF (is_debug_statement_on) THEN
2166             okl_debug_pub.log_debug (g_level_statement,
2167                                      l_module_name,
2168                                      'before  quote_effectivity '
2169                                     );
2170             okl_debug_pub.log_debug (g_level_statement,
2171                                      l_module_name,
2172                                      'l_return_status: ' || l_return_status
2173                                     );
2174          END IF;
2175 
2176          -- get the date eff to from rules
2177          quote_effectivity (p_contract_id             => l_db_khr_id,
2178                             x_quote_eff_days          => l_quote_eff_days,
2179                             x_quote_eff_max_days      => l_quote_eff_max_days,
2180                             x_return_status           => l_return_status
2181                            );
2182 
2183          IF (is_debug_statement_on) THEN
2184             okl_debug_pub.log_debug (g_level_statement,
2185                                      l_module_name,
2186                                      'after  quote_effectivity '
2187                                     );
2188             okl_debug_pub.log_debug (g_level_statement,
2189                                      l_module_name,
2190                                      'l_return_status: ' || l_return_status
2191                                     );
2192          END IF;
2193 
2194          IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
2195             RAISE okc_api.g_exception_unexpected_error;
2196          ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
2197             RAISE okc_api.g_exception_error;
2198          END IF;
2199 
2200          l_max_quote_eff_to_dt :=
2201                                l_db_date_effective_from + l_quote_eff_max_days;
2202 
2203          -- if max quote eff to date is less than sysdate then error
2204          IF (TRUNC (l_max_quote_eff_to_dt) < TRUNC (l_db_date)) THEN
2205             --Quote QUOTE_NUMBER is already expired.
2206             okl_api.set_message (p_app_name          => g_app_name,
2207                                  p_msg_name          => 'OKL_AM_QUOTE_ALREADY_EXP',
2208                                  p_token1            => g_quote_number_token,
2209                                  p_token1_value      => l_quote_number
2210                                 );
2211             RAISE g_exception_halt_validation;
2212          END IF;
2213 
2214          -- if date is less than sysdate then error
2215          IF (TRUNC (lp_qtev_rec.date_effective_to) < TRUNC (l_db_date)) THEN
2216             --Please enter an Effective To date that occurs after the current system date.
2217             okl_api.set_message (p_app_name      => g_app_name,
2218                                  p_msg_name      => 'OKL_AM_DATE_EFF_TO_PAST'
2219                                 );
2220             RAISE g_exception_halt_validation;
2221          END IF;
2222 
2223          -- if eff_to date > l_quote_eff_to_dt then err msg
2224          IF (TRUNC (lp_qtev_rec.date_effective_to) >
2225                                                  TRUNC (l_max_quote_eff_to_dt)
2226             ) THEN
2227             --Please enter Effective To date before DATE_EFF_TO_MAX.
2228             okl_api.set_message (p_app_name          => g_app_name,
2229                                  p_msg_name          => 'OKL_AM_DATE_EFF_TO_ERR',
2230                                  p_token1            => g_max_date_token,
2231                                  p_token1_value      => l_max_quote_eff_to_dt
2232                                 );
2233             RAISE g_exception_halt_validation;
2234          END IF;
2235       END IF;
2236 
2237       -- Accepted YN Flag Validation
2238       IF (    (lp_qtev_rec.accepted_yn IS NOT NULL)
2239           AND (lp_qtev_rec.accepted_yn <> okc_api.g_miss_char)
2240          ) THEN
2241          -- if accepting now then check that quote is still effective
2242          IF (l_db_accepted_yn = g_no) AND (lp_qtev_rec.accepted_yn = g_yes) THEN
2243             -- If date_eff_to is not passed
2244             IF (   (lp_qtev_rec.date_effective_to IS NULL)
2245                 OR (lp_qtev_rec.date_effective_to = okl_api.g_miss_date)
2246                ) THEN
2247                --Has quote expired
2248                IF TRUNC (l_db_date) > TRUNC (l_db_date_effective_to) THEN
2249                   --Quote QUOTE_NUMBER is already expired.
2250                   okl_api.set_message
2251                                    (p_app_name          => g_app_name,
2252                                     p_msg_name          => 'OKL_AM_QUOTE_ALREADY_EXP',
2253                                     p_token1            => g_quote_number_token,
2254                                     p_token1_value      => l_quote_number
2255                                    );
2256                   RAISE g_exception_halt_validation;
2257                ELSE
2258                   -- Do Acceptance steps
2259                   NULL;
2260                END IF;
2261             END IF;
2262          -- if already accepted and trying to change then raise error
2263          ELSIF     (l_db_accepted_yn = g_yes)
2264                AND (lp_qtev_rec.accepted_yn = g_no) THEN
2265             --Quote QUOTE_NUMBER is already accepted.
2266             okl_api.set_message (p_app_name          => g_app_name,
2267                                  p_msg_name          => 'OKL_AM_QUOTE_ALREADY_ACCP',
2268                                  p_token1            => g_quote_number_token,
2269                                  p_token1_value      => l_quote_number
2270                                 );
2271             RAISE g_exception_halt_validation;
2272          END IF;
2273       ELSIF (lp_qtev_rec.accepted_yn IS NULL) THEN
2274          lp_qtev_rec.accepted_yn := g_no;
2275       END IF;
2276 
2277       -- Set the qst_code to ACCEPTED if the quote is accepted now
2278       IF (lp_qtev_rec.accepted_yn = g_yes AND l_db_accepted_yn = g_no) THEN
2279          lp_qtev_rec.qst_code := 'ACCEPTED';
2280          lp_qtev_rec.date_accepted := l_db_date;
2281       END IF;
2282 
2283       IF (is_debug_statement_on) THEN
2284          okl_debug_pub.log_debug
2285                               (g_level_statement,
2286                                l_module_name,
2287                                'before  OKL_TRX_QUOTES_PUB.update_trx_quotes'
2288                               );
2289          okl_debug_pub.log_debug (g_level_statement,
2290                                   l_module_name,
2291                                   'l_return_status: ' || l_return_status
2292                                  );
2293       END IF;
2294 
2295       -- update the quote
2296       okl_trx_quotes_pub.update_trx_quotes
2297                                           (p_api_version        => p_api_version,
2298                                            p_init_msg_list      => p_init_msg_list,
2299                                            x_return_status      => l_return_status,
2300                                            x_msg_count          => x_msg_count,
2301                                            x_msg_data           => x_msg_data,
2302                                            p_qtev_rec           => lp_qtev_rec,
2303                                            x_qtev_rec           => lx_qtev_rec
2304                                           );
2305 
2306       IF (is_debug_statement_on) THEN
2307          okl_debug_pub.log_debug
2308                                (g_level_statement,
2309                                 l_module_name,
2310                                 'after  OKL_TRX_QUOTES_PUB.update_trx_quotes'
2311                                );
2312          okl_debug_pub.log_debug (g_level_statement,
2313                                   l_module_name,
2314                                   'l_return_status: ' || l_return_status
2315                                  );
2316       END IF;
2317 
2318       IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
2319          RAISE okc_api.g_exception_unexpected_error;
2320       ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
2321          RAISE okc_api.g_exception_error;
2322       END IF;
2323 
2324       -- update lines if necessary
2325       IF (lp_tqlv_tbl.COUNT > 0) THEN
2326          -- rmunjulu Sales_Tax_Enhancement
2327          j := 1;
2328 
2329          -- rmunjulu Sales_Tax_Enhancement -- Do not take tax quote line for update as that does not have the ID
2330          FOR i IN lp_tqlv_tbl.FIRST .. lp_tqlv_tbl.LAST
2331          LOOP
2332             IF     (    lp_tqlv_tbl (i).ID IS NOT NULL
2333                     AND lp_tqlv_tbl (i).ID <> okl_api.g_miss_num
2334                    )
2335                AND lp_tqlv_tbl (i).qlt_code <> 'AMCTAX' THEN
2336                llp_tqlv_tbl (j) := lp_tqlv_tbl (i);
2337                j := j + 1;
2338             END IF;
2339          END LOOP;
2340 
2341          IF (is_debug_statement_on) THEN
2342             okl_debug_pub.log_debug
2343                      (g_level_statement,
2344                       l_module_name,
2345                       'before OKL_TXL_QUOTE_LINES_PUB.update_txl_quote_lines'
2346                      );
2347             okl_debug_pub.log_debug (g_level_statement,
2348                                      l_module_name,
2349                                      'l_return_status: ' || l_return_status
2350                                     );
2351          END IF;
2352 
2353          -- update the quote lines
2354          okl_txl_quote_lines_pub.update_txl_quote_lines
2355                   (p_api_version        => p_api_version,
2356                    p_init_msg_list      => p_init_msg_list,
2357                    x_return_status      => l_return_status,
2358                    x_msg_count          => x_msg_count,
2359                    x_msg_data           => x_msg_data,
2360                    p_tqlv_tbl           => llp_tqlv_tbl,
2361                                               --rmunjulu Sales_Tax_Enhancement
2362                    x_tqlv_tbl           => lx_tqlv_tbl
2363                   );
2364 
2365          IF (is_debug_statement_on) THEN
2366             okl_debug_pub.log_debug
2367                      (g_level_statement,
2368                       l_module_name,
2369                       'after  OKL_TXL_QUOTE_LINES_PUB.update_txl_quote_lines'
2370                      );
2371             okl_debug_pub.log_debug (g_level_statement,
2372                                      l_module_name,
2373                                      'l_return_status: ' || l_return_status
2374                                     );
2375          END IF;
2376 
2377          IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
2378             RAISE okc_api.g_exception_unexpected_error;
2379          ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
2380             RAISE okc_api.g_exception_error;
2381          END IF;
2382       END IF;
2383 
2384       IF (is_debug_statement_on) THEN
2385          okl_debug_pub.log_debug
2386                                (g_level_statement,
2387                                 l_module_name,
2388                                 'after  OKL_TRX_QUOTES_PUB.update_trx_quotes'
2389                                );
2390          okl_debug_pub.log_debug (g_level_statement,
2391                                   l_module_name,
2392                                   'l_return_status: ' || l_return_status
2393                                  );
2394       END IF;
2395 
2396       -- rmunjulu Sales_Tax_Enhancement
2397       -- Call the new OKL Tax engine to RECALCULATE tax for all quote lines
2398       IF (is_debug_statement_on) THEN
2399          okl_debug_pub.log_debug
2400                      (g_level_statement,
2401                       l_module_name,
2402                       'before  OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax'
2403                      );
2404          okl_debug_pub.log_debug (g_level_statement,
2405                                   l_module_name,
2406                                   'l_return_status: ' || l_return_status
2407                                  );
2408       END IF;
2409 
2410       okl_process_sales_tax_pub.calculate_sales_tax
2411                       (p_api_version          => l_api_version,
2412                        p_init_msg_list        => okl_api.g_false,
2413                        x_return_status        => l_return_status,
2414                        x_msg_count            => x_msg_count,
2415                        x_msg_data             => x_msg_data,
2416                        p_source_trx_id        => lp_qtev_rec.ID,
2417                                                          -- TRX_ID is QUOTE_ID
2418                        p_source_trx_name      => 'Estimated Billing',
2419                        p_source_table         => 'OKL_TRX_QUOTES_B'
2420                       );                   -- SOURCE_TABLE IS OKL_TRX_QUOTES_B
2421 
2422       IF (is_debug_statement_on) THEN
2423          okl_debug_pub.log_debug
2424                       (g_level_statement,
2425                        l_module_name,
2426                        'after  OKL_PROCESS_SALES_TAX_PUB.calculate_sales_tax'
2427                       );
2428          okl_debug_pub.log_debug (g_level_statement,
2429                                   l_module_name,
2430                                   'l_return_status: ' || l_return_status
2431                                  );
2432       END IF;
2433 
2434       IF (l_return_status <> okl_api.g_ret_sts_success) THEN
2435          -- Tax Processing failed.
2436          okl_api.set_message (p_app_name      => g_app_name,
2437                               p_msg_name      => 'OKL_AM_PROCESS_TAX_ERR'
2438                              );
2439       END IF;
2440 
2441       -- raise exception if error
2442       IF (l_return_status = okc_api.g_ret_sts_unexp_error) THEN
2443          RAISE okc_api.g_exception_unexpected_error;
2444       ELSIF (l_return_status = okc_api.g_ret_sts_error) THEN
2445          RAISE okc_api.g_exception_error;
2446       END IF;
2447 
2448       -- raise repurchase quote workflow if the quote is accepted now
2449       IF (lp_qtev_rec.accepted_yn = g_yes AND l_db_accepted_yn = g_no) THEN
2450          -- Raise Repurchase Quote WorkFlow event
2451          okl_am_wf.raise_business_event (p_transaction_id      => lp_qtev_rec.ID,
2452                                          p_event_name          => l_event_name
2453                                         );
2454          -- Get the event name
2455          l_event_desc :=
2456             okl_am_util_pvt.get_wf_event_name
2457                                        (p_wf_process_type      => 'OKLAMRAC',
2458                                         p_wf_process_name      => 'REPUR_QTE_PROC',
2459                                         x_return_status        => l_return_status
2460                                        );
2461 
2462          -- raise exception if error
2463          IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
2464             RAISE okc_api.g_exception_unexpected_error;
2465          ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
2466             RAISE okc_api.g_exception_error;
2467          END IF;
2468 
2469          -- Set message on stack
2470          -- Workflow event EVENT_NAME has been requested.
2471          okl_api.set_message (p_app_name          => g_app_name,
2472                               p_msg_name          => 'OKL_AM_WF_EVENT_MSG',
2473                               p_token1            => 'EVENT_NAME',
2474                               p_token1_value      => l_event_desc
2475                              );
2476          -- Save message from stack into transaction message table
2477          okl_am_util_pvt.process_messages
2478                                     (p_trx_source_table      => 'OKL_TRX_QUOTES_V',
2479                                      p_trx_id                => lp_qtev_rec.ID,
2480                                      x_return_status         => l_return_status
2481                                     );
2482 
2483          -- raise exception if error
2484          IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
2485             RAISE okc_api.g_exception_unexpected_error;
2486          ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
2487             RAISE okc_api.g_exception_error;
2488          END IF;
2489       END IF;
2490 
2491       -- set the return status and out variables
2492       x_return_status := l_return_status;
2493       x_qtev_rec := lx_qtev_rec;
2494       x_tqlv_tbl := lx_tqlv_tbl;
2495       -- end the transaction
2496       okc_api.end_activity (x_msg_count, x_msg_data);
2497 
2498       IF (is_debug_procedure_on) THEN
2499          okl_debug_pub.log_debug (g_level_procedure, l_module_name, 'End(-)');
2500       END IF;
2501    EXCEPTION
2502       WHEN g_exception_halt_validation THEN
2503          x_return_status := okc_api.g_ret_sts_error;
2504       WHEN okc_api.g_exception_error THEN
2505          x_return_status :=
2506             okc_api.handle_exceptions (l_api_name,
2507                                        g_pkg_name,
2508                                        'OKC_API.G_RET_STS_ERROR',
2509                                        x_msg_count,
2510                                        x_msg_data,
2511                                        '_PVT'
2512                                       );
2513       WHEN okc_api.g_exception_unexpected_error THEN
2514          x_return_status :=
2515             okc_api.handle_exceptions (l_api_name,
2516                                        g_pkg_name,
2517                                        'OKC_API.G_RET_STS_UNEXP_ERROR',
2518                                        x_msg_count,
2519                                        x_msg_data,
2520                                        '_PVT'
2521                                       );
2522       WHEN OTHERS THEN
2523          x_return_status :=
2524             okc_api.handle_exceptions (l_api_name,
2525                                        g_pkg_name,
2526                                        'OTHERS',
2527                                        x_msg_count,
2528                                        x_msg_data,
2529                                        '_PVT'
2530                                       );
2531    END update_repurchase_quote;
2532 END okl_am_repurchase_asset_pvt;