DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_AM_QUOTES_WF

Source


1 PACKAGE BODY OKL_AM_QUOTES_WF AS
2 /* $Header: OKLRQWFB.pls 120.27 2011/08/26 19:01:47 gkadarka ship $ */
3 
4 -- GLOBAL VARIABLES
5   G_LEVEL_PROCEDURE             CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
6   G_LEVEL_STATEMENT             CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
7   G_LEVEL_EXCEPTION             CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
8   G_MODULE_NAME                 CONSTANT VARCHAR2(500) := 'okl.am.plsql.okl_am_create_quote_pvt.';
9 
10   -- Start of comments
11   --
12   -- Procedure Name : raise_pre_proceeds_event
13   -- Description   : Not required once the raise event is done from okl_am_wf
14   -- Business Rules :
15   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
16   -- Version      : 1.0
17   --
18   -- End of comments
19   PROCEDURE raise_pre_proceeds_event (
20                                    p_transaction_id   IN VARCHAR2) AS
21 
22     l_parameter_list        wf_parameter_list_t;
23     l_key                   VARCHAR2(240);
24     l_event_name            VARCHAR2(240) := 'oracle.apps.okl.am.preproceeds';
25     l_seq                   NUMBER;
26 
27     -- Cursor to get the value of the sequence
28    CURSOR okl_key_csr IS
29    SELECT okl_wf_item_s.nextval
30    FROM   DUAL;
31 -- for debug logging
32     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'raise_pre_proceeds_event';
33     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
34     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
35   BEGIN
36 
37    IF (is_debug_procedure_on) THEN
38        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
39    END IF;
40 
41     SAVEPOINT raise_pre_proceeds_event;
42 
43    OPEN  okl_key_csr;
44    FETCH okl_key_csr INTO l_seq;
45    CLOSE okl_key_csr;
46 
47     l_key := l_event_name ||l_seq ;
48 
49     WF_EVENT.AddParameterToList('TRANSACTION_ID',
50                                 p_transaction_id,
51                                 l_parameter_list);
52     --added by akrangan
53     wf_event.AddParameterToList('ORG_ID',mo_global.get_current_org_id ,l_parameter_list);
54     -- Raise Event
55     WF_EVENT.raise(
56                  p_event_name  => l_event_name,
57                  p_event_key   => l_key,
58                  p_parameters  => l_parameter_list);
59 
60     l_parameter_list.DELETE;
61 
62    IF (is_debug_procedure_on) THEN
63        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
64    END IF;
65 
66   EXCEPTION
67     WHEN OTHERS THEN
68         IF (is_debug_exception_on) THEN
69             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
70                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
71         END IF;
72 
73       FND_MESSAGE.SET_NAME('OKL', 'OKL_API_OTHERS_EXCEP');
74       FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
75       FND_MSG_PUB.ADD;
76       IF okl_key_csr%ISOPEN THEN
77          CLOSE okl_key_csr;
78       END IF;
79       ROLLBACK TO raise_pre_proceeds_event;
80   END raise_pre_proceeds_event;
81 
82   -- Start of comments
83   --
84   -- Procedure Name : raise_repurchase_quote_event
85   -- Description   : Not required once the raise event is done from okl_am_wf
86   -- Business Rules :
87   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
88   -- Version      : 1.0
89   --
90   -- End of comments
91   PROCEDURE raise_repurchase_quote_event (
92                                    p_transaction_id   IN VARCHAR2) AS
93 
94     l_parameter_list      wf_parameter_list_t;
95     l_key                 VARCHAR2(240);
96     l_event_name          VARCHAR2(240) := 'oracle.apps.okl.am.repurchasequote';
97     l_seq                 NUMBER;
98 
99     -- Cursor to get the value of the sequence
100    CURSOR okl_key_csr IS
101    SELECT okl_wf_item_s.nextval
102    FROM   DUAL;
103 
104 -- for debug logging
105     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'raise_repurchase_quote_event';
106     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
107     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
108 
109 
110   BEGIN
111 
112    IF (is_debug_procedure_on) THEN
113        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
114    END IF;
115 
116     SAVEPOINT raise_repurchase_quote_event;
117 
118    OPEN  okl_key_csr;
119    FETCH okl_key_csr INTO l_seq;
120    CLOSE okl_key_csr;
121 
122     l_key := l_event_name ||l_seq ;
123 
124     WF_EVENT.AddParameterToList('TRANSACTION_ID',
125                                 p_transaction_id,
126                                 l_parameter_list);
127     wf_event.AddParameterToList('ORG_ID',mo_global.get_current_org_id ,l_parameter_list);
128     -- Raise Event
129     WF_EVENT.raise(
130                  p_event_name  => l_event_name,
131                  p_event_key   => l_key,
132                  p_parameters  => l_parameter_list);
133 
134     l_parameter_list.DELETE;
135 
136    IF (is_debug_procedure_on) THEN
137        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
138    END IF;
139 
140   EXCEPTION
141     WHEN OTHERS THEN
142         IF (is_debug_exception_on) THEN
143             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
144                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
145         END IF;
146 
147       FND_MESSAGE.SET_NAME('OKL', 'OKL_API_OTHERS_EXCEP');
148       FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
149       FND_MSG_PUB.ADD;
150       IF okl_key_csr%ISOPEN THEN
151          CLOSE okl_key_csr;
152       END IF;
153       ROLLBACK TO raise_repurchase_quote_event;
154   END raise_repurchase_quote_event;
155 
156 
157   -- Start of comments
158   --
159   -- Procedure Name : chk_pre_proceeds_qte_partial
160   -- Description   : Checks if the quote is a partial quote or not
161   -- Business Rules :
162   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
163   -- Version      : 1.0
164   --
165   -- End of comments
166   PROCEDURE chk_pre_proceeds_qte_partial(
167                                 itemtype IN  VARCHAR2,
168                             itemkey   IN  VARCHAR2,
169                              actid    IN  NUMBER,
170                             funcmode IN  VARCHAR2,
171                             resultout OUT NOCOPY VARCHAR2) IS
172 
173     -- Get the assets for the contract
174    -- nikshah -- Bug # 5484903 Fixed,
175    -- Changed CURSOR get_assets_in_k_csr SQL definition
176     CURSOR get_assets_in_k_csr (p_qte_id IN NUMBER) IS
177       SELECT kle.id asset_id
178       FROM   OKC_K_LINES_B    kle,
179                   OKC_LINE_STYLES_B LSEB,
180              OKL_TRX_QUOTES_B           qte
181       WHERE  kle.chr_id = qte.khr_id
182         AND kle.STS_CODE <> 'ABANDONED'
183  AND KLE.LSE_ID = LSEB.ID
184  AND LSEB.LTY_CODE = 'FREE_FORM1'
185         AND  qte.id = p_qte_id;
186 
187     -- get the assets in the quote
188     CURSOR get_assets_in_qte_csr ( p_qte_id IN NUMBER) IS
189       SELECT kle.id kle_id
190       FROM   OKL_AM_ASSET_LINES_UV kle
191       WHERE  kle.qte_id        = p_qte_id;
192 
193     -- Get the number of assets for the contract
194   -- nikshah -- Bug # 5484903 Fixed,
195   -- Changed CURSOR get_k_assets_no_csr SQL definition
196     CURSOR get_k_assets_no_csr ( p_qte_id IN NUMBER) IS
197       SELECT COUNT(KLE.id) CONTRACT_ASSETS
198       FROM   OKC_K_LINES_B    kle,
199                   OKC_LINE_STYLES_B LSEB,
200              OKL_TRX_QUOTES_B           qte
201       WHERE  kle.chr_id = qte.khr_id
202         AND kle.STS_CODE <> 'ABANDONED'
203  AND KLE.LSE_ID = LSEB.ID
204         AND LSEB.LTY_CODE = 'FREE_FORM1'
205         AND  qte.id = p_qte_id;
206 
207     -- get the number of assets in the quote
208     CURSOR get_q_assets_no_csr ( p_qte_id IN NUMBER) IS
209       SELECT COUNT(KLE.id) QUOTE_ASSETS
210       FROM   OKL_AM_ASSET_LINES_UV kle
211       WHERE  kle.qte_id        = p_qte_id;
212 
213     l_trx_id        VARCHAR2(2000);
214     l_assets_match  VARCHAR2(1);
215     l_k_assets      NUMBER := -999;
216     l_q_assets      NUMBER := -9999;
217 
218 -- for debug logging
219     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_pre_proceeds_qte_partial';
220     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
221     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
222     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
223 
224   BEGIN
225 
226    IF (is_debug_procedure_on) THEN
227        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
228    END IF;
229 
230     --
231     -- RUN mode
232     --
233     IF (funcmode = 'RUN') THEN
234 
235       l_trx_id := WF_ENGINE.GetItemAttrText(
236                                  itemtype => itemtype,
237                                itemkey => itemkey,
238                                aname   => 'TRANSACTION_ID');
239 
240       -- Get number of assets in contract
241       OPEN get_k_assets_no_csr ( TO_NUMBER(l_trx_id));
242       FETCH get_k_assets_no_csr INTO l_k_assets;
243       CLOSE get_k_assets_no_csr;
244 
245       -- Get number of assets in quote
246       OPEN get_q_assets_no_csr ( TO_NUMBER(l_trx_id));
247       FETCH get_q_assets_no_csr INTO l_q_assets;
248       CLOSE get_q_assets_no_csr;
249 
250       -- If the number of assets in contract does not match with number in qte then qte partial
251       IF NVL(l_k_assets,-999) <> NVL(l_q_assets,-9999) THEN
252 
253         resultout := 'COMPLETE:QUOTE_PARTIAL';
254         RETURN ;
255 
256       ELSE
257 
258         -- For each asset in quote check if exists in contract
259         FOR get_assets_in_qte_rec IN get_assets_in_qte_csr(TO_NUMBER(l_trx_id)) LOOP
260            l_assets_match := 'N';
261            FOR get_assets_in_k_rec IN get_assets_in_k_csr(TO_NUMBER(l_trx_id)) LOOP
262              IF get_assets_in_k_rec.asset_id = get_assets_in_qte_rec.kle_id THEN
263                l_assets_match := 'Y';
264                EXIT;
265              END IF;
266            END LOOP;
267            -- If any one asset in quote not found in contract then error
268            IF l_assets_match = 'N' THEN
269              resultout := 'COMPLETE:QUOTE_PARTIAL';
270              RETURN ;
271            END IF;
272         END LOOP;
273 
274       END IF;
275 
276       resultout := 'COMPLETE:QUOTE_FULL';
277       RETURN ;
278 
279     END IF;
280 
281     --
282     -- CANCEL mode
283     --
284     IF (funcmode = 'CANCEL') THEN
285       --
286       resultout := 'COMPLETE:';
287       RETURN;
288       --
289     END IF;
290 
291     --
292     -- TIMEOUT mode
293     --
294     IF (funcmode = 'TIMEOUT') THEN
295       --
296       resultout := 'COMPLETE:';
297       RETURN;
298       --
299     END IF;
300 
301    IF (is_debug_procedure_on) THEN
302        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
303    END IF;
304 
305   EXCEPTION
306      WHEN G_EXCEPTION THEN
307         IF (is_debug_exception_on) THEN
308             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
309         END IF;
310 
311         IF get_k_assets_no_csr%ISOPEN THEN
312          CLOSE get_k_assets_no_csr;
313         END IF;
314 
315         IF get_q_assets_no_csr%ISOPEN THEN
316          CLOSE get_q_assets_no_csr;
317         END IF;
318 
319         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_qte_partial',
320                         itemtype, itemkey, actid, funcmode);
321         RAISE;
322      WHEN OTHERS THEN
323         IF (is_debug_exception_on) THEN
324             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
325                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
326         END IF;
327 
328         IF get_k_assets_no_csr%ISOPEN THEN
329          CLOSE get_k_assets_no_csr;
330         END IF;
331 
332         IF get_q_assets_no_csr%ISOPEN THEN
333          CLOSE get_q_assets_no_csr;
334         END IF;
335 
336         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_qte_partial',
337                         itemtype, itemkey, actid, funcmode);
338         RAISE;
339   END chk_pre_proceeds_qte_partial;
340 
341   -- Start of comments
342   --
343   -- Procedure Name : pop_pre_proceeds_att
344   -- Description    : Get and set for pre-proceeds item attributes
345   -- Business Rules :
346   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
347   -- Version        : 1.0
348   -- History        : PAGARG Bug# 4012492 Issue with message if there are too
349   --                : many assets
350   -- End of comments
351   PROCEDURE pop_pre_proceeds_att(
352                                 itemtype IN  VARCHAR2,
353                             itemkey   IN  VARCHAR2,
354                              actid    IN  NUMBER,
355                             funcmode IN  VARCHAR2,
356                             resultout OUT NOCOPY VARCHAR2) IS
357 
358     -- Cursor to get the pre-proceeds attribute details
359     CURSOR okl_pop_pre_proceeds_csr(p_quote_id IN NUMBER) IS
360    SELECT K.id,
361            K.contract_number,
362            Q.last_updated_by,
363            Q.created_by
364    FROM   OKL_TRX_QUOTES_V        Q,
365            OKL_K_HEADERS_FULL_V    K
366     WHERE  Q.khr_id = K.id
367     AND    Q.id     = p_quote_id;
368 
369     --PAGARG Bug# 4012492
370     --Modified the cursor to query contract number instead of asset details of quote
371     -- cursor to populate approval attributes
372     CURSOR okl_approval_quote_csr(p_id IN NUMBER) IS
373     SELECT TO_CHAR(sysdate, 'MM-DD-YYYY') system_date,
374            TRQ.quote_number               quote_number,
375            TRQ.date_effective_to          effective_to,
376            QTE.amount                     quote_total,
377            OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_TYPE',TRQ.qtp_code,'N') quote_type,
378            TRQ.creation_date              quote_creation_date,
379            OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_REASON',TRQ.qrs_code,'N') quote_reason,
380            OKL_AM_UTIL_PVT.get_chr_currency(TRQ.khr_id) currency,
381            TRQ.comments                   comments,
382            KHR.contract_number            contract_number,
383            TRQ.last_updated_by            last_updated_by
384     FROM   OKC_K_HEADERS_B  KHR,
385            OKL_TRX_QUOTES_V TRQ,
386            (SELECT SUM(NVL(amount,0)) amount, qte_id FROM OKL_TXL_QUOTE_LINES_V GROUP BY qte_id) QTE
387     WHERE  KHR.id           = TRQ.khr_id
388     AND    QTE.qte_id       = TRQ.id
389     AND    TRQ.id           = p_id;
390 
391     l_trx_id              NUMBER;
392     l_pre_proceeds_rec    okl_pop_pre_proceeds_csr%ROWTYPE;
393     l_no_data_found      BOOLEAN;
394     l_user                WF_USERS.NAME%TYPE;
395     l_message             VARCHAR2(30000);
396     l_header_done         BOOLEAN := FALSE;
397     l_updated_by          NUMBER;
398     l_comments            VARCHAR2(30000);
399     l_requestor           VARCHAR2(200);
400     l_description         VARCHAR2(200);
401     l_formatted_qte_tot   VARCHAR2(2000);
402 
403 -- for debug logging
404     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_pre_proceeds_att';
405     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
406     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
407     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
408 
409   BEGIN
410 
411    IF (is_debug_procedure_on) THEN
412        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
413    END IF;
414 
415     --
416     -- RUN mode
417     --
418     IF (funcmode = 'RUN') THEN
419 
420       l_trx_id := WF_ENGINE.GetItemAttrText(
421                                  itemtype => itemtype,
422                                itemkey => itemkey,
423                                aname   => 'TRANSACTION_ID');
424 
425       OPEN  okl_pop_pre_proceeds_csr(l_trx_id);
426      FETCH okl_pop_pre_proceeds_csr INTO l_pre_proceeds_rec;
427      CLOSE okl_pop_pre_proceeds_csr;
428 
429       -- Set the contract details to the item attributes of WF
430       WF_ENGINE.SetItemAttrNumber(
431                                 itemtype => itemtype,
432                             itemkey  => itemkey,
433                             aname    => 'CONTRACT_ID',
434                                 avalue   => l_pre_proceeds_rec.id);
435 
436       WF_ENGINE.SetItemAttrText(
437                                 itemtype => itemtype,
438                             itemkey  => itemkey,
439                             aname    => 'CONTRACT_NUMBER',
440                                 avalue   => l_pre_proceeds_rec.contract_number);
441 
442       -- MDOKAL, 21-MAR-2003 Bug 2862254
443       WF_ENGINE.SetItemAttrText(
444                                 itemtype => itemtype,
445                     itemkey  => itemkey,
446                     aname    => 'MESSAGE_DOC',
447                               avalue   => 'plsql:okl_am_quotes_wf.pop_oklamppt_doc/'||itemkey);
448 
449       -- get the requestor
450       OKL_AM_WF.GET_NOTIFICATION_AGENT(
451            itemtype        => itemtype,
452            itemkey         => itemkey,
453            actid           => actid,
454            funcmode        => funcmode,
455            p_user_id       => l_pre_proceeds_rec.last_updated_by,
456            x_name          => l_requestor,
457            x_description   => l_description);
458 
459       WF_ENGINE.SetItemAttrText(
460                                 itemtype => itemtype,
461                             itemkey  => itemkey,
462                             aname    => 'REQUESTER',
463                                 avalue   => l_requestor);
464 
465       WF_ENGINE.SetItemAttrText(
466                                 itemtype => itemtype,
467                             itemkey  => itemkey,
468                             aname    => 'WF_ADMINISTRATOR',
469                                 avalue   => l_requestor);
470 
471       WF_ENGINE.SetItemAttrNumber(
472                                 itemtype => itemtype,
473                             itemkey  => itemkey,
474                             aname    => 'CREATED_BY',
475                                 avalue   => l_pre_proceeds_rec.last_updated_by);
476 
477       ---OKL AM Termination Quote Pre-Proceeds
478       WF_ENGINE.SetItemAttrText (
479                                 itemtype => itemtype,
480                             itemkey  => itemkey,
481                             aname    => 'TRX_TYPE_ID',
482                                 avalue   => 'OKLAMPPT');
483 
484       -- Set the Quote ID
485       WF_ENGINE.SetItemAttrNumber(
486                                 itemtype => itemtype,
487                             itemkey  => itemkey,
488                             aname    => 'QUOTE_ID',
489                                 avalue   => l_trx_id);
490 
491       /*  MESSAGE
492 
493       Quote Number: <<Quote Number>>
494       Quote Type: <<Quote Type>>
495       Quote Effective To Date: <<Effective To>>
496       Total: <<Quote Total>> <<Currency>>
497 
498       A PreProceeds Termination was requested for contract <<Contract Number>> on
499       <<Quote Creation Date>> for the following reason: <<Quote Reason>>.
500 
501       -----------------------------------------------------------------------------
502       Asset Number   |   Asset Description  |  Model         |   Serial Number    |
503       -----------------------------------------------------------------------------
504       <<Asset Number>> <<Asset Description>> <<Model Number>> <<Serial Number>>  |
505       -----------------------------------------------------------------------------
506 
507       Comments:
508       <<Comments>>
509      */
510 
511       -- PAGARG Bug# 4012492
512       -- message is now changed and will not have asset details
513       --build message
514       FOR l_quote_rec in okl_approval_quote_csr(l_trx_id) LOOP
515 
516         IF NOT l_header_done THEN
517 
518           l_formatted_qte_tot :=  OKL_ACCOUNTING_UTIL.format_amount(
519                                                         l_quote_rec.quote_total,
520                                                         l_quote_rec.currency);
521           l_message  :=
522                       '<p>Quote Number: '||l_quote_rec.quote_number||'<br>'||
523                       'Quote Type: '||l_quote_rec.quote_type||'<br>'||
524                       'Quote Effective To Date: '||l_quote_rec.effective_to||'<br>'||
525                       'Total: '||l_formatted_qte_tot|| ' ' ||l_quote_rec.currency|| '<br></p>'||
526                       '<p> A PreProceeds Termination was requested for contract '||
527                       l_quote_rec.contract_number||' on '||l_quote_rec.quote_creation_date||
528                       ' for the following reason: '||l_quote_rec.quote_reason||'<br>'||'</p>';
529 
530            l_header_done := TRUE;
531            l_comments    := l_quote_rec.comments;
532         END IF;
533 
534       END LOOP;
535 
536       IF l_header_done THEN
537          --PAGARG Bug# 4012492
538          l_message  := l_message||'<p>Comments:<br>'||
539                        l_comments||'</p>';
540       ELSE
541          l_message := '';
542       END IF;
543 
544       -- Set the message
545       WF_ENGINE.SetItemAttrText (
546                                 itemtype => itemtype,
547                             itemkey  => itemkey,
548                             aname    => 'MESSAGE_DESCRIPTION',
549                                 avalue   => l_message);
550       resultout := 'COMPLETE:Y';
551 
552       RETURN ;
553 
554     END IF;
555 
556     --
557     -- CANCEL mode
558     --
559     IF (funcmode = 'CANCEL') THEN
560       --
561       resultout := 'COMPLETE:';
562       RETURN;
563       --
564     END IF;
565 
566     --
567     -- TIMEOUT mode
568     --
569     IF (funcmode = 'TIMEOUT') THEN
570       --
571       resultout := 'COMPLETE:';
572       RETURN;
573       --
574     END IF;
575 
576 
577    IF (is_debug_procedure_on) THEN
578        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
579    END IF;
580 
581   EXCEPTION
582 
583      WHEN OTHERS THEN
584         IF (is_debug_exception_on) THEN
585             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
586                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
587         END IF;
588 
589 	IF okl_pop_pre_proceeds_csr%ISOPEN THEN
590            CLOSE okl_pop_pre_proceeds_csr;
591         END IF;
592         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pop_pre_proceeds_att',
593                         itemtype, itemkey, actid, funcmode);
594         RAISE;
595   END pop_pre_proceeds_att;
596 
597 
598   -- Start of comments
599   --
600   -- Procedure Name : reset_pre_proceeds_att
601   -- Description   : Reset Pre/Post Proceeds attributes from quote_id
602   -- Business Rules :
603   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
604   -- Version      : 1.0
605   --
606   -- End of comments
607   PROCEDURE reset_pre_proceeds_att(
608                                 itemtype IN  VARCHAR2,
609                             itemkey   IN  VARCHAR2,
610                              actid    IN  NUMBER,
611                             funcmode IN  VARCHAR2,
612                             resultout OUT NOCOPY VARCHAR2) IS
613 
614     l_quote_id NUMBER;
615 -- for debug logging
616     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'reset_pre_proceeds_att';
617     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
618     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
619     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
620 
621   BEGIN
622 
623    IF (is_debug_procedure_on) THEN
624        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
625    END IF;
626 
627     --
628     -- RUN mode
629     --
630     IF (funcmode = 'RUN') THEN
631 
632       -- Get the Quote ID
633       l_quote_id := WF_ENGINE.GetItemAttrNumber(
634                                  itemtype => itemtype,
635                                itemkey => itemkey,
636                                aname   => 'QUOTE_ID');
637 
638       -- Set the Transaction ID
639       WF_ENGINE.SetItemAttrText(
640                                 itemtype => itemtype,
641                             itemkey  => itemkey,
642                             aname    => 'TRANSACTION_ID',
643                                 avalue   => l_quote_id);
644 
645       -- Set the EMAIL_ADDRESS to NULL
646       WF_ENGINE.SetItemAttrText(
647                                 itemtype => itemtype,
648                             itemkey  => itemkey,
649                             aname    => 'EMAIL_ADDRESS',
650                                 avalue   => NULL);
651 
652       -- Set the other parameters
653       pop_pre_proceeds_att(
654                   itemtype => itemtype,
655                   itemkey   => itemkey,
656                   actid    => actid,
657                  funcmode => funcmode,
658                   resultout => resultout);
659 
660       resultout := 'COMPLETE:Y';
661 
662       RETURN ;
663 
664     END IF;
665 
666     --
667     -- CANCEL mode
668     --
669     IF (funcmode = 'CANCEL') THEN
670       --
671       resultout := 'COMPLETE:';
672       RETURN;
673       --
674     END IF;
675 
676     --
677     -- TIMEOUT mode
678     --
679     IF (funcmode = 'TIMEOUT') THEN
680       --
681       resultout := 'COMPLETE:';
682       RETURN;
683       --
684     END IF;
685 
686 
687    IF (is_debug_procedure_on) THEN
688        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
689    END IF;
690 
691   EXCEPTION
692 
693      WHEN OTHERS THEN
694              IF (is_debug_exception_on) THEN
695             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
696                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
697         END IF;
698 
699         WF_CORE.context('OKL_AM_QUOTES_WF' , 'reset_pre_proceeds_att',
700                         itemtype, itemkey, actid, funcmode);
701         RAISE;
702   END reset_pre_proceeds_att;
703 
704   -- Start of comments
705   --
706   -- Procedure Name : chk_pre_proceeds_qte_approved
707   -- Description   : Gets the transaction_id which in this case is Quote_Id and
708   --                  checks if quote sent for approval was approved or not
709   -- Business Rules :
710   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
711   -- Version      : 1.0
712   --
713   -- End of comments
714   PROCEDURE chk_pre_proceeds_qte_approved(
715                                 itemtype IN  VARCHAR2,
716                             itemkey   IN  VARCHAR2,
717                              actid    IN  NUMBER,
718                             funcmode IN  VARCHAR2,
719                             resultout OUT NOCOPY VARCHAR2) IS
720 
721 
722     l_approved_yn   VARCHAR2(1) := 'N';
723 
724 -- for debug logging
725     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_pre_proceeds_qte_approved';
726     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
727     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
728     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
729 
730   BEGIN
731 
732    IF (is_debug_procedure_on) THEN
733        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
734    END IF;
735 
736     --
737     -- RUN mode
738     --
739     IF (funcmode = 'RUN') THEN
740 
741       -- Get the approved_yn flag
742       l_approved_yn := WF_ENGINE.GetItemAttrText(
743                                  itemtype => itemtype,
744                                itemkey => itemkey,
745                                aname   => 'APPROVED_YN');
746 
747       -- if the approval request was approved then approved else rejected
748       IF l_approved_yn = 'Y' THEN
749         resultout := 'COMPLETE:APPROVAL_APPROVED';
750       ELSE
751         resultout := 'COMPLETE:APPROVAL_REJECTED';
752       END IF;
753 
754       RETURN ;
755     END IF;
756 
757     --
758     -- CANCEL mode
759     --
760     IF (funcmode = 'CANCEL') THEN
761       --
762       resultout := 'COMPLETE:';
763       RETURN;
764       --
765     END IF;
766 
767     --
768     -- TIMEOUT mode
769     --
770     IF (funcmode = 'TIMEOUT') THEN
771       --
772       resultout := 'COMPLETE:';
773       RETURN;
774       --
775     END IF;
776 
777    IF (is_debug_procedure_on) THEN
778        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
779    END IF;
780 
781   EXCEPTION
782      WHEN OTHERS THEN
783              IF (is_debug_exception_on) THEN
784             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
785                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
786         END IF;
787 
788 	WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_qte_approved',
789                         itemtype, itemkey, actid, funcmode);
790         RAISE;
791   END chk_pre_proceeds_qte_approved;
792 
793 
794   -- Start of comments
795   --
796   -- Procedure Name : pop_pre_proceeds_noti_att
797   -- Description   : Get and set for quote and contract details to notify
798   --                  requestor to split contract
799   -- Business Rules :
800   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
801   -- Version      : 1.0
802   --
803   -- End of comments
804   PROCEDURE pop_pre_proceeds_noti_att(
805                                 itemtype IN  VARCHAR2,
806                             itemkey   IN  VARCHAR2,
807                              actid    IN  NUMBER,
808                             funcmode IN  VARCHAR2,
809                             resultout OUT NOCOPY VARCHAR2) IS
810 
811     -- Get the asset details for the contract
812 --start changed by abhsaxen for Bug#6174484
813     CURSOR get_assets_in_k_csr (p_qte_id IN NUMBER) IS
814 	SELECT okhv.contract_number contract_number,
815 	  clet.item_description asset_description,
816 	  clet.name asset_number,
817 	  oalv.serial_number serial_number,
818 	  oalv.model_number model_number
819 	FROM okc_k_lines_b cleb,
820 	  okc_k_lines_tl clet,
821 	  okx_asset_lines_v oalv,
822 	  okc_k_headers_all_b okhv,
823 	  okc_line_styles_b lsev,
824 	  okl_trx_quotes_all_b trq
825 	WHERE cleb.id = oalv.parent_line_id(+)
826 	 AND cleb.chr_id = okhv.id
827 	 AND cleb.lse_id = lsev.id
828 	 AND lsev.lty_code = 'FREE_FORM1'
829 	 AND cleb.chr_id = trq.khr_id
830 	 AND cleb.id = clet.id
831 	 AND clet.LANGUAGE = userenv('LANG')
832 	 AND cleb.sts_code <> 'ABANDONED'
833 	 AND trq.id = p_qte_id;
834 
835 --end changed by abhsaxen for Bug#6174484
836 
837     -- get the asset details for the quote
838 --start changed by abhsaxen for Bug#6174484
839     CURSOR get_assets_in_qte_csr ( p_qte_id IN NUMBER) IS
840 	SELECT otqv.quote_number quote_number,
841 	  clet.item_description asset_description,
842 	  clet.name asset_number,
843 	  oalv.serial_number serial_number,
844 	  oalv.model_number model_number
845 	FROM okl_trx_quotes_b otqv,
846 	  okl_txl_qte_lines_all_b tql,
847 	  okc_k_lines_b cleb,
848 	  okc_k_lines_tl clet,
849 	  okx_asset_lines_v oalv,
850 	  okc_line_styles_b lsev
851 	WHERE otqv.id = p_qte_id
852 	 AND tql.kle_id = cleb.id
853 	 AND otqv.id = tql.qte_id
854 	 AND tql.qlt_code = 'AMCFIA'
855 	 AND cleb.id = oalv.parent_line_id(+)
856 	 AND cleb.lse_id = lsev.id
857 	 AND lsev.lty_code = 'FREE_FORM1'
858 	 AND cleb.id = clet.id
859 	 AND clet.LANGUAGE = userenv('LANG')
860 	 AND cleb.sts_code <> 'ABANDONED';
861 --end changed by abhsaxen for Bug#6174484
862 
863     get_assets_in_k_rec     get_assets_in_k_csr%ROWTYPE;
864     get_assets_in_qte_rec   get_assets_in_qte_csr%ROWTYPE;
865     l_qte_id                VARCHAR2(2000);
866     l_message               VARCHAR2(32000);
867 
868 -- for debug logging
869     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_pre_proceeds_noti_att';
870     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
871     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
872     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
873 
874   BEGIN
875 
876    IF (is_debug_procedure_on) THEN
877        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
878    END IF;
879 
880 
881   /*  MESSAGE
882 
883    The contract <<Contract Number>> assets does not match the quote <<Quote Number>> assets.
884    Please split the contract so that the contract assets match the quote assets.
885 
886    Contract Assets:
887    -----------------------------------------------------------------------------
888    Asset Number       Asset Description     Model            Serial Number
889    -----------------------------------------------------------------------------
890    <<K Asset Number>><<K Asset Description>><<K Model Number>><<K Serial Number>>
891    -----------------------------------------------------------------------------
892 
893    Quote Assets:
894    -----------------------------------------------------------------------------
895    Asset Number       Asset Description     Model            Serial Number
896    -----------------------------------------------------------------------------
897    <<Q Asset Number>><<Q Asset Description>><<Q Model Number>><<Q Serial Number>>
898    -----------------------------------------------------------------------------
899 
900   */
901 
902     --
903     -- RUN mode
904     --
905     IF (funcmode = 'RUN') THEN
906 
907       -- get the quote id
908       l_qte_id := WF_ENGINE.GetItemAttrText(
909                                 itemtype => itemtype,
910                             itemkey  => itemkey,
911                             aname    => 'TRANSACTION_ID');
912 
913       --build message
914       OPEN  get_assets_in_k_csr(TO_NUMBER(l_qte_id));
915       FETCH get_assets_in_k_csr INTO get_assets_in_k_rec;
916       CLOSE get_assets_in_k_csr;
917 
918       OPEN  get_assets_in_qte_csr(TO_NUMBER(l_qte_id));
919       FETCH get_assets_in_qte_csr INTO get_assets_in_qte_rec;
920       CLOSE get_assets_in_qte_csr;
921 
922 
923       l_message  := '<p>The contract '|| get_assets_in_k_rec.contract_number
924                     ||' assets does not match the quote '|| get_assets_in_qte_rec.quote_number
925                     ||' assets.</p> '
926                     ||'<p>Please split the contract so that the contract assets '
927                     ||'match the quote assets.</p>';
928 
929 
930       l_message  :=   l_message||'<p>Contract Assets:</p><p>'||
931                       '<table width="50%" border="1">'||
932                       '<tr>'||
933                       '<td><b>Asset Number</b></td>'||
934                       '<td><b>Asset Description</b></td>'||
935                       '<td><b>Model</b></td>'||
936                       '<td><b>Serial Number</b></td>'||
937                       '</tr>';
938 
939       FOR get_assets_in_k_rec in get_assets_in_k_csr(TO_NUMBER(l_qte_id)) LOOP
940 
941         l_message  :=  l_message||'<tr>'||
942                                   '<td>'||get_assets_in_k_rec.asset_number||'</td>'||
943                                   '<td>'||get_assets_in_k_rec.asset_description||'</td>'||
944                                   '<td>'||get_assets_in_k_rec.model_number||'</td>'||
945                                   '<td>'||get_assets_in_k_rec.serial_number||'</td>'||
946                                   '</tr>';
947       END LOOP;
948 
949       l_message  :=   l_message||'</table></p>';
950 
951       l_message  :=   l_message||'<p>Quote Assets:</p><p>'||
952                       '<table width="50%" border="1">'||
953                       '<tr>'||
954                       '<td><b>Asset Number</b></td>'||
955                       '<td><b>Asset Description</b></td>'||
956                       '<td><b>Model</b></td>'||
957                       '<td><b>Serial Number</b></td>'||
958                       '</tr>';
959 
960       FOR get_assets_in_qte_rec in get_assets_in_qte_csr(TO_NUMBER(l_qte_id)) LOOP
961 
962         l_message  :=  l_message||'<tr>'||
963                                   '<td>'||get_assets_in_qte_rec.asset_number||'</td>'||
964                                   '<td>'||get_assets_in_qte_rec.asset_description||'</td>'||
965                                   '<td>'||get_assets_in_qte_rec.model_number||'</td>'||
966                                   '<td>'||get_assets_in_qte_rec.serial_number||'</td>'||
967                                   '</tr>';
968       END LOOP;
969 
970       l_message  := l_message||'</table></p>';
971 
972       -- Set the message
973       WF_ENGINE.SetItemAttrText (
974                                 itemtype => itemtype,
975                             itemkey  => itemkey,
976                             aname    => 'MESSAGE_DESCRIPTION',
977                                 avalue   => l_message);
978 
979       resultout := 'COMPLETE:Y';
980 
981       RETURN ;
982 
983     END IF;
984 
985     --
986     -- CANCEL mode
987     --
988     IF (funcmode = 'CANCEL') THEN
989       --
990       resultout := 'COMPLETE:';
991       RETURN;
992       --
993     END IF;
994 
995     --
996     -- TIMEOUT mode
997     --
998     IF (funcmode = 'TIMEOUT') THEN
999       --
1000       resultout := 'COMPLETE:';
1001       RETURN;
1002       --
1003     END IF;
1004 
1005 
1006    IF (is_debug_procedure_on) THEN
1007        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1008    END IF;
1009 
1010   EXCEPTION
1011 
1012      WHEN OTHERS THEN
1013         IF (is_debug_exception_on) THEN
1014             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1015                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1016         END IF;
1017         IF get_assets_in_k_csr%ISOPEN THEN
1018            CLOSE get_assets_in_qte_csr;
1019         END IF;
1020         IF get_assets_in_k_csr%ISOPEN THEN
1021            CLOSE get_assets_in_qte_csr;
1022         END IF;
1023         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pop_pre_proceeds_noti_att',
1024                         itemtype, itemkey, actid, funcmode);
1025         RAISE;
1026   END pop_pre_proceeds_noti_att;
1027 
1028 
1029   -- Start of comments
1030   --
1031   -- Procedure Name : pop_pre_proceeds_app_att
1032   -- Description    : Get and set for pre-proceeds item attributes for approval
1033   -- Business Rules :
1034   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
1035   -- Version        : 1.0
1036   -- History        : PAGARG Bug# 4012492 Issue with message if there are too
1037   --                : many assets
1038   -- End of comments
1039   PROCEDURE pop_pre_proceeds_app_att(
1040                                 itemtype IN  VARCHAR2,
1041                             itemkey   IN  VARCHAR2,
1042                              actid    IN  NUMBER,
1043                             funcmode IN  VARCHAR2,
1044                             resultout OUT NOCOPY VARCHAR2) IS
1045 
1046     --PAGARG Bug# 4012492
1047     --Modified the cursor to query contract number instead of asset details of quote
1048     -- cursor to populate approval attributes
1049     CURSOR okl_approval_quote_csr(p_id IN NUMBER) IS
1050     SELECT TO_CHAR(sysdate, 'MM-DD-YYYY') system_date,
1051            TRQ.quote_number               quote_number,
1052            TRQ.date_effective_to          effective_to,
1053            QTE.amount                     quote_total,
1054            OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_TYPE',TRQ.qtp_code,'N') quote_type,
1055            TRQ.creation_date              quote_creation_date,
1056            OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_REASON',TRQ.qrs_code,'N') quote_reason,
1057            OKL_AM_UTIL_PVT.get_chr_currency(TRQ.khr_id) currency,
1058            KHR.contract_number            contract_number,
1059            TRQ.comments                   comments,
1060            TRQ.last_updated_by            last_updated_by
1061     FROM   OKC_K_HEADERS_B   KHR,
1062            OKL_TRX_QUOTES_V  TRQ,
1063            (SELECT SUM(NVL(amount,0)) amount, qte_id FROM OKL_TXL_QUOTE_LINES_V GROUP BY qte_id) QTE
1064     WHERE  KHR.id            = TRQ.khr_id
1065     AND    QTE.qte_id        = TRQ.id
1066     AND    TRQ.id            = p_id;
1067 
1068     l_trx_id              NUMBER;
1069     l_message             VARCHAR2(30000);
1070     l_header_done         BOOLEAN := FALSE;
1071     l_comments            VARCHAR2(2000);
1072     l_formatted_qte_tot   VARCHAR2(2000);
1073 
1074 -- for debug logging
1075     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_pre_proceeds_app_att';
1076     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1077     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1078     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1079 
1080   BEGIN
1081 
1082    IF (is_debug_procedure_on) THEN
1083        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1084    END IF;
1085 
1086     --
1087     -- RUN mode
1088     --
1089     IF (funcmode = 'RUN') THEN
1090 
1091       l_trx_id := WF_ENGINE.GetItemAttrText(
1092                                  itemtype => itemtype,
1093                                itemkey => itemkey,
1094                                aname   => 'TRANSACTION_ID');
1095 
1096       /*  MESSAGE
1097 
1098       Quote Number: <<Quote Number>>
1099       Quote Type: <<Quote Type>>
1100       Quote Effective To Date: <<Effective To>>
1101       Total: <<Quote Total>> <<Currency>>
1102 
1103       A PreProceeds Termination was requested for contract <<Contract Number>> on
1104       <<Quote Creation Date>> for the following reason: <<Quote Reason>>.
1105 
1106       -----------------------------------------------------------------------------
1107       Asset Number   |   Asset Description  |  Model         |   Serial Number    |
1108       -----------------------------------------------------------------------------
1109       <<Asset Number>> <<Asset Description>> <<Model Number>> <<Serial Number>>  |
1110       -----------------------------------------------------------------------------
1111 
1112      Comments:
1113      <<Comments>>
1114 
1115      */
1116 
1117       --PAGARG Bug# 4012492 message is now changed, no assets displayed
1118       --build message
1119       FOR okl_approval_quote_rec in okl_approval_quote_csr(l_trx_id) LOOP
1120 
1121         IF NOT l_header_done THEN
1122 
1123           l_formatted_qte_tot :=  OKL_ACCOUNTING_UTIL.format_amount(
1124                                                         okl_approval_quote_rec.quote_total,
1125                                                         okl_approval_quote_rec.currency);
1126           l_message  :=
1127                       '<p>Quote Number: '||okl_approval_quote_rec.quote_number||'<br>'||
1128                       'Quote Type: '||okl_approval_quote_rec.quote_type||'<br>'||
1129                       'Quote Effective To Date: '||okl_approval_quote_rec.effective_to||'<br>'||
1130                       'Total: '||l_formatted_qte_tot||' '|| okl_approval_quote_rec.currency|| '<br></p>'||
1131                       '<p> A PreProceeds Termination was requested for contract '||
1132                       okl_approval_quote_rec.contract_number||' on '||okl_approval_quote_rec.quote_creation_date||
1133                       ' for the following reason: '||okl_approval_quote_rec.quote_reason||'<br>'||'</p>';
1134 
1135            l_header_done := TRUE;
1136            l_comments    := okl_approval_quote_rec.comments;
1137         END IF;
1138 
1139       END LOOP;
1140 
1141       IF l_header_done THEN
1142          --PAGARG Bug# 4012492
1143          l_message  := l_message||'<p>Comments:<br>'||
1144                        l_comments||'</p>';
1145       ELSE
1146          l_message := '';
1147       END IF;
1148 
1149       -- Set the message
1150       WF_ENGINE.SetItemAttrText (
1151                                 itemtype => itemtype,
1152                             itemkey  => itemkey,
1153                             aname    => 'MESSAGE_DESCRIPTION',
1154                                 avalue   => l_message);
1155       resultout := 'COMPLETE:Y';
1156 
1157       RETURN ;
1158 
1159     END IF;
1160 
1161     --
1162     -- CANCEL mode
1163     --
1164     IF (funcmode = 'CANCEL') THEN
1165       --
1166       resultout := 'COMPLETE:';
1167       RETURN;
1168       --
1169     END IF;
1170 
1171     --
1172     -- TIMEOUT mode
1173     --
1174     IF (funcmode = 'TIMEOUT') THEN
1175       --
1176       resultout := 'COMPLETE:';
1177       RETURN;
1178       --
1179     END IF;
1180 
1181 
1182    IF (is_debug_procedure_on) THEN
1183        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1184    END IF;
1185 
1186   EXCEPTION
1187 
1188      WHEN OTHERS THEN
1189              IF (is_debug_exception_on) THEN
1190             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1191                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1192         END IF;
1193 
1194         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pop_pre_proceeds_app_att',
1195                         itemtype, itemkey, actid, funcmode);
1196         RAISE;
1197   END pop_pre_proceeds_app_att;
1198 
1199 
1200   -- Start of comments
1201   --
1202   -- Procedure Name : pop_pre_proceeds_doc_att
1203   -- Description   : Sets the message for notification to requestor for
1204   --                  documentation followup
1205   -- Business Rules :
1206   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
1207   -- Version      : 1.0
1208   --
1209   -- End of comments
1210   PROCEDURE pop_pre_proceeds_doc_att(
1211                                 itemtype IN  VARCHAR2,
1212                             itemkey   IN  VARCHAR2,
1213                              actid    IN  NUMBER,
1214                             funcmode IN  VARCHAR2,
1215                             resultout OUT NOCOPY VARCHAR2) IS
1216 
1217     -- get the quote details
1218     CURSOR l_message_csr ( p_qte_id IN NUMBER) IS
1219       SELECT   TO_CHAR(SYSDATE, 'DD-MON-RRRR') SYSTEM_DATE,
1220                OTQ.QUOTE_NUMBER QUOTE_NUMBER,
1221                TO_CHAR(OTQ.DATE_EFFECTIVE_TO, 'DD-MON-RRRR') EFFECTIVE_TO,
1222                OKL_ACCOUNTING_UTIL.format_amount(SUM(NVL(OTL.AMOUNT,0)),OKL_AM_UTIL_PVT.get_chr_currency(OTQ.KHR_ID))||' '||OKL_AM_UTIL_PVT.get_chr_currency(OTQ.KHR_ID) QUOTE_TOTAL,
1223                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_REASON',OTQ.qrs_code,'N')QUOTE_REASON ,
1224                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_TYPE',OTQ.qtp_code,'N') QUOTE_TYPE,
1225                TO_CHAR(OTQ.CREATION_DATE, 'DD-MON-RRRR') QUOTE_CREATION_DATE,
1226                KHR.CONTRACT_NUMBER CONTRACT_NUMBER,
1227                OTQ.comments COMMENTS
1228       FROM     OKL_TRX_QUOTES_V        OTQ,
1229                OKL_TXL_QUOTE_LINES_B   OTL,
1230                OKC_K_HEADERS_V         KHR
1231       WHERE    OTQ.ID          = p_qte_id
1232       AND      OTQ.ID          = OTL.QTE_ID
1233       AND      KHR.ID          = OTQ.KHR_ID
1234       GROUP BY TO_CHAR(SYSDATE, 'DD-MON-RRRR'),
1235                OTQ.QUOTE_NUMBER,
1236                OTQ.DATE_EFFECTIVE_TO,
1237                OTQ.QST_CODE,
1238                OTQ.CREATION_DATE,
1239                OTQ.QRS_CODE,
1240                KHR.CONTRACT_NUMBER,
1241                OTQ.KHR_ID,
1242                OTQ.QTP_CODE,
1243                OTQ.COMMENTS;
1244 
1245     l_message_rec l_message_csr%ROWTYPE;
1246     l_trx_id      NUMBER;
1247     l_message     VARCHAR2(30000);
1248 
1249 -- for debug logging
1250     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_pre_proceeds_doc_att';
1251     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1252     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1253     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1254 
1255   BEGIN
1256 
1257    IF (is_debug_procedure_on) THEN
1258        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1259    END IF;
1260 
1261     --
1262     -- RUN mode
1263     --
1264     IF (funcmode = 'RUN') THEN
1265 
1266       l_trx_id := WF_ENGINE.GetItemAttrText(
1267                                  itemtype => itemtype,
1268                                itemkey => itemkey,
1269                                aname   => 'TRANSACTION_ID');
1270 
1271       --build message
1272      OPEN  l_message_csr(l_trx_id);
1273      FETCH l_message_csr INTO l_message_rec;
1274      CLOSE l_message_csr;
1275 
1276       /*  MESSAGE
1277 
1278       Quote Number: <<Quote Number>>
1279       Quote Type: <<Quote Type>>
1280       Quote Effective To Date: <<Effective To>>
1281       Total: <<Quote Total>> <<Currency>>
1282 
1283       The Termination Quote was requested for Contract <<Contract Number>> on
1284       <<Quote Creation Date>> for the following reason: <<Quote Reason>>.
1285 
1286       Please respond to this notification upon receipt of pre-proceeds documentation.
1287 
1288       Comments:
1289       <<Comments>>
1290      */
1291 
1292 
1293       l_message  := '<p>Quote Number:'||l_message_rec.quote_number||'<br>'||
1294                     'Quote Type:'||l_message_rec.quote_type||'<br>'||
1295                     'Quote Effective To Date:'||l_message_rec.effective_to||'<br>'||
1296                     'Total:'||l_message_rec.quote_total||'<br>'||
1297                     '<p>The Termination Quote was requested for Contract '||l_message_rec.contract_number||' on<br>'||
1298                     l_message_rec.quote_creation_date||' for the following reason: '||l_message_rec.quote_reason||'.</p>'||
1299                     '<p>Please respond to this notification upon receipt of pre-proceeds documentation.</p>'||
1300                     '<p>Comments:<br>'||
1301                     l_message_rec.comments||'</p>';
1302 
1303 
1304       -- Set the message
1305       WF_ENGINE.SetItemAttrText (
1306                                 itemtype => itemtype,
1307                             itemkey  => itemkey,
1308                             aname    => 'MESSAGE_DESCRIPTION',
1309                                 avalue   => l_message);
1310 
1311       resultout := 'COMPLETE:Y';
1312 
1313       RETURN ;
1314 
1315     END IF;
1316 
1317     --
1318     -- CANCEL mode
1319     --
1320     IF (funcmode = 'CANCEL') THEN
1321       --
1322       resultout := 'COMPLETE:';
1323       RETURN;
1324       --
1325     END IF;
1326 
1327     --
1328     -- TIMEOUT mode
1329     --
1330     IF (funcmode = 'TIMEOUT') THEN
1331       --
1332       resultout := 'COMPLETE:';
1333       RETURN;
1334       --
1335     END IF;
1336 
1337 
1338 
1339    IF (is_debug_procedure_on) THEN
1340        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1341    END IF;
1342 
1343   EXCEPTION
1344 
1345      WHEN OTHERS THEN
1346         IF (is_debug_exception_on) THEN
1347             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1348                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1349         END IF;
1350         IF l_message_csr%ISOPEN THEN
1351           CLOSE l_message_csr;
1352         END IF;
1353         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pop_pre_proceeds_doc_att',
1354                         itemtype, itemkey, actid, funcmode);
1355         RAISE;
1356   END pop_pre_proceeds_doc_att;
1357 
1358 
1359   -- Start of comments
1360   --
1361   -- Procedure Name : pre_proceeds_trmnt_contract
1362   -- Description   : Makes call to terminate contract api. gets the values need
1363   --                  to be passed to terminate contract and sets the terminate
1364   --                  contract input parameters
1365   -- Business Rules :
1366   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
1367   -- Version      : 1.0
1368   -- History        : RMUNJULU 02-JAN-03 2699412 Set the okc context
1369   --
1370   -- End of comments
1371   PROCEDURE pre_proceeds_trmnt_contract(
1372                                 itemtype IN  VARCHAR2,
1373                             itemkey   IN  VARCHAR2,
1374                              actid    IN  NUMBER,
1375                             funcmode IN  VARCHAR2,
1376                             resultout OUT NOCOPY VARCHAR2) IS
1377 
1378     SUBTYPE term_rec_type IS OKL_AM_LEASE_LOAN_TRMNT_PUB.term_rec_type;
1379     SUBTYPE tcnv_rec_type IS OKL_AM_LEASE_LOAN_TRMNT_PUB.tcnv_rec_type;
1380 
1381     -- Cursor to get the quote details
1382     CURSOR get_qte_details_csr( p_qte_id IN NUMBER)  IS
1383       SELECT qtp_code,
1384              qrs_code
1385       FROM   OKL_TRX_QUOTES_V
1386       WHERE  id = p_qte_id;
1387 
1388     l_term_rec                       term_rec_type;
1389     l_tcnv_rec                       tcnv_rec_type;
1390 
1391     l_contract_id                    NUMBER;
1392     l_contract_number                OKL_K_HEADERS_FULL_V.contract_number%TYPE;
1393     l_termination_date               DATE;
1394     lx_msg_count                     NUMBER;
1395     lx_msg_data                      VARCHAR2(2000);
1396     l_return_status                  VARCHAR2(1);
1397     l_api_version                    NUMBER := 1;
1398     l_qte_id                         NUMBER;
1399     l_qtp_code                       VARCHAR2(200);
1400     l_qrs_code                       VARCHAR2(200);
1401     l_org_id                         NUMBER;
1402 
1403 -- for debug logging
1404     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pre_proceeds_trmnt_contract';
1405     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1406     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1407     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1408 
1409   BEGIN
1410 
1411    IF (is_debug_procedure_on) THEN
1412        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1413    END IF;
1414 
1415     --
1416     -- RUN mode
1417     --
1418     IF (funcmode = 'RUN') THEN
1419       -- Get the values for term_rec before calling the terminate contract api
1420       l_qte_id := WF_ENGINE.GetItemAttrText(
1421                                            itemtype => itemtype,
1422                                     itemkey => itemkey,
1423                                     aname   => 'TRANSACTION_ID');
1424 
1425       l_contract_id := WF_ENGINE.GetItemAttrNumber(
1426                                            itemtype => itemtype,
1427                                     itemkey => itemkey,
1428                                     aname   => 'CONTRACT_ID');
1429 
1430       l_contract_number := WF_ENGINE.GetItemAttrText(
1431                                            itemtype => itemtype,
1432                                     itemkey => itemkey,
1433                                     aname   => 'CONTRACT_NUMBER');
1434 
1435       SELECT SYSDATE INTO l_termination_date FROM DUAL;
1436 
1437       -- Get the org id for the contract
1438       l_org_id := OKL_AM_UTIL_PVT.get_chr_org_id(l_contract_id);
1439 
1440       -- Set the contract org id to the application
1441       --DBMS_APPLICATION_INFO.set_client_info (l_org_id);
1442       MO_GLOBAL.set_policy_context ('S', l_org_id); -- Bug 6140786
1443 
1444 
1445       -- RMUNJULU 02-JAN-03 2699412 Set the okc context
1446       OKL_CONTEXT.set_okc_org_context(p_chr_id => l_contract_id);
1447 
1448 
1449       OPEN  get_qte_details_csr(l_qte_id);
1450       FETCH get_qte_details_csr INTO l_qtp_code, l_qrs_code;
1451       CLOSE get_qte_details_csr;
1452 
1453       -- set the term_rec_type of terminate contract
1454       l_term_rec.p_contract_id          :=    l_contract_id;
1455       l_term_rec.p_contract_number      :=    l_contract_number;
1456       l_term_rec.p_termination_date     :=    l_termination_date;
1457       l_term_rec.p_control_flag         :=    'TRMNT_QUOTE_UPDATE';
1458       l_term_rec.p_quote_id             :=    l_qte_id;
1459       l_term_rec.p_quote_type           :=    l_qtp_code;
1460       l_term_rec.p_quote_reason         :=    l_qrs_code;
1461 
1462       l_tcnv_rec.id                     :=    OKL_API.G_MISS_NUM;
1463 
1464       -- Call the terminate contract api
1465       OKL_AM_LEASE_LOAN_TRMNT_PUB.lease_loan_termination (
1466            p_api_version                  => l_api_version,
1467            p_init_msg_list                => OKL_API.G_TRUE,
1468            x_return_status                => l_return_status,
1469            x_msg_count                    => lx_msg_count,
1470            x_msg_data                     => lx_msg_data,
1471            p_term_rec                     => l_term_rec,
1472            p_tcnv_rec                     => l_tcnv_rec);
1473 
1474       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1475         resultout := 'COMPLETE:N';
1476         RAISE G_EXCEPTION;
1477       ELSE
1478         resultout := 'COMPLETE:Y';
1479       END IF;
1480       RETURN ;
1481     END IF;
1482 
1483     --
1484     -- CANCEL mode
1485     --
1486     IF (funcmode = 'CANCEL') THEN
1487       --
1488       resultout := 'COMPLETE:';
1489       RETURN;
1490       --
1491     END IF;
1492 
1493     --
1494     -- TIMEOUT mode
1495     --
1496     IF (funcmode = 'TIMEOUT') THEN
1497       --
1498       resultout := 'COMPLETE:';
1499       RETURN;
1500       --
1501     END IF;
1502 
1503    IF (is_debug_procedure_on) THEN
1504        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1505    END IF;
1506 
1507   EXCEPTION
1508 
1509      WHEN G_EXCEPTION THEN
1510         IF (is_debug_exception_on) THEN
1511             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
1512         END IF;
1513         IF get_qte_details_csr%ISOPEN THEN
1514           CLOSE get_qte_details_csr;
1515         END IF;
1516         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pre_proceeds_trmnt_contract',
1517                         itemtype, itemkey, actid, funcmode);
1518         RAISE;
1519      WHEN OTHERS THEN
1520         IF (is_debug_exception_on) THEN
1521             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1522                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1523         END IF;
1524 
1525         IF get_qte_details_csr%ISOPEN THEN
1526           CLOSE get_qte_details_csr;
1527         END IF;
1528         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pre_proceeds_trmnt_contract',
1529                         itemtype, itemkey, actid, funcmode);
1530         RAISE;
1531   END pre_proceeds_trmnt_contract;
1532 
1533 
1534   -- Start of comments
1535   --
1536   -- Procedure Name : chk_pre_proceeds_serv_maint
1537   -- Description   : Checks if service and maintainance needed
1538   -- Business Rules :
1539   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
1540   -- Version      : 1.0
1541   --
1542   -- End of comments
1543   PROCEDURE chk_pre_proceeds_serv_maint(
1544                                 itemtype IN  VARCHAR2,
1545                             itemkey   IN  VARCHAR2,
1546                              actid    IN  NUMBER,
1547                             funcmode IN  VARCHAR2,
1548                             resultout OUT NOCOPY VARCHAR2) IS
1549 
1550      -- Get the total number of service lines
1551      CURSOR get_service_lines_csr ( p_khr_id IN NUMBER) IS
1552        SELECT  COUNT(OKLV.id)
1553        FROM    OKC_K_LINES_V       OKLV,
1554                OKC_LINE_STYLES_V   OLSV
1555        WHERE   OKLV.chr_id   = p_khr_id
1556        AND     OKLV.lse_id   = OLSV.id
1557        AND     OLSV.lty_code = 'SOLD_SERVICE'
1558        AND     OKLV.end_date > SYSDATE;
1559 
1560      l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1561      l_contract_id             NUMBER;
1562      l_no_of_recipients        NUMBER := 0;
1563 
1564 -- for debug logging
1565     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_pre_proceeds_serv_maint';
1566     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1567     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1568     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1569 
1570   BEGIN
1571 
1572    IF (is_debug_procedure_on) THEN
1573        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1574    END IF;
1575 
1576     --
1577     -- RUN mode
1578     --
1579     IF (funcmode = 'RUN') THEN
1580       -- Get the values for term_rec before checking rule
1581       l_contract_id := WF_ENGINE.GetItemAttrNumber(
1582                                            itemtype => itemtype,
1583                                     itemkey => itemkey,
1584                                     aname   => 'CONTRACT_ID');
1585 
1586       OPEN  get_service_lines_csr (l_contract_id);
1587       FETCH get_service_lines_csr INTO l_no_of_recipients;
1588       CLOSE get_service_lines_csr;
1589 
1590       IF l_no_of_recipients IS NOT NULL AND l_no_of_recipients > 0 THEN
1591         resultout := 'COMPLETE:Y';
1592       ELSE
1593         resultout := 'COMPLETE:N';
1594       END IF;
1595 
1596       RETURN;
1597     END IF;
1598 
1599     --
1600     -- CANCEL mode
1601     --
1602     IF (funcmode = 'CANCEL') THEN
1603       --
1604       resultout := 'COMPLETE:';
1605       RETURN;
1606       --
1607     END IF;
1608 
1609     --
1610     -- TIMEOUT mode
1611     --
1612     IF (funcmode = 'TIMEOUT') THEN
1613       --
1614       resultout := 'COMPLETE:';
1615       RETURN;
1616       --
1617     END IF;
1618 
1619 
1620    IF (is_debug_procedure_on) THEN
1621        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1622    END IF;
1623 
1624   EXCEPTION
1625      WHEN G_EXCEPTION THEN
1626         IF (is_debug_exception_on) THEN
1627             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
1628         END IF;
1629 
1630         IF get_service_lines_csr%ISOPEN THEN
1631           CLOSE get_service_lines_csr;
1632         END IF;
1633 
1634         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_serv_maint',
1635                         itemtype, itemkey, actid, funcmode);
1636         RAISE;
1637 
1638      WHEN OTHERS THEN
1639         IF (is_debug_exception_on) THEN
1640             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1641                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1642         END IF;
1643 
1644         IF get_service_lines_csr%ISOPEN THEN
1645           CLOSE get_service_lines_csr;
1646         END IF;
1647 
1648         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_serv_maint',
1649                         itemtype, itemkey, actid, funcmode);
1650         RAISE;
1651   END chk_pre_proceeds_serv_maint;
1652 
1653   -- Start of comments
1654   --
1655   -- Procedure Name : pop_pre_proceeds_serv_maint
1656   -- Description   : Populate the item attributes for service and maintenance
1657   -- Business Rules :
1658   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
1659   -- Version      : 1.0
1660   --
1661   -- End of comments
1662   PROCEDURE pop_pre_proceeds_serv_maint(
1663                                 itemtype IN  VARCHAR2,
1664                             itemkey   IN  VARCHAR2,
1665                              actid    IN  NUMBER,
1666                             funcmode IN  VARCHAR2,
1667                             resultout OUT NOCOPY VARCHAR2) IS
1668 
1669      l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1670      l_contract_id             NUMBER;
1671      l_no_of_service_lines     NUMBER;
1672 
1673 -- for debug logging
1674     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_pre_proceeds_serv_maint';
1675     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1676     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1677     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1678 
1679    BEGIN
1680 
1681    IF (is_debug_procedure_on) THEN
1682        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1683    END IF;
1684 
1685     --
1686     -- RUN mode
1687     --
1688     IF (funcmode = 'RUN') THEN
1689 
1690       l_contract_id := WF_ENGINE.GetItemAttrNumber(
1691                                            itemtype => itemtype,
1692                                     itemkey => itemkey,
1693                                     aname   => 'CONTRACT_ID');
1694 
1695       WF_ENGINE.SetItemAttrText(
1696                                 itemtype => itemtype,
1697                             itemkey  => itemkey,
1698                             aname    => 'RECIPIENT_ID',
1699                                 avalue   => '0'); -- intialize
1700 
1701       WF_ENGINE.SetItemAttrNumber(
1702                                 itemtype => itemtype,
1703                             itemkey  => itemkey,
1704                             aname    => 'CURRENT_REC_ID',
1705                                 avalue   => 0); -- intialized to 0
1706 
1707   --12/20/06 rkuttiya changed recipient type to VENDOR
1708       /*WF_ENGINE.SetItemAttrText(
1709                                 itemtype => itemtype,
1710                             itemkey  => itemkey,
1711                             aname    => 'RECIPIENT_TYPE',
1712                                 avalue   => 'V'); -- always  for Service and Maintenance */
1713        WF_ENGINE.SetItemAttrText(
1714                                 itemtype => itemtype,
1715                                                         itemkey  => itemkey,
1716                                                         aname    => 'RECIPIENT_TYPE',
1717                                       avalue   => 'VENDOR');
1718 
1719       WF_ENGINE.SetItemAttrText(
1720                                 itemtype => itemtype,
1721                             itemkey  => itemkey,
1722                             aname    => 'PROCESS_CODE',
1723                                 avalue   => 'AMQSM'); -- for Service and Maintenance
1724 
1725       resultout := 'COMPLETE:Y';
1726       RETURN ;
1727     END IF;
1728 
1729     --
1730     -- CANCEL mode
1731     --
1732     IF (funcmode = 'CANCEL') THEN
1733       --
1734       resultout := 'COMPLETE:';
1735       RETURN;
1736       --
1737     END IF;
1738 
1739     --
1740     -- TIMEOUT mode
1741     --
1742     IF (funcmode = 'TIMEOUT') THEN
1743       --
1744       resultout := 'COMPLETE:';
1745       RETURN;
1746       --
1747     END IF;
1748 
1749    IF (is_debug_procedure_on) THEN
1750        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1751    END IF;
1752 
1753   EXCEPTION
1754      WHEN OTHERS THEN
1755         IF (is_debug_exception_on) THEN
1756             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1757                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1758         END IF;
1759 
1760         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pop_pre_proceeds_serv_maint',
1761                         itemtype, itemkey, actid, funcmode);
1762         RAISE;
1763   END pop_pre_proceeds_serv_maint;
1764 
1765 
1766   -- Start of comments
1767   --
1768   -- Procedure Name : chk_pre_proceeds_serv_noti
1769   -- Description   : Checks if service and maintenance request sent to all vendors
1770   -- Business Rules :
1771   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
1772   -- Version      : 1.0
1773   --
1774   -- End of comments
1775   PROCEDURE chk_pre_proceeds_serv_noti(
1776                                 itemtype  IN  VARCHAR2,
1777                                 itemkey   IN  VARCHAR2,
1778                                 actid     IN  NUMBER,
1779                                 funcmode  IN  VARCHAR2,
1780                                 resultout OUT NOCOPY VARCHAR2) IS
1781 
1782      -- Get the details of service providers for the provided service line
1783      -- Select all the providers (lines) for the contract which have not been notified
1784   -- nikshah -- Bug # 5484903 Fixed,
1785   -- Changed CURSOR get_serv_prov_dtl_csr SQL definition
1786      CURSOR get_serv_prov_dtl_csr ( p_khr_id          IN NUMBER,
1787                                     p_current_rec_id  IN NUMBER) IS
1788        SELECT OKLB.id                    line_id,
1789               OKPB.object1_id1           party_id
1790        FROM   OKC_K_PARTY_ROLES_B  OKPB,
1791               OKC_K_LINES_B        OKLB,
1792               OKC_LINE_STYLES_B    OLSB,
1793        FND_LOOKUPS FNDV
1794        WHERE  OKLB.chr_id = p_khr_id
1795        AND    OKLB.id > NVL(p_current_rec_id,0)
1796        AND    OKPB.dnz_chr_id = OKLB.dnz_chr_id
1797        AND    OKPB.cle_id = OKLB.id
1798        AND    OKLB.lse_id = OLSB.id
1799        AND    OLSB.lty_code = 'SOLD_SERVICE'
1800        AND    OKLB.end_date > SYSDATE
1801        AND    FNDV.lookup_type = 'OKC_ROLE'
1802        AND    OKPB.RLE_CODE = FNDV.lookup_code
1803        ORDER BY OKLB.id ASC;
1804 
1805 
1806      l_contract_id      NUMBER;
1807      l_current_rec_id   NUMBER;
1808      l_recipient_id     VARCHAR2(200);
1809      l_total_no_of_recp NUMBER;
1810      l_line_id          NUMBER;
1811 
1812   --12/20/06 rkuttiya added for XMLP Project
1813     x_msg_count NUMBER;
1814     x_msg_data VARCHAR2(2000);
1815     l_api_version    NUMBER       := 1;
1816     l_init_msg_list  VARCHAR2(1) := 'T';
1817 
1818     ERR EXCEPTION;
1819     l_batch_id     NUMBER;
1820     l_xmp_rec      OKL_XMLP_PARAMS_PVT.xmp_rec_type;
1821     lx_xmp_rec     OKL_XMLP_PARAMS_PVT.xmp_rec_type;
1822   --get the recipient email address
1823     CURSOR c_recipient(p_recipient_id IN NUMBER)
1824     IS
1825     SELECT hzp.email_address email
1826     FROM  hz_parties hzp
1827     WHERE hzp.party_id = p_recipient_id;
1828 
1829   -- get the sender email address
1830     CURSOR c_agent_csr (c_agent_id NUMBER) IS
1831     SELECT nvl(ppf.email_address , fu.email_address) email
1832     FROM   fnd_user fu,
1833            per_people_f ppf
1834     WHERE  fu.employee_id = ppf.person_id (+)
1835     AND    fu.user_id = c_agent_id;
1836     l_from_email      VARCHAR2(100);
1837     l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1838     l_to_email        VARCHAR2(100);
1839   -- ansethur 26-jul-2007 R12B XMLP start changes
1840     l_agent_id               NUMBER;
1841     l_quote_id               VARCHAR2(200);
1842     l_vendor_id              number;
1843 
1844     -- Check quote exists
1845     CURSOR  get_agent_id_csr  ( p_qte_id   IN VARCHAR2)
1846     IS
1847     SELECT  a.LAST_UPDATED_BY LAST_UPDATED_BY
1848     FROM    OKL_TXL_QUOTE_LINES_V a
1849     WHERE   a.qte_id = to_number(p_qte_id);
1850 
1851      CURSOR c_vendor(p_vendor_id IN NUMBER)
1852      IS
1853      select party_id
1854      from ap_suppliers
1855      where vendor_id = p_vendor_id;
1856   -- ansethur 26-jul-2007 R12B XMLP end changes
1857 -- for debug logging
1858     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_pre_proceeds_serv_noti';
1859     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1860     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1861     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1862 
1863   BEGIN
1864 
1865    IF (is_debug_procedure_on) THEN
1866        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1867    END IF;
1868 
1869       l_contract_id := WF_ENGINE.GetItemAttrNumber(
1870                                     itemtype => itemtype,
1871                                     itemkey => itemkey,
1872                                     aname   => 'CONTRACT_ID');
1873 
1874       l_current_rec_id := WF_ENGINE.GetItemAttrNumber(
1875                                     itemtype => itemtype,
1876                                     itemkey => itemkey,
1877                                     aname   => 'CURRENT_REC_ID');
1878 
1879       -- gets the first provider line of the cursor each time
1880       OPEN  get_serv_prov_dtl_csr (l_contract_id, l_current_rec_id);
1881       FETCH get_serv_prov_dtl_csr INTO l_line_id, l_recipient_id;
1882       CLOSE get_serv_prov_dtl_csr;
1883 
1884       IF l_line_id IS NULL THEN -- no more providers(lines)
1885        resultout := 'COMPLETE:NOTIFY_COMPLETE';
1886          RETURN;
1887      ELSE
1888        resultout := 'COMPLETE:NOTIFY_OUTSTANDING';
1889       END IF;
1890 
1891       WF_ENGINE.SetItemAttrText(
1892                                 itemtype => itemtype,
1893                                 itemkey  => itemkey,
1894                                 aname    => 'RECIPIENT_ID',
1895                                 avalue   => l_recipient_id);
1896    --12/20/06 rkuttiya aadded for XMLP Project
1897    --get the email address of the recipient
1898   -- ansethur 30-jul-2007 R12B XMLP start changes
1899       OPEN c_vendor(l_recipient_id);
1900       FETCH c_vendor INTO  l_vendor_id;
1901       CLOSE c_vendor;
1902 
1903       OPEN c_recipient(l_vendor_id);
1904       FETCH c_recipient INTO l_to_email;
1905       CLOSE c_recipient;
1906   -- ansethur 30-jul-2007 R12B XMLP start changes
1907    -- set the email address attribute
1908        WF_ENGINE.SetItemAttrText(
1909                                 itemtype => itemtype,
1910                                 itemkey  => itemkey,
1911                                 aname    => 'EMAIL_ADDRESS',
1912                                 avalue   => l_to_email);
1913 
1914       WF_ENGINE.SetItemAttrNumber(
1915                                 itemtype => itemtype,
1916                                 itemkey  => itemkey,
1917                                 aname    => 'CURRENT_REC_ID',
1918                                 avalue   => l_line_id);
1919       -- Since the Fulfillment query take p_id which is transaction id
1920       -- set transaction id to line id
1921       WF_ENGINE.SetItemAttrText(
1922                                 itemtype => itemtype,
1923                                 itemkey  => itemkey,
1924                                 aname    => 'TRANSACTION_ID',
1925                                 avalue   => l_line_id);
1926   -- ansethur 26-jul-2007 R12B XMLP start changes
1927      l_quote_id := WF_ENGINE.GetItemAttrNumber(
1928                                 itemtype => itemtype,
1929                                 itemkey => itemkey,
1930                                 aname   => 'QUOTE_ID');
1931 
1932       OPEN get_agent_id_csr(l_quote_id);
1933       FETCH get_agent_id_csr INTO l_agent_id;
1934       CLOSE get_agent_id_csr;
1935 
1936       OPEN c_agent_csr(l_agent_id);
1937       FETCH c_agent_csr INTO l_from_email;
1938       CLOSE c_agent_csr;
1939 
1940       WF_ENGINE.SetItemAttrText(
1941                                 itemtype => itemtype,
1942                                 itemkey  => itemkey,
1943                                 aname    => 'FROM_ADDRESS',
1944                                 avalue   => l_from_email);
1945 
1946   -- ansethur 26-jul-2007 R12B XMLP end changes
1947       -- Initialize the message stack
1948 --      OKL_API.init_msg_list('T');
1949 
1950 --  12/20/06 rkuttiya added for XMLP Project
1951  --code for inserting bind parameters into table
1952 
1953           l_xmp_rec.param_name := 'P_LINE_ID';
1954           l_xmp_rec.param_value := l_line_id;
1955           l_xmp_rec.param_type_code := 'NUMBER';
1956 
1957            OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec(
1958                            p_api_version     => l_api_version
1959                           ,p_init_msg_list   => l_init_msg_list
1960                           ,x_return_status   => l_return_status
1961                           ,x_msg_count       => x_msg_count
1962                           ,x_msg_data        => x_msg_data
1963                           ,p_xmp_rec         => l_xmp_rec
1964                           ,x_xmp_rec         => lx_xmp_rec
1965                            );
1966            IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
1967              RAISE ERR;
1968            END IF;
1969 
1970 
1971            IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
1972                   l_batch_id := lx_xmp_rec.batch_id;
1973                   wf_engine.SetItemAttrText ( itemtype=> itemtype,
1974                                               itemkey => itemkey,
1975                                               aname   => 'BATCH_ID',
1976                                               avalue  => l_batch_id );
1977                      --    resultout := 'COMPLETE:SUCCESS'; commented by ansethur 26-jul-2007 for XMLP
1978            ELSE
1979                    resultout := 'COMPLETE:ERROR';
1980            END IF;
1981 
1982       RETURN;
1983 
1984    IF (is_debug_procedure_on) THEN
1985        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1986    END IF;
1987 
1988 
1989   EXCEPTION
1990 
1991      WHEN OTHERS THEN
1992         IF (is_debug_exception_on) THEN
1993             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1994                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1995         END IF;
1996 
1997         IF get_serv_prov_dtl_csr%ISOPEN THEN
1998          CLOSE get_serv_prov_dtl_csr;
1999         END IF;
2000 
2001         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_serv_noti',
2002                         itemtype, itemkey, actid, funcmode);
2003         RAISE;
2004   END chk_pre_proceeds_serv_noti;
2005 
2006 
2007   -- Start of comments
2008   --
2009   -- Procedure Name : chk_pre_proceeds_bill_of_sale
2010   -- Description   : Checks if bill of sale rule exists
2011   -- Business Rules :
2012   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
2013   -- Version      : 1.0
2014   -- History         :  RMUNJULU 11-FEB-03 2797035 Changed TRUE to FALSE for msg
2015   --
2016   -- End of comments
2017   PROCEDURE chk_pre_proceeds_bill_of_sale(
2018                                 itemtype IN  VARCHAR2,
2019     itemkey   IN  VARCHAR2,
2020            actid    IN  NUMBER,
2021            funcmode IN  VARCHAR2,
2022     resultout OUT NOCOPY VARCHAR2) IS
2023 
2024 
2025      l_rulv_rec              OKL_RULE_PUB.rulv_rec_type;
2026      l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2027      l_rule_found              VARCHAR2(1) := 'N';
2028      l_contract_id             NUMBER;
2029      l_contract_number         OKL_K_HEADERS_FULL_V.contract_number%TYPE;
2030 
2031     l_id            NUMBER;
2032     l_rule_khr_id   NUMBER;
2033     l_qtp_code      VARCHAR2(30);
2034     l_qtev_rec      okl_trx_quotes_pub.qtev_rec_type;
2035     l_rgd_code      VARCHAR2(30);
2036 
2037     -- Get the quote khr_id
2038     CURSOR c_qte_csr(c_id NUMBER) IS
2039     SELECT  khr_id, qtp_code
2040     FROM    OKL_TRX_QUOTES_B
2041     WHERE   id = c_id;
2042 
2043 -- for debug logging
2044     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_pre_proceeds_bill_of_sale';
2045     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2046     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2047     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2048 
2049   BEGIN
2050 
2051    IF (is_debug_procedure_on) THEN
2052        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
2053    END IF;
2054 
2055     --
2056     -- RUN mode
2057     --
2058     IF (funcmode = 'RUN') THEN
2059 
2060       -- Get the values for term_rec before checking rule
2061         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
2062                                            itemkey => itemkey,
2063                                            aname   => 'TRANSACTION_ID');
2064 
2065         OPEN c_qte_csr(l_id);
2066         FETCH c_qte_csr INTO l_contract_id, l_qtp_code;
2067         CLOSE c_qte_csr;
2068 
2069         l_qtev_rec.khr_id := l_contract_id;
2070         l_qtev_rec.qtp_code := l_qtp_code;
2071         l_rule_khr_id := okl_am_util_pvt.get_rule_chr_id (l_qtev_rec);
2072         IF l_qtp_code LIKE 'TER_RECOURSE%' THEN
2073                 l_rgd_code := 'AVTQPR';
2074         ELSE
2075                 l_rgd_code := 'AMTQPR';
2076         END IF;
2077 
2078       -- Call the util api to get the rule info for service and maintenance rule
2079       OKL_AM_UTIL_PVT.get_rule_record(
2080         p_rgd_code => l_rgd_code, -- Rule Grp :Termination Quote Process
2081         p_rdf_code => 'AMFBOS', -- Rule Code:AM Bill of Sale Requirement
2082         p_chr_id => l_rule_khr_id,
2083         p_cle_id => NULL,
2084         x_rulv_rec => l_rulv_rec,
2085         x_return_status => l_return_status,
2086         p_message_yn => FALSE); -- RMUNJULU 11-FEB-03 2797035 Changed TRUE to FALSE
2087 
2088            IF (is_debug_statement_on) THEN
2089                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2090                'after call to okl_am_util_pvt.get_rule_record :'||l_return_status);
2091            END IF;
2092 
2093       IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
2094         IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
2095           l_rule_found := 'Y';
2096         END IF;
2097       ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
2098         l_return_status := OKL_API.G_RET_STS_SUCCESS;
2099         l_rule_found    := 'N';
2100       END IF;
2101 
2102       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2103         resultout := 'COMPLETE:N';
2104         RAISE G_EXCEPTION;
2105       END IF;
2106 
2107       IF l_rule_found = 'Y' THEN
2108         resultout := 'COMPLETE:Y';
2109       ELSE
2110         resultout := 'COMPLETE:N';
2111       END IF;
2112 
2113     ELSE
2114       RETURN ;
2115     END IF;
2116 
2117     --
2118     -- CANCEL mode
2119     --
2120     IF (funcmode = 'CANCEL') THEN
2121       --
2122       resultout := 'COMPLETE:';
2123       RETURN;
2124       --
2125     END IF;
2126 
2127     --
2128     -- TIMEOUT mode
2129     --
2130     IF (funcmode = 'TIMEOUT') THEN
2131       --
2132       resultout := 'COMPLETE:';
2133       RETURN;
2134       --
2135     END IF;
2136 
2137    IF (is_debug_procedure_on) THEN
2138        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2139    END IF;
2140 
2141   EXCEPTION
2142      WHEN G_EXCEPTION THEN
2143 
2144         IF (is_debug_exception_on) THEN
2145             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
2146         END IF;
2147 
2148         IF c_qte_csr%ISOPEN THEN
2149           CLOSE c_qte_csr;
2150         END IF;
2151 
2152         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_bill_of_sale',
2153                         itemtype, itemkey, actid, funcmode);
2154         RAISE;
2155 
2156      WHEN OTHERS THEN
2157              IF (is_debug_exception_on) THEN
2158             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2159                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
2160         END IF;
2161 
2162         IF c_qte_csr%ISOPEN THEN
2163           CLOSE c_qte_csr;
2164         END IF;
2165 
2166         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_bill_of_sale',
2167                         itemtype, itemkey, actid, funcmode);
2168         RAISE;
2169   END chk_pre_proceeds_bill_of_sale;
2170 
2171 
2172   -- Start of comments
2173   --
2174   -- Procedure Name : pop_pre_proceeds_bill_of_sale
2175   -- Description   : Populate the item attributes for bill of sale
2176   -- Business Rules :
2177   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
2178   -- Version      : 1.0
2179   --
2180   -- End of comments
2181   PROCEDURE pop_pre_proceeds_bill_of_sale(
2182                                 itemtype IN  VARCHAR2,
2183                             itemkey   IN  VARCHAR2,
2184                              actid    IN  NUMBER,
2185                             funcmode IN  VARCHAR2,
2186                             resultout OUT NOCOPY VARCHAR2) IS
2187 
2188 
2189      l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2190      l_contract_id             NUMBER;
2191      l_contract_number         OKL_K_HEADERS_FULL_V.contract_number%TYPE;
2192      l_recipient_type          VARCHAR2(3);
2193      l_id                      NUMBER;
2194      l_recipient_code          VARCHAR2(200);
2195      l_recipient_id            NUMBER;
2196 
2197 -- for debug logging
2198     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_pre_proceeds_bill_of_sale';
2199     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2200     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2201     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2202 
2203   BEGIN
2204 
2205    IF (is_debug_procedure_on) THEN
2206        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
2207    END IF;
2208 
2209     --
2210     -- RUN mode
2211     --
2212     IF (funcmode = 'RUN') THEN
2213 
2214       -- Get the values for term_rec before checking rule
2215       l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
2216                                          itemkey => itemkey,
2217                                          aname   => 'TRANSACTION_ID');
2218 
2219       WF_ENGINE.SetItemAttrText(
2220                                 itemtype => itemtype,
2221                             itemkey  => itemkey,
2222                             aname    => 'RECIPIENT_ID',
2223                                 avalue   =>  0);
2224 
2225       WF_ENGINE.SetItemAttrNumber(
2226                                 itemtype => itemtype,
2227                             itemkey  => itemkey,
2228                             aname    => 'CURRENT_REC_ID',
2229                                 avalue   =>  0);
2230 
2231       WF_ENGINE.SetItemAttrText(
2232                                 itemtype => itemtype,
2233                             itemkey  => itemkey,
2234                             aname    => 'PROCESS_CODE',
2235                                 avalue   => 'AMQBS'); -- for Bill of Sale
2236 
2237       resultout := 'COMPLETE:Y';
2238       RETURN ;
2239     END IF;
2240 
2241     --
2242     -- CANCEL mode
2243     --
2244     IF (funcmode = 'CANCEL') THEN
2245       --
2246       resultout := 'COMPLETE:';
2247       RETURN;
2248       --
2249     END IF;
2250 
2251     --
2252     -- TIMEOUT mode
2253     --
2254     IF (funcmode = 'TIMEOUT') THEN
2255       --
2256       resultout := 'COMPLETE:';
2257       RETURN;
2258       --
2259     END IF;
2260 
2261    IF (is_debug_procedure_on) THEN
2262        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2263    END IF;
2264 
2265   EXCEPTION
2266      WHEN OTHERS THEN
2267         IF (is_debug_exception_on) THEN
2268             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2269                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
2270         END IF;
2271         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pop_pre_proceeds_bill_of_sale',
2272                         itemtype, itemkey, actid, funcmode);
2273         RAISE;
2274 
2275   END pop_pre_proceeds_bill_of_sale;
2276 
2277   -- Start of comments
2278   --
2279   -- Procedure Name : chk_pre_proceeds_bill_noti
2280   -- Description   : Gets the recipients for quote and sets the bill of sale attributes
2281   -- Business Rules :
2282   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
2283   -- Version      : 1.0
2284   --
2285   -- End of comments
2286   PROCEDURE chk_pre_proceeds_bill_noti(
2287                                 itemtype IN  VARCHAR2,
2288                             itemkey   IN  VARCHAR2,
2289                              actid    IN  NUMBER,
2290                             funcmode IN  VARCHAR2,
2291                             resultout OUT NOCOPY VARCHAR2) IS
2292 
2293     -- Get the recipient info for the quote which will be the recipient for bill of sale
2294 --start changed by abhsaxen for Bug#6174484
2295     CURSOR l_recipient_csr (p_qte_id IN NUMBER, p_current_party_id IN NUMBER) IS
2296      SELECT qp.party_object1_id1        recipient_id,
2297             qp.party_jtot_object1_code  recipient_code,
2298             qp.id                       party_id,
2299             qp.email_address            email_id
2300       FROM    okl_quote_parties qp
2301       WHERE  qp.qte_id= p_qte_id
2302       AND    qp.id> NVL(p_current_party_id, 0)
2303       AND    qp.qpt_code LIKE 'RECIPIENT%'
2304       ORDER BY qp.id ASC;
2305 --end changed by abhsaxen for Bug#6174484
2306 --12/20/06 rkuttiya commented following for XMLP
2307      --l_recipient_type          VARCHAR2(3);
2308      l_recipient_type          VARCHAR2(30);
2309     --
2310      l_id                      NUMBER;
2311      l_recipient_code          VARCHAR2(200);
2312      l_recipient_id            NUMBER;
2313      l_current_rec_id          NUMBER;
2314      l_party_id                NUMBER;
2315      l_email_id                VARCHAR2(2000);
2316 
2317 --12/20/06 rkuttiya added for XMLP Project
2318     l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2319     x_msg_count NUMBER;
2320     x_msg_data VARCHAR2(2000);
2321     l_api_version    NUMBER       := 1;
2322     l_init_msg_list  VARCHAR2(1) := 'T';
2323 
2324    CURSOR c_requestor(p_quote_id IN NUMBER) is
2325    SELECT a.last_updated_by last_update_by
2326    FROM okl_txl_quote_lines_v a
2327    WHERE a.qte_id = p_quote_id;
2328 
2329     ERR EXCEPTION;
2330     l_batch_id     NUMBER;
2331     l_xmp_rec      OKL_XMLP_PARAMS_PVT.xmp_rec_type;
2332     lx_xmp_rec     OKL_XMLP_PARAMS_PVT.xmp_rec_type;
2333     l_requestor_id  NUMBER;
2334 
2335   -- get the sender email address
2336     CURSOR c_requestor_csr (p_requestor_id NUMBER)
2337     IS
2338     SELECT nvl(ppf.email_address , fu.email_address) email
2339     FROM   fnd_user fu,
2340            per_people_f ppf
2341     WHERE  fu.employee_id = ppf.person_id (+)
2342     AND    fu.user_id = p_requestor_id;
2343 
2344     l_from_email      VARCHAR2(100);
2345 
2346 -- for debug logging
2347     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_pre_proceeds_bill_noti';
2348     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2349     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2350     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2351 --
2352   BEGIN
2353 
2354    IF (is_debug_procedure_on) THEN
2355        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
2356    END IF;
2357 
2358     --
2359     -- RUN mode
2360     --
2361     IF (funcmode = 'RUN') THEN
2362 
2363       -- Get the values
2364       l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
2365                                          itemkey => itemkey,
2366                                          aname   => 'TRANSACTION_ID');
2367 
2368       l_current_rec_id := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2369                                                        itemkey => itemkey,
2370                                                        aname   => 'CURRENT_REC_ID');
2371 
2372       -- Get recipient info
2373       OPEN  l_recipient_csr ( TO_NUMBER(l_id), l_current_rec_id);
2374       FETCH l_recipient_csr INTO l_recipient_id, l_recipient_code, l_party_id, l_email_id;
2375       CLOSE l_recipient_csr;
2376 
2377       IF l_party_id IS NULL THEN -- no more recipients
2378        resultout := 'COMPLETE:NOTIFY_COMPLETE';
2379          RETURN;
2380      ELSE
2381        resultout := 'COMPLETE:NOTIFY_OUTSTANDING';
2382       END IF;
2383 
2384       -- Set the recipient type
2385 
2386 -- 12/20/06 rkuttiya changed recipient type to Lessee, Vendor as appropriate, for XMLP Project
2387       IF    UPPER(l_recipient_code) = 'OKX_PARTY'      THEN
2388          --l_recipient_type := 'P';
2389            l_recipient_type := 'LESSEE';
2390       ELSIF UPPER(l_recipient_code) = 'OKX_PARTYSITE'  THEN
2391         -- l_recipient_type := 'PS';
2392            l_recipient_type := 'LESSEE';
2393       ELSIF UPPER(l_recipient_code) = 'OKX_PCONTACT'   THEN
2394          --l_recipient_type := 'PC';
2395            l_recipient_type := 'LESSEE';
2396       ELSIF UPPER(l_recipient_code) = 'OKX_VENDOR'     THEN
2397          --l_recipient_type := 'V';
2398            l_recipient_type := 'VENDOR';
2399       ELSIF UPPER(l_recipient_code) = 'OKX_VENDORSITE' THEN
2400          --l_recipient_type := 'VS';
2401            l_recipient_type := 'VENDOR';
2402       ELSIF UPPER(l_recipient_code) = 'OKX_VCONTACT'   THEN
2403          --l_recipient_type := 'VC';
2404            l_recipient_type := 'VENDOR';
2405       ELSIF UPPER(l_recipient_code) = 'OKX_OPERUNIT'   THEN ---WHAT WILL THIS BE
2406          --l_recipient_type := 'P';
2407            l_recipient_type := 'LESSEE';
2408       ELSE -- default is PARTY
2409         -- default is LESSEE from R12 onwards, for XMLP Project
2410         -- l_recipient_type := 'P';
2411            l_recipient_type := 'LESSEE';
2412 
2413       END IF;
2414 
2415      --12/20/06 rkuttiya added for XMLP Project
2416      -- get the requestor email
2417       OPEN c_requestor(l_id);
2418       FETCH c_requestor INTO l_requestor_id;
2419       CLOSE c_requestor;
2420 
2421      OPEN c_requestor_csr(l_requestor_id);
2422      FETCH c_requestor_csr INTO l_from_email;
2423      CLOSE c_requestor_csr;
2424 
2425       WF_ENGINE.SetItemAttrText(
2426                                 itemtype => itemtype,
2427                             itemkey  => itemkey,
2428                             aname    => 'RECIPIENT_ID',
2429                                 avalue   =>  l_recipient_id);
2430 
2431       WF_ENGINE.SetItemAttrText(
2432                                 itemtype => itemtype,
2433                             itemkey  => itemkey,
2434                             aname    => 'RECIPIENT_TYPE',
2435                                 avalue   => l_recipient_type);
2436 
2437       WF_ENGINE.SetItemAttrText(
2438                                 itemtype => itemtype,
2439                             itemkey  => itemkey,
2440                             aname    => 'EMAIL_ADDRESS',
2441                                 avalue   => l_email_id);
2442 
2443 --12/20/06 rkuttiya commented for XMLP project
2444 --set the from email address
2445        WF_ENGINE.SetItemAttrText(
2446                                 itemtype => itemtype,
2447                                                         itemkey  => itemkey,
2448                                                         aname    => 'FROM_ADDRESS',
2449                                       avalue   => l_from_email);
2450 
2451 
2452       WF_ENGINE.SetItemAttrNumber(
2453                                 itemtype => itemtype,
2454                             itemkey  => itemkey,
2455                             aname    => 'CURRENT_REC_ID',
2456                                 avalue   => l_party_id);
2457 
2458      --20-Dec-06 rkuttiya added for XMLP Project
2459      --code for inserting bind parameters into table
2460 
2461           l_xmp_rec.param_name := 'P_QUOTE_ID';
2462           l_xmp_rec.param_value := l_id;
2463           l_xmp_rec.param_type_code := 'NUMBER';
2464 
2465            OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec(
2466                            p_api_version     => l_api_version
2467                           ,p_init_msg_list   => l_init_msg_list
2468                           ,x_return_status   => l_return_status
2469                           ,x_msg_count       => x_msg_count
2470                           ,x_msg_data        => x_msg_data
2471                           ,p_xmp_rec         => l_xmp_rec
2472                           ,x_xmp_rec         => lx_xmp_rec
2473                            );
2474 
2475            IF (is_debug_statement_on) THEN
2476                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2477                'after call to OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec :'||l_return_status);
2478            END IF;
2479 
2480                IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
2481                  RAISE ERR;
2482                END IF;
2483 
2484 
2485                 IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
2486                        l_batch_id := lx_xmp_rec.batch_id;
2487                        wf_engine.SetItemAttrText ( itemtype=> itemtype,
2488                                                    itemkey => itemkey,
2489                                                    aname   => 'BATCH_ID',
2490                                                     avalue  => l_batch_id );
2491                     --    resultout := 'COMPLETE:SUCCESS'; commented by ansethur for XMLP
2492                 ELSE
2493                         resultout := 'COMPLETE:ERROR';
2494                 END IF;
2495       RETURN ;
2496     END IF;
2497 
2498     --
2499     -- CANCEL mode
2500     --
2501     IF (funcmode = 'CANCEL') THEN
2502       --
2503       resultout := 'COMPLETE:';
2504       RETURN;
2505       --
2506     END IF;
2507 
2508     --
2509     -- TIMEOUT mode
2510     --
2511     IF (funcmode = 'TIMEOUT') THEN
2512       --
2513       resultout := 'COMPLETE:';
2514       RETURN;
2515       --
2516     END IF;
2517 
2518 
2519    IF (is_debug_procedure_on) THEN
2520        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2521    END IF;
2522 
2523   EXCEPTION
2524      WHEN OTHERS THEN
2525 
2526 	IF (is_debug_exception_on) THEN
2527             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2528                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
2529         END IF;
2530 
2531         IF l_recipient_csr%ISOPEN THEN
2532           CLOSE l_recipient_csr;
2533         END IF;
2534 
2535         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_bill_noti',
2536                         itemtype, itemkey, actid, funcmode);
2537         RAISE;
2538   END chk_pre_proceeds_bill_noti;
2539 
2540   -- Start of comments
2541   --
2542   -- Procedure Name : chk_pre_proceeds_title_filing
2543   -- Description   : Checks if title filing needed
2544   -- Business Rules :
2545   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
2546   -- Version      : 1.0
2547   -- History         :  RMUNJULU 11-FEB-03 2797035 Changed TRUE to FALSE for msg
2548   --
2549   -- End of comments
2550   PROCEDURE chk_pre_proceeds_title_filing(
2551                                 itemtype IN  VARCHAR2,
2552                             itemkey   IN  VARCHAR2,
2553                              actid    IN  NUMBER,
2554                             funcmode IN  VARCHAR2,
2555                             resultout OUT NOCOPY VARCHAR2) IS
2556 
2557      l_rulv_rec              OKL_RULE_PUB.rulv_rec_type;
2558      l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2559      l_rule_found              VARCHAR2(1) := 'N';
2560      l_contract_id             NUMBER;
2561      -- for debug logging
2562     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'';
2563     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2564     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2565     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2566 
2567   BEGIN
2568 
2569    IF (is_debug_procedure_on) THEN
2570        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
2571    END IF;
2572 
2573     --
2574     -- RUN mode
2575     --
2576     IF (funcmode = 'RUN') THEN
2577 
2578       -- Get the values for term_rec before checking rule
2579       l_contract_id := WF_ENGINE.GetItemAttrNumber(
2580                                            itemtype => itemtype,
2581                                     itemkey => itemkey,
2582                                     aname   => 'CONTRACT_ID');
2583 
2584       -- Call the util api to get the rule info for Title/filing
2585       OKL_AM_UTIL_PVT.get_rule_record(
2586       p_rgd_code         => 'LAAFLG', -- Rule Grp
2587             p_rdf_code         => 'LAFLTL', -- Rule Code
2588       p_chr_id           => l_contract_id,
2589       p_cle_id           => NULL,
2590             x_rulv_rec         => l_rulv_rec,
2591        x_return_status     => l_return_status,
2592       p_message_yn       => FALSE);  -- RMUNJULU 11-FEB-03 2797035 Changed TRUE to FALSE
2593 
2594            IF (is_debug_statement_on) THEN
2595                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2596                'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
2597            END IF;
2598 
2599       IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
2600         IF  l_rulv_rec.jtot_object1_code IS NOT NULL
2601         AND l_rulv_rec.object1_id1 IS NOT NULL THEN
2602           l_rule_found := 'Y';
2603         END IF;
2604       ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
2605         l_return_status := OKL_API.G_RET_STS_SUCCESS;
2606         l_rule_found    := 'N';
2607       END IF;
2608 
2609       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2610         resultout := 'COMPLETE:N';
2611         RAISE G_EXCEPTION;
2612       END IF;
2613 
2614       IF l_rule_found = 'Y' THEN
2615         resultout := 'COMPLETE:Y';
2616       ELSE
2617         resultout := 'COMPLETE:N';
2618       END IF;
2619 
2620       RETURN;
2621     END IF;
2622 
2623     --
2624     -- CANCEL mode
2625     --
2626     IF (funcmode = 'CANCEL') THEN
2627       --
2628       resultout := 'COMPLETE:';
2629       RETURN;
2630       --
2631     END IF;
2632 
2633     --
2634     -- TIMEOUT mode
2635     --
2636     IF (funcmode = 'TIMEOUT') THEN
2637       --
2638       resultout := 'COMPLETE:';
2639       RETURN;
2640       --
2641     END IF;
2642 
2643    IF (is_debug_procedure_on) THEN
2644        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2645    END IF;
2646 
2647   EXCEPTION
2648      WHEN G_EXCEPTION THEN
2649 
2650         IF (is_debug_exception_on) THEN
2651             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
2652         END IF;
2653 
2654         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_title_filing',
2655                         itemtype, itemkey, actid, funcmode);
2656         RAISE;
2657      WHEN OTHERS THEN
2658 
2659         IF (is_debug_exception_on) THEN
2660             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2661                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
2662         END IF;
2663 
2664         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_title_filing',
2665                         itemtype, itemkey, actid, funcmode);
2666         RAISE;
2667   END chk_pre_proceeds_title_filing;
2668 
2669   -- Start of comments
2670   --
2671   -- Procedure Name : pop_pre_proceeds_title_filing
2672   -- Description   : Populate title filing attributes
2673   -- Business Rules :
2674   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
2675   -- Version      : 1.0
2676   --
2677   -- End of comments
2678   PROCEDURE pop_pre_proceeds_title_filing(
2679                                 itemtype IN  VARCHAR2,
2680                             itemkey   IN  VARCHAR2,
2681                              actid    IN  NUMBER,
2682                             funcmode IN  VARCHAR2,
2683                             resultout OUT NOCOPY VARCHAR2) IS
2684 
2685      l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2686      l_contract_id             NUMBER;
2687      l_no_of_recipients        NUMBER;
2688 -- for debug logging
2689     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_pre_proceeds_title_filing';
2690     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2691     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2692     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2693 
2694   BEGIN
2695 
2696    IF (is_debug_procedure_on) THEN
2697        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
2698    END IF;
2699 
2700     --
2701     -- RUN mode
2702     --
2703     IF (funcmode = 'RUN') THEN
2704       -- Get the values for term_rec before checking rule
2705       l_contract_id := WF_ENGINE.GetItemAttrNumber(
2706                                            itemtype => itemtype,
2707                                     itemkey => itemkey,
2708                                     aname   => 'CONTRACT_ID');
2709 
2710       WF_ENGINE.SetItemAttrText(
2711                                 itemtype => itemtype,
2712                             itemkey  => itemkey,
2713                             aname    => 'RECIPIENT_ID',
2714                                 avalue   => '0'); -- initialize
2715 
2716       WF_ENGINE.SetItemAttrNumber(
2717                                 itemtype => itemtype,
2718                             itemkey  => itemkey,
2719                             aname    => 'CURRENT_CLE_ID',
2720                                 avalue   => 0);
2721 
2722       WF_ENGINE.SetItemAttrText(
2723                                 itemtype => itemtype,
2724                             itemkey  => itemkey,
2725                             aname    => 'PROCESS_CODE',
2726                                 avalue   => 'AMQTF'); -- for Title/Filing
2727 
2728       resultout := 'COMPLETE:Y';
2729       RETURN ;
2730     END IF;
2731 
2732     --
2733     -- CANCEL mode
2734     --
2735     IF (funcmode = 'CANCEL') THEN
2736       --
2737       resultout := 'COMPLETE:';
2738       RETURN;
2739       --
2740     END IF;
2741 
2742     --
2743     -- TIMEOUT mode
2744     --
2745     IF (funcmode = 'TIMEOUT') THEN
2746       --
2747       resultout := 'COMPLETE:';
2748       RETURN;
2749       --
2750     END IF;
2751 
2752    IF (is_debug_procedure_on) THEN
2753        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2754    END IF;
2755 
2756   EXCEPTION
2757      WHEN OTHERS THEN
2758 
2759         IF (is_debug_exception_on) THEN
2760             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2761                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
2762         END IF;
2763 
2764         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pop_pre_proceeds_title_filing',
2765                         itemtype, itemkey, actid, funcmode);
2766         RAISE;
2767   END pop_pre_proceeds_title_filing;
2768 
2769 
2770   -- Start of comments
2771   --
2772   -- Procedure Name : chk_pre_proceeds_title_noti
2773   -- Description   : Populate title filing attributes
2774   -- Business Rules :
2775   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
2776   -- Version      : 1.0
2777   --
2778   -- End of comments
2779   PROCEDURE chk_pre_proceeds_title_noti(
2780                                 itemtype IN  VARCHAR2,
2781                             itemkey   IN  VARCHAR2,
2782                              actid    IN  NUMBER,
2783                             funcmode IN  VARCHAR2,
2784                             resultout OUT NOCOPY VARCHAR2) IS
2785 
2786      -- Get the next asset id for the contract (only financial lines)
2787      CURSOR get_asset_for_k_csr ( p_khr_id            IN NUMBER,
2788                                   p_current_asset_id  IN NUMBER) IS
2789       SELECT  OKLV.id             cle_id
2790       FROM    OKC_K_LINES_V       OKLV,
2791               OKC_LINE_STYLES_V   OLSV
2792       WHERE   OKLV.chr_id   = p_khr_id
2793       AND     OKLV.id > NVL(p_current_asset_id , 0)
2794       AND     OKLV.lse_id   = OLSV.id
2795       AND     OLSV.lty_code = 'FREE_FORM1'
2796       ORDER BY OKLV.id ASC;
2797 
2798 
2799      l_rulv_rec              OKL_RULE_PUB.rulv_rec_type;
2800      l_return_status           VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2801      l_rule_found              VARCHAR2(1) := 'N';
2802      l_contract_id             NUMBER;
2803      l_current_rec_id          NUMBER;
2804      l_current_rec_no          NUMBER;
2805      l_cle_id                  NUMBER;
2806      l_recipient_type          VARCHAR2(100); -- ansethur 31-jul-2007 modified for XMLP VARCHAR2(3);
2807 
2808  --12/20/06 rkuttiya added for XMLP Project
2809     x_msg_count NUMBER;
2810     x_msg_data VARCHAR2(2000);
2811     l_api_version    NUMBER       := 1;
2812     l_init_msg_list  VARCHAR2(1) := 'T';
2813 
2814     ERR EXCEPTION;
2815     l_batch_id     NUMBER;
2816     l_xmp_rec      OKL_XMLP_PARAMS_PVT.xmp_rec_type;
2817     lx_xmp_rec     OKL_XMLP_PARAMS_PVT.xmp_rec_type;
2818   --get the recipient email address
2819     CURSOR c_recipient (p_recipient_id IN varchar2)--ansethur 26-jul-2007 XMLP (p_recipient_id IN NUMBER)
2820     IS
2821     SELECT hzp.email_address email
2822     FROM  hz_parties hzp
2823     WHERE hzp.party_id = to_number(p_recipient_id);--ansethur 26-jul-2007 XMLP added to_number
2824 
2825   -- get the sender email address
2826     CURSOR c_agent_csr (c_agent_id NUMBER) IS
2827     SELECT nvl(ppf.email_address , fu.email_address) email
2828     FROM   fnd_user fu,
2829            per_people_f ppf
2830     WHERE  fu.employee_id = ppf.person_id (+)
2831     AND    fu.user_id = c_agent_id;
2832     l_from_email      VARCHAR2(100);
2833     l_to_email        VARCHAR2(100);
2834 
2835      -- ansethur 26-jul-2007 R12B XMLP start changes to fetch the recipient id
2836     l_agent_id               NUMBER;
2837     l_quote_id               NUMBER;
2838 
2839     -- Check quote exists
2840     CURSOR  get_agent_id_csr  ( p_qte_id   IN NUMBER)
2841     IS
2842     SELECT  a.LAST_UPDATED_BY LAST_UPDATED_BY
2843     FROM    OKL_TXL_QUOTE_LINES_V a
2844     WHERE   a.qte_id = p_qte_id;
2845    -- ansethur 26-jul-2007 R12B XMLP End changes
2846 -- for debug logging
2847     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_pre_proceeds_title_noti';
2848     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2849     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2850     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2851 
2852   BEGIN
2853 
2854    IF (is_debug_procedure_on) THEN
2855        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
2856    END IF;
2857 
2858     --
2859     -- RUN mode
2860     --
2861     IF (funcmode = 'RUN') THEN
2862       -- Get the values for term_rec before checking rule
2863       l_contract_id := WF_ENGINE.GetItemAttrNumber(
2864                                            itemtype => itemtype,
2865                                     itemkey => itemkey,
2866                                     aname   => 'CONTRACT_ID');
2867 
2868       l_current_rec_id := WF_ENGINE.GetItemAttrNumber(
2869                                            itemtype => itemtype,
2870                                     itemkey => itemkey,
2871                                     aname   => 'CURRENT_CLE_ID');
2872 
2873       OPEN  get_asset_for_k_csr (l_contract_id, l_current_rec_id);
2874       FETCH get_asset_for_k_csr INTO l_cle_id;
2875       CLOSE get_asset_for_k_csr;
2876 
2877       IF l_cle_id IS NULL THEN
2878        resultout := 'COMPLETE:NOTIFY_COMPLETE';
2879          RETURN;
2880      ELSE
2881        resultout := 'COMPLETE:NOTIFY_OUTSTANDING';
2882       END IF;
2883 
2884       -- Call the util api to get the rule info for Title/filing
2885       OKL_AM_UTIL_PVT.get_rule_record(
2886         p_rgd_code         => 'LAAFLG', -- Rule Grp
2887         p_rdf_code         => 'LAFLTL', -- Rule Code
2888         p_chr_id           => l_contract_id,
2889         p_cle_id           => null, -- ansethur 26-jul-2007 XMLP passed null in place of l_cle_id,
2890         x_rulv_rec         => l_rulv_rec,
2891         x_return_status    => l_return_status,
2892         p_message_yn       => FALSE);
2893 
2894    IF (is_debug_statement_on) THEN
2895        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2896        'after call to okl_am_util_pvt.get_rule_record :'||l_return_status);
2897    END IF;
2898 
2899 
2900      --12/20/06 rkuttiya changed recipient type to LESSEE,VENDOR as appropriate for XMLP Project
2901       -- Set the recipient type
2902       IF    UPPER(l_rulv_rec.jtot_object1_code) = 'OKX_PARTY'      THEN
2903          --l_recipient_type := 'P';
2904            l_recipient_type := 'LESSEE';
2905       ELSIF UPPER(l_rulv_rec.jtot_object1_code) = 'OKX_PARTYSITE'  THEN
2906          --l_recipient_type := 'PS';
2907            l_recipient_type := 'LESSEE';
2908       ELSIF UPPER(l_rulv_rec.jtot_object1_code) = 'OKX_PCONTACT'   THEN
2909          --l_recipient_type := 'PC';
2910            l_recipient_type := 'LESSEE';
2911       ELSIF UPPER(l_rulv_rec.jtot_object1_code) = 'OKX_VENDOR'     THEN
2912          --l_recipient_type := 'V';
2913            l_recipient_type := 'VENDOR';
2914       ELSIF UPPER(l_rulv_rec.jtot_object1_code) = 'OKX_VENDORSITE' THEN
2915          --l_recipient_type := 'VS';
2916            l_recipient_type := 'VENDOR';
2917       ELSIF UPPER(l_rulv_rec.jtot_object1_code) = 'OKX_VCONTACT'   THEN
2918          l_recipient_type := 'VC';
2919          l_recipient_type := 'VENDOR';
2920       ELSE -- default is PARTY
2921        -- 12/20/06 rkuttiya added for XMLP, R12 onwards, default is LESSEE
2922          --l_recipient_type := 'P';
2923            l_recipient_type := 'LESSEE';
2924       END IF;
2925 
2926       WF_ENGINE.SetItemAttrNumber(
2927                                 itemtype => itemtype,
2928                                 itemkey  => itemkey,
2929                                 aname    => 'CURRENT_CLE_ID',
2930                                 avalue   => l_cle_id);
2931 
2932       WF_ENGINE.SetItemAttrText(
2933                                 itemtype => itemtype,
2934                                 itemkey  => itemkey,
2935                                 aname    => 'RECIPIENT_ID',
2936                                 avalue   => l_rulv_rec.object1_id1);
2937 
2938       WF_ENGINE.SetItemAttrText(
2939                                 itemtype => itemtype,
2940                                 itemkey  => itemkey,
2941                                 aname    => 'RECIPIENT_TYPE',
2942                                 avalue   => l_recipient_type);
2943 
2944  --12/20/06 rkuttiya aadded for XMLP Project
2945    --get the email address of the recipient
2946       OPEN c_recipient(l_rulv_rec.object1_id1);
2947       FETCH c_recipient INTO l_to_email;
2948       CLOSE c_recipient;
2949 
2950    -- set the email address attribute
2951        WF_ENGINE.SetItemAttrText(
2952                                   itemtype => itemtype,
2953                                   itemkey  => itemkey,
2954                                   aname    => 'EMAIL_ADDRESS',
2955                                   avalue   => l_to_email);
2956 
2957 
2958 
2959       -- Since the Fulfillment query take p_id which is transaction id
2960       -- set transaction id to cle id
2961       WF_ENGINE.SetItemAttrText(
2962                                   itemtype => itemtype,
2963                                   itemkey  => itemkey,
2964                                   aname    => 'TRANSACTION_ID',
2965                                   avalue   => l_cle_id);
2966   -- ansethur 26-jul-2007 R12B XMLP start changes
2967      l_quote_id := WF_ENGINE.GetItemAttrNumber(
2968                                   itemtype => itemtype,
2969                                   itemkey => itemkey,
2970                                   aname   => 'QUOTE_ID');
2971 
2972      OPEN get_agent_id_csr(l_quote_id);
2973       FETCH get_agent_id_csr INTO l_agent_id;
2974       CLOSE get_agent_id_csr;
2975 
2976       OPEN c_agent_csr(l_agent_id);
2977       FETCH c_agent_csr INTO l_from_email;
2978       CLOSE c_agent_csr;
2979       WF_ENGINE.SetItemAttrText(
2980                                   itemtype => itemtype,
2981                                   itemkey  => itemkey,
2982                                   aname    => 'FROM_ADDRESS',
2983                                   avalue   => l_from_email);
2984   -- ansethur 26-jul-2007 R12B XMLP End changes
2985 
2986 --  12/20/06 rkuttiya added for XMLP Project
2987  --code for inserting bind parameters into table
2988 
2989           l_xmp_rec.param_name := 'P_LINE_ID';
2990           l_xmp_rec.param_value := l_cle_id;
2991           l_xmp_rec.param_type_code := 'NUMBER';
2992 
2993            OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec(
2994                            p_api_version     => l_api_version
2995                           ,p_init_msg_list   => l_init_msg_list
2996                           ,x_return_status   => l_return_status
2997                           ,x_msg_count       => x_msg_count
2998                           ,x_msg_data        => x_msg_data
2999                           ,p_xmp_rec         => l_xmp_rec
3000                           ,x_xmp_rec         => lx_xmp_rec
3001                            );
3002    IF (is_debug_statement_on) THEN
3003        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3004        'after call to OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec :'||l_return_status);
3005    END IF;
3006 
3007                IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
3008                  RAISE ERR;
3009                END IF;
3010 
3011 
3012                 IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
3013                        l_batch_id := lx_xmp_rec.batch_id;
3014                        wf_engine.SetItemAttrText ( itemtype=> itemtype,
3015                                                    itemkey => itemkey,
3016                                                    aname   => 'BATCH_ID',
3017                                                     avalue  => l_batch_id );
3018                     --    resultout := 'COMPLETE:SUCCESS'; commented by ansethur 26-jul-2007 for XMLP
3019                 ELSE
3020                         resultout := 'COMPLETE:ERROR';
3021                 END IF;
3022 
3023       RETURN ;
3024     END IF;
3025 
3026     --
3027     -- CANCEL mode
3028     --
3029     IF (funcmode = 'CANCEL') THEN
3030       --
3031       resultout := 'COMPLETE:';
3032       RETURN;
3033       --
3034     END IF;
3035 
3036     --
3037     -- TIMEOUT mode
3038     --
3039     IF (funcmode = 'TIMEOUT') THEN
3040       --
3041       resultout := 'COMPLETE:';
3042       RETURN;
3043       --
3044     END IF;
3045 
3046    IF (is_debug_procedure_on) THEN
3047        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
3048    END IF;
3049 
3050   EXCEPTION
3051      WHEN OTHERS THEN
3052 
3053         IF (is_debug_exception_on) THEN
3054             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3055                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
3056         END IF;
3057 
3058         IF get_asset_for_k_csr%ISOPEN THEN
3059           CLOSE get_asset_for_k_csr;
3060         END IF;
3061 
3062         WF_CORE.context('OKL_AM_QUOTES_WF' , 'chk_pre_proceeds_title_noti',
3063                         itemtype, itemkey, actid, funcmode);
3064         RAISE;
3065   END chk_pre_proceeds_title_noti;
3066 
3067 
3068   -- Start of comments
3069   --
3070   -- Procedure Name : pop_repurchase_qte_att
3071   -- Description   : Gets the transaction_id which in this case is Quote_Id and
3072   --                  Populates the item attributes for the Repurchase Quote WF
3073   -- Business Rules :
3074   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
3075   -- Version      : 1.0
3076   --
3077   -- End of comments
3078   PROCEDURE pop_repurchase_qte_att(
3079                                 itemtype IN  VARCHAR2,
3080                             itemkey   IN  VARCHAR2,
3081                              actid    IN  NUMBER,
3082                             funcmode IN  VARCHAR2,
3083                             resultout OUT NOCOPY VARCHAR2) IS
3084 
3085     -- Cursor to get the contract details for the quote
3086     CURSOR okl_pop_contract_details_csr ( p_quote_id IN NUMBER) IS
3087       SELECT   K.id,
3088                K.contract_number,
3089                Q.last_updated_by
3090       FROM     OKL_K_HEADERS_FULL_V    K,
3091                OKL_TRX_QUOTES_V        Q
3092       WHERE    K.id    = Q.khr_id
3093       AND      Q.id    = p_quote_id;
3094 
3095     l_transaction_id               VARCHAR2(2000);
3096     l_k_id                         NUMBER;
3097     l_created_by                   NUMBER;
3098     l_k_number                     OKL_K_HEADERS_FULL_V.contract_number%TYPE;
3099 
3100     l_requester           VARCHAR2(200);
3101     l_description         VARCHAR2(200);
3102     l_requester_id        NUMBER;
3103 
3104 -- for debug logging
3105     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_repurchase_qte_att';
3106     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3107     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3108     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3109 
3110   BEGIN
3111 
3112    IF (is_debug_procedure_on) THEN
3113        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
3114    END IF;
3115 
3116     --get attr for transaction id
3117     l_transaction_id := WF_ENGINE.GetItemAttrText(
3118                                            itemtype => itemtype,
3119                                     itemkey => itemkey,
3120                                     aname   => 'TRANSACTION_ID');
3121 
3122     -- From the cursor get the contract details
3123     OPEN  okl_pop_contract_details_csr(TO_NUMBER(l_transaction_id));
3124     FETCH okl_pop_contract_details_csr INTO l_k_id, l_k_number, l_requester_id;
3125     CLOSE okl_pop_contract_details_csr;
3126 
3127     -- Set the contract details to the item attributes of WF
3128     WF_ENGINE.SetItemAttrNumber(
3129                                 itemtype => itemtype,
3130                             itemkey  => itemkey,
3131                             aname    => 'CONTRACT_ID',
3132                                 avalue   => l_k_id);
3133 
3134     WF_ENGINE.SetItemAttrText(
3135                                 itemtype => itemtype,
3136                             itemkey  => itemkey,
3137                             aname    => 'CONTRACT_NUMBER',
3138                                 avalue   => l_k_number);
3139 
3140     -- get the requestor
3141     OKL_AM_WF.GET_NOTIFICATION_AGENT(
3142            itemtype        => itemtype,
3143            itemkey         => itemkey,
3144            actid           => actid,
3145            funcmode        => funcmode,
3146            p_user_id       => l_requester_id,
3147            x_name          => l_requester,
3148            x_description   => l_description);
3149 
3150     WF_ENGINE.SetItemAttrText(
3151                                 itemtype => itemtype,
3152                             itemkey  => itemkey,
3153                             aname    => 'WF_ADMINISTRATOR',
3154                                 avalue   => l_requester);
3155 
3156 
3157    IF (is_debug_procedure_on) THEN
3158        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
3159    END IF;
3160 
3161   EXCEPTION
3162      WHEN OTHERS THEN
3163         IF (is_debug_exception_on) THEN
3164             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3165                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
3166         END IF;
3167         IF okl_pop_contract_details_csr%ISOPEN THEN
3168            CLOSE okl_pop_contract_details_csr;
3169         END IF;
3170         WF_CORE.context('OKL_AM_QUOTES_WF' , 'pop_repurchase_qte_att',
3171                         itemtype, itemkey, actid, funcmode);
3172         RAISE;
3173 
3174   END pop_repurchase_qte_att;
3175 
3176 
3177 
3178   -- Start of comments
3179   --
3180   -- Procedure Name   : repurchase_qte_asset_dispose
3181   -- Description   : Call to Asset dispose, this procedure called from
3182   --                  repurchase quote WF
3183   -- Business Rules   :
3184   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
3185   -- Version    : 1.0
3186   -- History          : SECHAWLA 11-MAR-03
3187   --                    Modified to the logic to consider only the Repurchase sale price amount(instead of the
3188   --                    sum total of all quote line type amounts) as the proceeds of sale for Repurchase quotes
3189   -- End of comments
3190   PROCEDURE repurchase_qte_asset_dispose(
3191                                 itemtype IN  VARCHAR2,
3192     itemkey   IN  VARCHAR2,
3193            actid  IN  NUMBER,
3194            funcmode IN  VARCHAR2,
3195     resultout       OUT NOCOPY VARCHAR2) IS
3196 
3197 
3198     -- SECHAWLA 11-MAR-03 : Modified the cursor below to select only the Repurchase sale price amount as proceeds
3199     -- of sale, instead of the sum total of all quote line type amounts.
3200 
3201     -- Cursor to get the sum of the amounts of all quote lines for the quote ( for a asset)
3202    /* CURSOR l_sum_amt_csr ( p_qte_id IN NUMBER) IS
3203     SELECT SUM(amount)   total_amount,
3204            kle_id        kle_id
3205     FROM   OKL_TXL_QUOTE_LINES_V
3206     WHERE  qte_id = p_qte_id
3207     AND    qlt_code <> 'AMCTAX'
3208     GROUP BY kle_id;
3209     */
3210 
3211     CURSOR l_amt_csr ( p_qte_id IN NUMBER) IS
3212     SELECT nvl(amount,0) amount,  kle_id    -- SECHAWLA 11-MAR-03 : nvl the amount
3213     FROM   OKL_TXL_QUOTE_LINES_V
3214     WHERE  qte_id = p_qte_id
3215     AND    qlt_code = 'AMBSPR' ;
3216 
3217     --SECHAWLA 11-MAR-03 : Added the following cursor
3218     -- This cursor is used when there are no quote lines of type 'AMBSPR'. In this case 0 is passed as proceeds_of_sale
3219     -- to Asset Disposition
3220     CURSOR l_quotelines_csr( p_qte_id IN NUMBER) IS
3221     SELECT DISTINCT kle_id
3222     FROM   OKL_TXL_QUOTE_LINES_V
3223     WHERE  qte_id = p_qte_id;
3224 
3225     -- RRAVIKIR Legal Entity Changes
3226     CURSOR fetch_art_id(cp_qte_id IN NUMBER) IS
3227     SELECT art_id
3228     FROM   OKL_TRX_QUOTES_B
3229     WHERE  id = cp_qte_id;
3230 
3231     CURSOR fetch_legal_entity_id(cp_art_id IN NUMBER) IS
3232     SELECT legal_entity_id
3233     FROM   OKL_ASSET_RETURNS_ALL_B
3234     WHERE  id = cp_art_id;
3235 
3236     l_legal_entity_id   NUMBER;
3237     l_art_id            NUMBER;
3238     -- Legal Entity Changes End
3239 
3240 
3241    -- l_sum_amt_rec          l_amt_csr%ROWTYPE;
3242     l_termination_date     DATE;
3243     lx_msg_count           NUMBER;
3244     lx_msg_data            VARCHAR2(32000);
3245     l_return_status        VARCHAR2(1);
3246     l_api_version          NUMBER := 1;
3247     l_transaction_id       VARCHAR(200);
3248 
3249     --SECHAWLA 11-MAR-03 : new declarations
3250     l_line_count           NUMBER := 0;
3251 
3252 -- for debug logging
3253     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'repurchase_qte_asset_dispose';
3254     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3255     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3256     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3257 
3258   BEGIN
3259 
3260    IF (is_debug_procedure_on) THEN
3261        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
3262    END IF;
3263 
3264     --
3265     -- RUN mode
3266     --
3267     IF (funcmode = 'RUN') THEN
3268       -- Get the values for dispose_asset before calling the dispose_asset api
3269 
3270       l_transaction_id := WF_ENGINE.GetItemAttrText(
3271                                           itemtype => itemtype,
3272                                    itemkey  => itemkey,
3273                                    aname    => 'TRANSACTION_ID');
3274 
3275       -- get the amount
3276       l_line_count := 0;
3277 
3278       -- RRAVIKIR Legal Entity Changes
3279       l_transaction_id := TO_NUMBER(l_transaction_id);
3280 
3281       OPEN fetch_art_id(cp_qte_id => l_transaction_id);
3282       FETCH fetch_art_id INTO l_art_id;
3283       CLOSE fetch_art_id;
3284 
3285       IF (l_art_id is null or l_art_id = OKC_API.G_MISS_NUM) THEN
3286         resultout := 'COMPLETE:N';
3287         RAISE G_EXCEPTION;
3288       END IF;
3289 
3290       /*IF (l_art_id is null or l_art_id = OKC_API.G_MISS_NUM) THEN
3291           OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
3292                               p_msg_name     => g_required_value,
3293                               p_token1       => g_col_name_token,
3294                               p_token1_value => 'l_art_id');
3295           RAISE OKC_API.G_EXCEPTION_ERROR;
3296        END IF;*/
3297 
3298       OPEN fetch_legal_entity_id(cp_art_id => l_art_id);
3299       FETCH fetch_legal_entity_id INTO l_legal_entity_id;
3300       CLOSE fetch_legal_entity_id;
3301 
3302       IF (l_legal_entity_id is null or l_legal_entity_id = OKC_API.G_MISS_NUM) THEN
3303         resultout := 'COMPLETE:N';
3304         RAISE G_EXCEPTION;
3305       END IF;
3306       /*IF (l_legal_entity_id is null or l_legal_entity_id = OKC_API.G_MISS_NUM) THEN
3307           OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
3308                               p_msg_name     => g_required_value,
3309                               p_token1       => g_col_name_token,
3310                               p_token1_value => 'l_legal_entity_id');
3311           RAISE OKC_API.G_EXCEPTION_ERROR;
3312       END IF;      */
3313       -- Legal Entity Changes End
3314 
3315       FOR l_amt_rec IN l_amt_csr ( l_transaction_id ) LOOP -- SECHAWLA 11-MAR-03 Changed the cursor name
3316 
3317         l_line_count := l_line_count + 1;
3318 
3319         -- call asset dispose retirement
3320         OKL_AM_ASSET_DISPOSE_PUB.dispose_asset(
3321                  p_api_version            => l_api_version,
3322                  p_init_msg_list          => OKL_API.G_TRUE, --**** SHOULD THIS BE SET TO TRUE
3323                  x_return_status          => l_return_status,
3324                  x_msg_count              => lx_msg_count,
3325                  x_msg_data               => lx_msg_data,
3326                  p_financial_asset_id         => l_amt_rec.kle_id,
3327                  p_quantity                   => NULL,
3328                  p_proceeds_of_sale           => l_amt_rec.amount, -- SECHAWLA 11-MAR-03 Changed the column name
3329                  p_legal_entity_id            => l_legal_entity_id);  -- RRAVIKIR Legal Entity Changes
3330 
3331    IF (is_debug_statement_on) THEN
3332        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3333        'after call to OKL_AM_ASSET_DISPOSE_PUB.dispose_asset :'||l_return_status);
3334    END IF;
3335 
3336 
3337         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3338           resultout := 'COMPLETE:N';
3339           RAISE G_EXCEPTION;
3340         END IF;
3341 
3342       END LOOP;
3343 
3344       -- SECHAWLA 11-MAR-03 : There were no quote lines of type 'AMBSPR'. Call asset disposition with 0 proceeds_of_sale
3345       IF l_line_count = 0 THEN
3346          FOR l_quotelines_rec IN l_quotelines_csr(l_transaction_id) LOOP
3347 
3348              OKL_AM_ASSET_DISPOSE_PUB.dispose_asset(
3349                  p_api_version            => l_api_version,
3350                  p_init_msg_list          => OKL_API.G_TRUE, --**** SHOULD THIS BE SET TO TRUE
3351                  x_return_status          => l_return_status,
3352                  x_msg_count              => lx_msg_count,
3353                  x_msg_data               => lx_msg_data,
3354                  p_financial_asset_id         => l_quotelines_rec.kle_id,
3355                  p_quantity                   => NULL,
3356                  p_proceeds_of_sale           => 0,
3357                  p_legal_entity_id            => l_legal_entity_id); -- RRAVIKIR Legal Entity Changes
3358 
3359    IF (is_debug_statement_on) THEN
3360        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3361        'after call to OKL_AM_ASSET_DISPOSE_PUB.dispose_asset :'||l_return_status);
3362    END IF;
3363 
3364             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3365                 resultout := 'COMPLETE:N';
3366                 RAISE G_EXCEPTION;
3367             END IF;
3368 
3369          END LOOP;
3370       END IF;
3371       -- SECHAWLA 11-MAR-03 : end new code
3372 
3373       resultout := 'COMPLETE:Y';
3374       RETURN ;
3375     END IF;
3376 
3377     --
3378     -- CANCEL mode
3379     --
3380     IF (funcmode = 'CANCEL') THEN
3381       --
3382       resultout := 'COMPLETE:';
3383       RETURN;
3384       --
3385     END IF;
3386 
3387     --
3388     -- TIMEOUT mode
3389     --
3390     IF (funcmode = 'TIMEOUT') THEN
3391       --
3392       resultout := 'COMPLETE:';
3393       RETURN;
3394       --
3395     END IF;
3396 
3397    IF (is_debug_procedure_on) THEN
3398        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
3399    END IF;
3400 
3401   EXCEPTION
3402      WHEN G_EXCEPTION THEN
3403 
3404         IF (is_debug_exception_on) THEN
3405             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
3406         END IF;
3407         -- SECHAWLA 11-MAR-03 : Added the cursor close statements
3408         IF l_amt_csr%ISOPEN THEN
3409            CLOSE l_amt_csr;
3410         END IF;
3411 
3412         IF l_quotelines_csr%ISOPEN THEN
3413            CLOSE l_quotelines_csr;
3414         END IF;
3415 
3416         -- RRAVIKIR Legal Entity Changes
3417         IF fetch_legal_entity_id%ISOPEN THEN
3418           CLOSE fetch_legal_entity_id;
3419         END IF;
3420 
3421         IF fetch_art_id%ISOPEN THEN
3422           CLOSE fetch_art_id;
3423         END IF;
3424         -- Legal Entity Changes End
3425 
3426         WF_CORE.context('OKL_AM_QUOTES_WF' , 'repurchase_qte_asset_dispose',
3427                         itemtype, itemkey, actid, funcmode);
3428         RAISE;
3429 
3430      WHEN OTHERS THEN
3431         IF (is_debug_exception_on) THEN
3432             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3433                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
3434         END IF;
3435 
3436         -- SECHAWLA 11-MAR-03 : Added the cursor close statements
3437         IF l_amt_csr%ISOPEN THEN
3438            CLOSE l_amt_csr;
3439         END IF;
3440 
3441         IF l_quotelines_csr%ISOPEN THEN
3442            CLOSE l_quotelines_csr;
3443         END IF;
3444 
3445         -- RRAVIKIR Legal Entity Changes
3446         IF fetch_legal_entity_id%ISOPEN THEN
3447           CLOSE fetch_legal_entity_id;
3448         END IF;
3449 
3450         IF fetch_art_id%ISOPEN THEN
3451           CLOSE fetch_art_id;
3452         END IF;
3453         -- Legal Entity Changes End
3454 
3455         WF_CORE.context('OKL_AM_QUOTES_WF' , 'repurchase_qte_asset_dispose',
3456                         itemtype, itemkey, actid, funcmode);
3457         RAISE;
3458 
3459   END repurchase_qte_asset_dispose;
3460 
3461   -- Start of comments
3462   --
3463   -- Procedure Name : update_asset_return_status
3464   -- Description   : To update the asset return status if there is a return
3465   -- Business Rules :
3466   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
3467   -- Version      : 1.0
3468   --
3469   -- End of comments
3470   PROCEDURE update_asset_return_status(
3471                                 itemtype IN  VARCHAR2,
3472                             itemkey   IN  VARCHAR2,
3473                              actid    IN  NUMBER,
3474                             funcmode IN  VARCHAR2,
3475                             resultout OUT NOCOPY VARCHAR2) IS
3476 
3477 
3478     -- Cursor to get the sum of the amounts of all quote lines for the quote ( for a asset)
3479     CURSOR l_return_csr ( p_qte_id IN NUMBER) IS
3480     SELECT QLT.kle_id kle_id,
3481            RET.id     ret_id
3482     FROM   OKL_ASSET_RETURNS_V ret,
3483            OKL_TXL_QUOTE_LINES_V qlt
3484     WHERE  RET.kle_id = QLT.kle_id
3485     AND    QLT.qte_id = p_qte_id
3486     AND    QLT.qlt_code <> 'AMCTAX'
3487     GROUP BY QLT.kle_id, RET.id;
3488 
3489 
3490     l_transaction_id            VARCHAR2(2000);
3491     l_api_version               NUMBER := 1;
3492     lx_msg_count                NUMBER;
3493     lx_msg_data                 VARCHAR2(32000);
3494     l_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3495     lp_artv_rec                 OKL_ASSET_RETURNS_PUB.artv_rec_type;
3496     lx_artv_rec                 OKL_ASSET_RETURNS_PUB.artv_rec_type;
3497 
3498 -- for debug logging
3499     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'update_asset_return_status';
3500     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3501     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3502     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3503 
3504   BEGIN
3505 
3506    IF (is_debug_procedure_on) THEN
3507        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
3508    END IF;
3509 
3510     --
3511     -- RUN mode
3512     --
3513     IF (funcmode = 'RUN') THEN
3514 
3515       --get attr for transaction id which is the quote id for quote WFs
3516       l_transaction_id := WF_ENGINE.GetItemAttrText(
3517                                            itemtype => itemtype,
3518                                     itemkey => itemkey,
3519                                     aname   => 'TRANSACTION_ID');
3520 
3521       -- get the return rec
3522       FOR l_return_rec IN l_return_csr ( l_transaction_id) LOOP
3523 
3524         lp_artv_rec.id := l_return_rec.ret_id;
3525         lp_artv_rec.ars_code := 'REPURCHASE'; --'OKL_ASSET_RETURN_STATUS'
3526 
3527         -- Call the update of the asset return
3528         OKL_ASSET_RETURNS_PUB.update_asset_returns (
3529            p_api_version      => l_api_version,
3530            p_init_msg_list    => OKL_API.G_FALSE,
3531            x_return_status    => l_return_status,
3532            x_msg_count        => lx_msg_count,
3533            x_msg_data         => lx_msg_data,
3534            p_artv_rec         => lp_artv_rec,
3535            x_artv_rec         => lx_artv_rec);
3536 
3537    IF (is_debug_statement_on) THEN
3538        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3539        'after call to OKL_ASSET_RETURNS_PUB.update_asset_returns :'||l_return_status);
3540    END IF;
3541 
3542 
3543         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3544           resultout := 'COMPLETE:N';
3545           RAISE G_EXCEPTION;
3546         END IF;
3547       END LOOP;
3548 
3549       resultout := 'COMPLETE:Y';
3550       RETURN ;
3551     END IF;
3552 
3553     --
3554     -- CANCEL mode
3555     --
3556     IF (funcmode = 'CANCEL') THEN
3557       --
3558       resultout := 'COMPLETE:';
3559       RETURN;
3560       --
3561     END IF;
3562 
3563     --
3564     -- TIMEOUT mode
3565     --
3566     IF (funcmode = 'TIMEOUT') THEN
3567       --
3568       resultout := 'COMPLETE:';
3569       RETURN;
3570       --
3571     END IF;
3572 
3573    IF (is_debug_procedure_on) THEN
3574        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
3575    END IF;
3576 
3577   EXCEPTION
3578      WHEN G_EXCEPTION THEN
3579 
3580 	IF (is_debug_exception_on) THEN
3581             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
3582         END IF;
3583 
3584         IF (is_debug_exception_on) THEN
3585             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3586                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
3587         END IF;
3588 
3589         WF_CORE.context('OKL_AM_QUOTES_WF' , 'update_asset_return_status',
3590                         itemtype, itemkey, actid, funcmode);
3591         RAISE;
3592      WHEN OTHERS THEN
3593         IF (is_debug_exception_on) THEN
3594             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
3595         END IF;
3596         WF_CORE.context('OKL_AM_QUOTES_WF' , 'update_asset_return_status',
3597                         itemtype, itemkey, actid, funcmode);
3598         RAISE;
3599 
3600   END update_asset_return_status;
3601 
3602   -- Start of comments
3603   --
3604   -- Procedure Name : create_invoice
3605   -- Description : Generic procedure, can be called from any quote WF
3606   --                  Will create invoice for the quote
3607   -- Business Rules :
3608   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
3609   -- Version  : 1.0
3610   -- History        : RMUNJULU 09-MAY-03 2949544 Changed condition before call to
3611   --                  invoice api
3612   --                : rmunjulu EDAT modified to get quote amount excluding
3613   --                  Estimated Billing Adjustment if partial quote
3614   --
3615   -- End of comments
3616   PROCEDURE create_invoice(
3617                                 itemtype IN  VARCHAR2,
3618                             itemkey   IN  VARCHAR2,
3619                              actid    IN  NUMBER,
3620                             funcmode IN  VARCHAR2,
3621                             resultout OUT NOCOPY VARCHAR2) IS
3622 
3623 
3624    -- Returns previously billed records
3625     CURSOR okl_get_inv_csr ( p_qte_id IN NUMBER) IS
3626   SELECT tai.id
3627   FROM   OKL_TRX_AR_INVOICES_V tai
3628   WHERE   tai.qte_id = p_qte_id;
3629 
3630 /*
3631     -- Get the quote amount
3632     CURSOR okl_get_qte_amt_csr(p_qte_id IN NUMBER) IS
3633     SELECT SUM(amount)
3634     FROM   OKL_TXL_QUOTE_LINES_V
3635     WHERE  qte_id = p_qte_id;
3636 */
3637 
3638     -- RMUNJULU 09-MAY-03 2949544
3639  -- Returns Quote Line which needs invoice creation
3640  CURSOR l_qlt_csr (p_qte_id IN NUMBER) IS
3641   SELECT qlt.kle_id          kle_id
3642   FROM okl_txl_quote_lines_b qlt,
3643        fnd_lookups          flo
3644   WHERE qlt.qte_id      = p_qte_id
3645   AND   qlt.amount      NOT IN (OKL_API.G_MISS_NUM, 0)
3646   AND  flo.lookup_type  = 'OKL_QUOTE_LINE_TYPE'
3647   AND  flo.lookup_code  = qlt.qlt_code
3648   AND  qlt.qlt_code  NOT IN (
3649           'AMCFIA',  -- Used to save quote assets, not amounts
3650           'AMCTAX',  -- Estimated tax, AR will recalculate tax
3651           'AMYOUB')  -- Outstanding balances are already billed
3652         AND     ROWNUM = 1;
3653 
3654     -- rmunjulu EDAT
3655     -- get the quote elements also excluding Estimated Billing Adjustment
3656     -- as it is not billed as part of partial termination quote
3657  CURSOR l_partial_qlt_csr (p_qte_id IN NUMBER) IS
3658   SELECT qlt.kle_id          kle_id
3659   FROM okl_txl_quote_lines_b qlt,
3660        fnd_lookups          flo
3661   WHERE qlt.qte_id      = p_qte_id
3662   AND   qlt.amount      NOT IN (OKL_API.G_MISS_NUM, 0)
3663   AND  flo.lookup_type  = 'OKL_QUOTE_LINE_TYPE'
3664   AND  flo.lookup_code  = qlt.qlt_code
3665   AND  qlt.qlt_code  NOT IN (
3666           'AMCFIA',  -- Used to save quote assets, not amounts
3667           'AMCTAX',  -- Estimated tax, AR will recalculate tax
3668           'AMYOUB',        -- Outstanding balances are already billed
3669        'BILL_ADJST') -- Estimated Billing Adjustment
3670         AND     ROWNUM = 1;
3671 
3672     -- rmunjulu EDAT
3673     -- get the quote details (if partial or full)
3674     CURSOR l_qte_details_csr (p_qte_id IN NUMBER) IS
3675         SELECT nvl(qte.partial_yn,'N') partial_yn
3676         ,qte.khr_id khr_id   -- gboomina added for bug#5265083
3677         FROM   okl_trx_quotes_v qte
3678         WHERE  qte.id = p_qte_id;
3679 
3680     l_api_version               NUMBER := 1;
3681     lx_msg_count                NUMBER;
3682     lx_msg_data                 VARCHAR2(2000);
3683     l_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3684     lx_taiv_tbl                 OKL_AM_INVOICES_PVT.taiv_tbl_type;
3685     l_transaction_id            VARCHAR2(200);
3686     l_invoice_id                NUMBER:= -9999;
3687     l_qte_amt                   NUMBER := -9999;
3688 
3689 
3690     -- RMUNJULU 09-MAY-03 2949544
3691     l_kle_id NUMBER := OKL_API.G_MISS_NUM;
3692     l_invoice_needed_yn VARCHAR2(1) := 'N';
3693 
3694     -- rmunjulu EDAT
3695     l_qte_partial_yn VARCHAR2(3);
3696 
3697     -- gboomina Added for bug# 5265083 - Start
3698     l_contract_id okl_trx_quotes_v.khr_id%type;
3699     l_org_id                         NUMBER;
3700     -- gboomina Bug 5265083 - End
3701   -- for debug logging
3702     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'create_invoice';
3703     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3704     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3705     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3706 
3707   BEGIN
3708 
3709    IF (is_debug_procedure_on) THEN
3710        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
3711    END IF;
3712 
3713 
3714     --
3715     -- RUN mode
3716     --
3717     IF (funcmode = 'RUN') THEN
3718 
3719       --get attr for transaction id which is the quote id for quote WFs
3720       l_transaction_id := WF_ENGINE.GetItemAttrText(
3721                                            itemtype => itemtype,
3722                                     itemkey => itemkey,
3723                                     aname   => 'TRANSACTION_ID');
3724 
3725       OPEN  okl_get_inv_csr(TO_NUMBER(l_transaction_id));
3726       FETCH okl_get_inv_csr INTO l_invoice_id;
3727       CLOSE okl_get_inv_csr;
3728 
3729       -- Create invoice if no invoice created already
3730       IF l_invoice_id IS NULL OR l_invoice_id = -9999 THEN
3731 
3732 /*
3733         OPEN  okl_get_qte_amt_csr(TO_NUMBER(l_transaction_id));
3734         FETCH okl_get_qte_amt_csr INTO l_qte_amt;
3735         CLOSE okl_get_qte_amt_csr;
3736 */
3737 
3738         -- rmunjulu EDAT
3739         -- Get if Quote Full or Partial
3740   OPEN  l_qte_details_csr (TO_NUMBER(l_transaction_id ));
3741   -- gboomina Bug 5265083 - Start
3742                 FETCH l_qte_details_csr INTO l_qte_partial_yn,l_contract_id;
3743   -- gboomina Bug 5265083 - End
3744   CLOSE l_qte_details_csr;
3745 
3746         -- rmunjulu EDAT
3747         IF  nvl(l_qte_partial_yn, 'N') = 'N' THEN -- full termination
3748            -- RMUNJULU 09-MAY-03 2949544 Cursor checks if any atleast one quote line exists
3749            -- which needs invoice to be created
3750            -- rmunjulu EDAT -- check for full termination
3751            OPEN  l_qlt_csr(TO_NUMBER(l_transaction_id));
3752            FETCH l_qlt_csr INTO l_kle_id;
3753            IF l_qlt_csr%FOUND THEN
3754               l_invoice_needed_yn := 'Y';
3755            END IF;
3756            CLOSE l_qlt_csr;
3757   ELSE
3758      -- rmunjulu EDAT -- check for partial termination quote
3759            OPEN  l_partial_qlt_csr(TO_NUMBER(l_transaction_id));
3760            FETCH l_partial_qlt_csr INTO l_kle_id;
3761            IF l_partial_qlt_csr%FOUND THEN
3762               l_invoice_needed_yn := 'Y';
3763            END IF;
3764            CLOSE l_partial_qlt_csr;
3765   END IF;
3766 
3767         -- RMUNJULU 09-MAY-03 2949549 Changed condition to check if atleast one
3768         -- quote line exists which has invoices need to be created
3769         IF nvl(l_invoice_needed_yn,'N') = 'Y' THEN
3770 
3771    -- gboomian Bug 5265083 - Start
3772           l_org_id := OKL_AM_UTIL_PVT.get_chr_org_id(l_contract_id);
3773           -- Set the contract org id to the application
3774           --DBMS_APPLICATION_INFO.set_client_info (l_org_id);
3775           MO_GLOBAL.set_policy_context ('S', l_org_id); -- Bug 6140786
3776    -- gboomian Bug 5265083 - End
3777 
3778           -- Create invoice
3779           OKL_AM_INVOICES_PVT.Create_Quote_Invoice(
3780                 p_api_version     => l_api_version,
3781                 p_init_msg_list   => OKL_API.G_FALSE,
3782                 x_return_status   => l_return_status,
3783                 x_msg_count       => lx_msg_count,
3784                 x_msg_data        => lx_msg_data,
3785                 p_quote_id        => TO_NUMBER(l_transaction_id),
3786                 x_taiv_tbl        => lx_taiv_tbl);
3787 
3788    IF (is_debug_statement_on) THEN
3789        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3790        'after call to OKL_AM_INVOICES_PVT.Create_Quote_Invoice :'||l_return_status);
3791    END IF;
3792 
3793 
3794         END IF;
3795 
3796       END IF;
3797 
3798       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3799         resultout := 'COMPLETE:N';
3800         RAISE G_EXCEPTION;
3801       ELSE
3802         resultout := 'COMPLETE:Y';
3803       END IF;
3804       RETURN ;
3805     END IF;
3806 
3807     --
3808     -- CANCEL mode
3809     --
3810     IF (funcmode = 'CANCEL') THEN
3811       --
3812       resultout := 'COMPLETE:';
3813       RETURN;
3814       --
3815     END IF;
3816 
3817     --
3818     -- TIMEOUT mode
3819     --
3820     IF (funcmode = 'TIMEOUT') THEN
3821       --
3822       resultout := 'COMPLETE:';
3823       RETURN;
3824       --
3825     END IF;
3826 
3827 
3828    IF (is_debug_procedure_on) THEN
3829        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
3830    END IF;
3831 
3832   EXCEPTION
3833      WHEN G_EXCEPTION THEN
3834         IF (is_debug_exception_on) THEN
3835             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
3836         END IF;
3837 
3838         IF okl_get_inv_csr%ISOPEN THEN
3839           CLOSE okl_get_inv_csr;
3840         END IF;
3841 
3842         -- rmunjulu EDAT
3843         IF l_qte_details_csr%ISOPEN THEN
3844           CLOSE l_qte_details_csr;
3845         END IF;
3846 
3847         -- rmunjulu EDAT
3848         IF l_partial_qlt_csr%ISOPEN THEN
3849           CLOSE l_partial_qlt_csr;
3850         END IF;
3851         /*
3852         IF okl_get_qte_amt_csr%ISOPEN THEN
3853           CLOSE okl_get_qte_amt_csr;
3854         END IF;
3855         */
3856 
3857         -- RMUNJULU 09-MAY-03 2949544
3858         IF l_qlt_csr%ISOPEN THEN
3859           CLOSE l_qlt_csr;
3860         END IF;
3861         WF_CORE.context('OKL_AM_QUOTES_WF' , 'create_invoice',
3862                         itemtype, itemkey, actid, funcmode);
3863         RAISE;
3864      WHEN OTHERS THEN
3865 
3866         IF (is_debug_exception_on) THEN
3867             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3868                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
3869         END IF;
3870 
3871         IF okl_get_inv_csr%ISOPEN THEN
3872           CLOSE okl_get_inv_csr;
3873         END IF;
3874 
3875         -- rmunjulu EDAT
3876         IF l_qte_details_csr%ISOPEN THEN
3877           CLOSE l_qte_details_csr;
3878         END IF;
3879 
3880         -- rmunjulu EDAT
3881         IF l_partial_qlt_csr%ISOPEN THEN
3882           CLOSE l_partial_qlt_csr;
3883         END IF;
3884 
3885         /*
3886         IF okl_get_qte_amt_csr%ISOPEN THEN
3887           CLOSE okl_get_qte_amt_csr;
3888         END IF;
3889         */
3890         -- RMUNJULU 09-MAY-03 2949544
3891         IF l_qlt_csr%ISOPEN THEN
3892           CLOSE l_qlt_csr;
3893         END IF;
3894         WF_CORE.context('OKL_AM_QUOTES_WF' , 'create_invoice',
3895                         itemtype, itemkey, actid, funcmode);
3896         RAISE;
3897   END create_invoice;
3898 
3899 
3900   -- Start of comments
3901   --
3902   -- Procedure Name : update_quote_status
3903   -- Description   : Generic procedure, can be called from any quote WF
3904   --                  Will update the quote status to COMPLETE for the quote id
3905   --                  which is the transaction id for WF
3906   -- Business Rules :
3907   -- Parameters    : itemtype, itemkey, actid, funcmode, resultout
3908   -- Version      : 1.0
3909   --
3910   -- End of comments
3911   PROCEDURE update_quote_status(
3912                                 itemtype IN  VARCHAR2,
3913                             itemkey   IN  VARCHAR2,
3914                              actid    IN  NUMBER,
3915                             funcmode IN  VARCHAR2,
3916                             resultout OUT NOCOPY VARCHAR2) IS
3917 
3918     l_transaction_id            VARCHAR2(2000);
3919     l_api_version               NUMBER := 1;
3920     lx_msg_count                NUMBER;
3921     lx_msg_data                 VARCHAR2(2000);
3922     l_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3923     lp_qtev_rec                 OKL_TRX_QUOTES_PUB.qtev_rec_type;
3924     lx_qtev_rec                 OKL_TRX_QUOTES_PUB.qtev_rec_type;
3925     l_quote_status              VARCHAR2(200) := 'COMPLETE';--'OKL_QUOTE_STATUS'
3926     -- Start : PRASJAIN : Bug 6324373
3927     l_quote_status_err          VARCHAR2(200) := 'ACCEPTED';--'OKL_QUOTE_STATUS'
3928     l_tmt_status_code           VARCHAR2(200);
3929 
3930     -- Fetch tmt_status_code
3931     CURSOR c_tmt_status_code_csr (p_qte_id IN NUMBER) IS
3932         SELECT tmt_status_code
3933           FROM okl_trx_contracts trx
3934          WHERE trx.qte_id = p_qte_id;
3935     -- End : PRASJAIN : Bug 6324373
3936 -- for debug logging
3937     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'update_quote_status';
3938     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3939     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3940     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3941   BEGIN
3942 
3943    IF (is_debug_procedure_on) THEN
3944        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
3945    END IF;
3946 
3947     --
3948     -- RUN mode
3949     --
3950     IF (funcmode = 'RUN') THEN
3951       --get attr for transaction id which is the quote id for quote WFs
3952       l_transaction_id := WF_ENGINE.GetItemAttrText(
3953                                            itemtype => itemtype,
3954                                     itemkey => itemkey,
3955                                     aname   => 'TRANSACTION_ID');
3956 
3957       -- set the qtev_rec_type of quote header
3958       lp_qtev_rec.id                    :=    TO_NUMBER(l_transaction_id);
3959 
3960       -- Start : PRASJAIN : Bug 6324373
3961       OPEN  c_tmt_status_code_csr(lp_qtev_rec.id);
3962       FETCH c_tmt_status_code_csr INTO l_tmt_status_code;
3963       CLOSE c_tmt_status_code_csr;
3964 
3965       IF l_tmt_status_code = 'ERROR' THEN
3966         lp_qtev_rec.qst_code   :=    l_quote_status_err;
3967       ELSE
3968         lp_qtev_rec.qst_code   :=    l_quote_status;
3969       END IF;
3970       -- End : PRASJAIN : Bug 6324373
3971 
3972       -- Call the update of the quote header api
3973       OKL_TRX_QUOTES_PUB.update_trx_quotes (
3974            p_api_version                  => l_api_version,
3975            p_init_msg_list                => OKL_API.G_FALSE,
3976            x_return_status                => l_return_status,
3977            x_msg_count                    => lx_msg_count,
3978            x_msg_data                     => lx_msg_data,
3979            p_qtev_rec                     => lp_qtev_rec,
3980            x_qtev_rec                     => lx_qtev_rec);
3981 
3982       IF (is_debug_statement_on) THEN
3983        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3984        'after call to  OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3985       END IF;
3986 
3987       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3988         resultout := 'COMPLETE:N';
3989         RAISE G_EXCEPTION;
3990       ELSE
3991         resultout := 'COMPLETE:Y';
3992       END IF;
3993       RETURN ;
3994     END IF;
3995 
3996     --
3997     -- CANCEL mode
3998     --
3999     IF (funcmode = 'CANCEL') THEN
4000       --
4001       resultout := 'COMPLETE:';
4002       RETURN;
4003       --
4004     END IF;
4005 
4006     --
4007     -- TIMEOUT mode
4008     --
4009     IF (funcmode = 'TIMEOUT') THEN
4010       --
4011       resultout := 'COMPLETE:';
4012       RETURN;
4013       --
4014     END IF;
4015 
4016    IF (is_debug_procedure_on) THEN
4017        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
4018    END IF;
4019 
4020   EXCEPTION
4021      WHEN G_EXCEPTION THEN
4022 
4023         IF (is_debug_exception_on) THEN
4024             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
4025         END IF;
4026 
4027         -- Start : PRASJAIN : Bug 6324373
4028         IF c_tmt_status_code_csr%ISOPEN THEN
4029           CLOSE c_tmt_status_code_csr;
4030         END IF;
4031         -- End : PRASJAIN : Bug 6324373
4032 
4033         WF_CORE.context('OKL_AM_QUOTES_WF' , 'update_quote_status',
4034                         itemtype, itemkey, actid, funcmode);
4035         RAISE;
4036      WHEN OTHERS THEN
4037 
4038          IF (is_debug_exception_on) THEN
4039             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4040                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
4041         END IF;
4042         -- Start : PRASJAIN : Bug 6324373
4043         IF c_tmt_status_code_csr%ISOPEN THEN
4044           CLOSE c_tmt_status_code_csr;
4045         END IF;
4046         -- End : PRASJAIN : Bug 6324373
4047 
4048         WF_CORE.context('OKL_AM_QUOTES_WF' , 'update_quote_status',
4049                         itemtype, itemkey, actid, funcmode);
4050         RAISE;
4051 
4052   END update_quote_status;
4053 
4054   -- Start of comments
4055   --
4056   -- Procedure Name : validate_quote
4057   -- Description :
4058   -- Business Rules :
4059   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
4060   -- Version  : 1.0
4061   --
4062   -- End of comments
4063   PROCEDURE validate_quote( itemtype IN  VARCHAR2,
4064                 itemkey   IN  VARCHAR2,
4065                    actid     IN  NUMBER,
4066                    funcmode IN  VARCHAR2,
4067                 resultout OUT NOCOPY VARCHAR2) IS
4068 
4069     -- Check quote exists
4070     CURSOR  get_quote_csr  ( p_qte_id   IN VARCHAR2)
4071     IS
4072     SELECT  a.LAST_UPDATED_BY LAST_UPDATED_BY,
4073             a.QTE_ID QTE_ID,
4074             b.PO_PARTY_ID1 QP_PARTY_ID,
4075             decode(b.po_party_object, 'OKX_OPERUNIT', 'O', 'OKX_PARTY', 'P', 'OKX_VENDOR', 'V') party_type
4076     FROM    OKL_TXL_QUOTE_LINES_V a,
4077             OKL_AM_QUOTE_PARTIES_UV b
4078     WHERE   a.qte_id = to_number(p_qte_id)
4079 --    and     b.qp_role_code = 'RECIPIENT'
4080     and     b.quote_id = a.qte_id;
4081 
4082     l_quote_rec                     get_quote_csr%rowtype;
4083     l_quote_id                      varchar2(100);
4084 
4085     l_user_name   WF_USERS.name%type;
4086     l_name        WF_USERS.description%type;
4087 
4088     l_recipient_name     varchar2(100);
4089     l_recipient_id       number;
4090     l_party_object_tbl   okl_am_parties_pvt.party_object_tbl_type;
4091     l_return_status      VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4092 
4093 --12/18/06 rkuttiya added for XMLP Project
4094     x_msg_count NUMBER;
4095     x_msg_data VARCHAR2(2000);
4096     l_api_version    NUMBER       := 1;
4097     l_init_msg_list  VARCHAR2(1) := 'T';
4098 
4099     ERR EXCEPTION;
4100     l_batch_id     NUMBER;
4101     l_xmp_rec      OKL_XMLP_PARAMS_PVT.xmp_rec_type;
4102     lx_xmp_rec     OKL_XMLP_PARAMS_PVT.xmp_rec_type;
4103   --get the recipient email address
4104     CURSOR c_recipient(p_recipient_id IN NUMBER)
4105     IS
4106     SELECT hzp.email_address email
4107     FROM  hz_parties hzp
4108     WHERE hzp.party_id = p_recipient_id;
4109 
4110   -- get the sender email address
4111     CURSOR c_agent_csr (c_agent_id NUMBER) IS
4112     SELECT nvl(ppf.email_address , fu.email_address) email
4113     FROM   fnd_user fu,
4114            per_people_f ppf
4115     WHERE  fu.employee_id = ppf.person_id (+)
4116     AND    fu.user_id = c_agent_id;
4117     l_from_email      VARCHAR2(100);
4118     l_to_email        VARCHAR2(100);
4119 
4120 -- for debug logging
4121     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_quote';
4122     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4123     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4124     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4125 
4126   BEGIN
4127 
4128    IF (is_debug_procedure_on) THEN
4129        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
4130    END IF;
4131 
4132     --
4133     -- RUN mode
4134     --
4135     IF (funcmode = 'RUN') THEN
4136       -- Get the values for dispose_asset before calling the dispose_asset api
4137 
4138       l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
4139                             itemkey  => itemkey,
4140                           aname   => 'TRANSACTION_ID');
4141 
4142       OPEN  get_quote_csr(l_quote_id);
4143       FETCH get_quote_csr INTO l_quote_rec;
4144       CLOSE get_quote_csr;
4145 
4146       okl_am_wf.get_notification_agent(
4147                                 itemtype   => itemtype
4148                            , itemkey     => itemkey
4149                            , actid       => actid
4150                            , funcmode   => funcmode
4151                               , p_user_id     => l_quote_rec.last_updated_by
4152                               , x_name     => l_user_name
4153                            , x_description => l_name);
4154 
4155         -- Find party details
4156         OKL_AM_PARTIES_PVT.get_party_details (
4157                                 p_id_code      => l_quote_rec.party_type,
4158                                 p_id_value      => l_quote_rec.qp_party_id,
4159                                 x_party_object_tbl => l_party_object_tbl,
4160                                 x_return_status  => l_return_status);
4161 
4162   IF (is_debug_statement_on) THEN
4163        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4164        'after call to OKL_AM_PARTIES_PVT.get_party_details  :'||l_return_status);
4165    END IF;
4166 
4167         -- Check that a quote id is returned for the TRANSACTION_ID given.
4168 
4169   IF l_quote_rec.last_updated_by IS NOT NULL THEN
4170 
4171             wf_engine.SetItemAttrNumber ( itemtype=> itemtype,
4172                     itemkey => itemkey,
4173                     aname   => 'CREATED_BY',
4174                              avalue  => l_quote_rec.last_updated_by);
4175 
4176             wf_engine.SetItemAttrText ( itemtype=> itemtype,
4177                     itemkey => itemkey,
4178                     aname   => 'REQUESTER',
4179                               avalue  => l_user_name);
4180 
4181             wf_engine.SetItemAttrText ( itemtype=> itemtype,
4182                     itemkey => itemkey,
4183                     aname   => 'NOTIFY_AGENT',
4184                               avalue  => l_user_name);
4185 
4186             -- Populate Item Attributes for Fulfillment
4187             wf_engine.SetItemAttrText ( itemtype=> itemtype,
4188                     itemkey => itemkey,
4189                     aname   => 'PROCESS_CODE',
4190                               avalue  => 'AMTER');
4191 --12/18/06 rkuttiya comented for XMLP Project
4192 --Recipient Type P changed to LESSEE
4193            /* wf_engine.SetItemAttrText ( itemtype=> itemtype,
4194                     itemkey => itemkey,
4195                     aname   => 'RECIPIENT_TYPE',
4196                               avalue  => 'P'); */
4197 
4198             wf_engine.SetItemAttrText ( itemtype=> itemtype,
4199                                                 itemkey => itemkey,
4200                                                 aname   => 'RECIPIENT_TYPE',
4201                                                 avalue  => 'LESSEE');
4202 
4203 
4204             wf_engine.SetItemAttrText ( itemtype=> itemtype,
4205                     itemkey => itemkey,
4206                     aname   => 'RECIPIENT_ID',
4207                                 avalue  => l_party_object_tbl(1).p_id1);
4208 
4209 
4210             wf_engine.SetItemAttrText ( itemtype=> itemtype,
4211                     itemkey => itemkey,
4212                     aname   => 'RECIPIENT_DESCRIPTION',
4213                                 avalue  => l_party_object_tbl(1).p_name);
4214 
4215 --12/18/06 rkuttiya modified for XMLP Project
4216 --set the From Address and TO Address
4217         OPEN c_recipient(l_party_object_tbl(1).p_id1);
4218         FETCH c_recipient INTO l_to_email;
4219         CLOSE c_recipient;
4220 
4221          wf_engine.SetItemAttrText ( itemtype=> itemtype,
4222                                      itemkey => itemkey,
4223                                      aname   => 'EMAIL_ADDRESS',
4224                                      avalue  =>  l_to_email);
4225 
4226         OPEN c_agent_csr(l_quote_rec.last_updated_by);
4227         FETCH c_agent_csr into l_from_email;
4228         CLOSE c_agent_csr;
4229 
4230           wf_engine.SetItemAttrText ( itemtype=> itemtype,
4231                                      itemkey => itemkey,
4232                                      aname   => 'FROM_EMAIL',
4233                                      avalue  =>  l_from_email);
4234 
4235 
4236    --18-Dec-06 rkuttiya added for XMLP Project
4237    --code for inserting bind parameters into table
4238 
4239           l_xmp_rec.param_name := 'P_QUOTE_ID';
4240           l_xmp_rec.param_value := l_quote_id;
4241           l_xmp_rec.param_type_code := 'NUMBER';
4242 
4243            OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec(
4244                            p_api_version     => l_api_version
4245                           ,p_init_msg_list   => l_init_msg_list
4246                           ,x_return_status   => l_return_status
4247                           ,x_msg_count       => x_msg_count
4248                           ,x_msg_data        => x_msg_data
4249                           ,p_xmp_rec         => l_xmp_rec
4250                           ,x_xmp_rec         => lx_xmp_rec
4251                            );
4252 	  IF (is_debug_statement_on) THEN
4253 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4254 	       'after call to OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec  :'||l_return_status);
4255 	   END IF;
4256 
4257                IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
4258                  RAISE ERR;
4259                END IF;
4260 
4261 
4262                 IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
4263                        l_batch_id := lx_xmp_rec.batch_id;
4264                        wf_engine.SetItemAttrText ( itemtype=> itemtype,
4265                                                    itemkey => itemkey,
4266                                                    aname   => 'BATCH_ID',
4267                                                     avalue  => l_batch_id );
4268                         resultout := 'COMPLETE:VALID';
4269                 ELSE
4270                         resultout := 'COMPLETE:ERROR';
4271                 END IF;
4272 
4273         --resultout := 'COMPLETE:VALID';
4274       ELSE
4275         resultout := 'COMPLETE:INVALID';
4276       END IF;
4277 
4278       RETURN ;
4279     END IF;
4280 
4281     --
4282     -- CANCEL mode
4283     --
4284     IF (funcmode = 'CANCEL') THEN
4285       --
4286       resultout := 'COMPLETE:';
4287       RETURN;
4288       --
4289     END IF;
4290 
4291     --
4292     -- TIMEOUT mode
4293     --
4294     IF (funcmode = 'TIMEOUT') THEN
4295       --
4296       resultout := 'COMPLETE:';
4297       RETURN;
4298       --
4299     END IF;
4300 
4301    IF (is_debug_procedure_on) THEN
4302        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
4303    END IF;
4304 
4305   EXCEPTION
4306      WHEN OTHERS THEN
4307         IF (is_debug_exception_on) THEN
4308             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4309                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
4310         END IF;
4311         WF_CORE.context('OKL_AM_QUOTES_WF' , 'validate_quote',
4312                         itemtype, itemkey, actid, funcmode);
4313         RAISE;
4314 
4315   END validate_quote;
4316 
4317   -- Start of comments
4318   --
4319   -- Procedure Name : pop_partial_quote_att
4320   -- Description :
4321   -- Business Rules :
4322   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
4323   -- Version  : 1.0
4324   --
4325   -- End of comments
4326   PROCEDURE pop_partial_quote_att( itemtype   IN VARCHAR2,
4327                                  itemkey    IN VARCHAR2,
4328                       actid  IN NUMBER,
4329                        funcmode IN VARCHAR2,
4330                      resultout OUT NOCOPY VARCHAR2 ) AS
4331 
4332     l_id      NUMBER;
4333  l_no_data_found  BOOLEAN;
4334     l_user              WF_USERS.NAME%TYPE;
4335 
4336     l_message       VARCHAR2(30000);
4337     l_comments       VARCHAR2(1000);
4338     l_sent_date     VARCHAR2(50);
4339     -- cursor to populate notification attributes
4340   -- nikshah -- Bug # 5484903 Fixed,
4341   -- Changed CURSOR okl_partial_quote_csr SQL definition
4342  CURSOR okl_partial_quote_csr(c_id NUMBER)
4343  IS
4344     SELECT   to_char(sysdate, 'DD-MON-RRRR') system_date,
4345                OTQ.quote_number             quote_number,
4346                to_char(OTQ.date_effective_to, 'DD-MON-RRRR')        effective_to,
4347                okl_accounting_util.format_amount(SUM(NVL(OTL.AMOUNT,0)),okl_am_util_pvt.get_chr_currency(OTQ.KHR_ID))||' '||okl_am_util_pvt.get_chr_currency(OTQ.KHR_ID)       QUOTE_TOTAL,
4348                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_REASON',OTQ.qrs_code,'N')QUOTE_REASON ,
4349                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_TYPE',OTQ.qtp_code,'N') QUOTE_TYPE,
4350                to_char(OTQ.creation_date, 'DD-MON-RRRR')            quote_creation_date,
4351                nvl2 (qp.cpl_id, okl_am_util_pvt.get_jtf_object_name (pr.jtot_object1_code, pr.object1_id1, pr.object1_id2), okl_am_util_pvt.get_jtf_object_name (qp.party_jtot_object1_code, qp.party_object1_id1,qp.party_object1_id2)) recipient_name,
4352                to_char(qp.date_sent, 'DD-MON-RRRR')             recipient_date,
4353                AD.CONTRACT_NUMBER           CONTRACT_NUMBER,
4354                OTQ.COMMENTS                 COMMENTS,
4355                OTQ.LAST_UPDATED_BY          LAST_UPDATED_BY,
4356                OTQ.KHR_ID                   KHR_ID
4357     FROM      OKL_TRX_QUOTES_V OTQ,
4358               OKL_TXL_QUOTE_LINES_B OTL,
4359               OKL_QUOTE_PARTIES QP,
4360        OKC_K_PARTY_ROLES_V PR,
4361               OKC_K_HEADERS_ALL_B AD
4362     WHERE OTQ.ID          = c_id
4363     AND   pr.id (+) = qp.cpl_id
4364     AND   ad.org_id = otq.org_id
4365     AND   OTQ.ID          = OTL.QTE_ID
4366     AND   AD.ID           = OTQ.KHR_ID
4367     AND   OTQ.ID          = qp.qte_id
4368 --    AND   OTQ.PARTIAL_YN  = 'Y'
4369     AND   qp.qpt_code = 'RECIPIENT'
4370     AND   otl.org_id = otq.org_id
4371     GROUP BY to_char(sysdate, 'MM-DD-YYYY'),
4372                OTQ.quote_number,
4373                OTQ.date_effective_to,
4374                OTQ.QST_CODE,
4375                OTQ.creation_date,
4376                OTQ.qrs_code,
4377                OTQ.qtp_code,
4378                nvl2 (qp.cpl_id, okl_am_util_pvt.get_jtf_object_name (pr.jtot_object1_code, pr.object1_id1, pr.object1_id2), okl_am_util_pvt.get_jtf_object_name (qp.party_jtot_object1_code, qp.party_object1_id1,qp.party_object1_id2)),
4379                qp.date_sent,
4380                AD.CONTRACT_NUMBER,
4381                OTQ.COMMENTS,
4382                OTQ.LAST_UPDATED_BY,
4383                OTQ.KHR_ID;
4384 
4385     l_quote_rec     okl_partial_quote_csr%rowtype;
4386 
4387     CURSOR c_asset_details_csr(c_qte_id NUMBER)
4388     IS
4389     SELECT CLEV.ITEM_DESCRIPTION ASSET_DESCRIPTION ,
4390            OKHV.CONTRACT_NUMBER CONTRACT_NUMBER ,
4391            CLEV.NAME ASSET_NUMBER ,
4392            OALV.SERIAL_NUMBER SERIAL_NUMBER,
4393            OALV.MODEL_NUMBER MODEL_NUMBER
4394      FROM OKL_K_LINES_FULL_V CLEV,
4395           OKX_ASSET_LINES_V OALV,
4396           OKC_K_HEADERS_V OKHV,
4397           OKC_LINE_STYLES_V LSEV,
4398           FA_CATEGORIES_VL FAC ,
4399           OKL_AM_ASSET_LINES_UV AL
4400     WHERE CLEV.ID             = OALV.PARENT_LINE_ID
4401       AND CLEV.CHR_ID         = OKHV.ID
4402       AND CLEV.LSE_ID         = LSEV.ID
4403       AND LSEV.LTY_CODE       = 'FREE_FORM1'
4404       AND AL.ID = CLEV.ID
4405       AND FAC.CATEGORY_ID (+) = OALV.DEPRECIATION_CATEGORY
4406       AND AL.QTE_ID =  c_qte_id;
4407 
4408     l_header_done    BOOLEAN := FALSE;
4409     l_updated_by     NUMBER;
4410 
4411 -- for debug logging
4412     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_partial_quote_att';
4413     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4414     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4415     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4416 
4417   BEGIN
4418 
4419    IF (is_debug_procedure_on) THEN
4420        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
4421    END IF;
4422 
4423     IF (funcmode = 'RUN') THEN
4424         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
4425                         itemkey => itemkey,
4426                       aname   => 'TRANSACTION_ID');
4427 
4428         --build message
4429 
4430         OPEN okl_partial_quote_csr(l_id);
4431         FETCH okl_partial_quote_csr INTO l_quote_rec;
4432         CLOSE okl_partial_quote_csr;
4433 
4434             l_message  := '<p>Quote Number:'||l_quote_rec.quote_number||'<br>'||
4435                       'Quote Effective To Date:'||l_quote_rec.effective_to||'<br>'||
4436                       'Total:'||l_quote_rec.quote_total||
4437                       '<p>The partial quote of '||l_quote_rec.quote_type||' was requested for Contract '||l_quote_rec.contract_number||' on<br>'||
4438                       l_quote_rec.quote_creation_date||' for the following reason: '||l_quote_rec.quote_reason||'.</p>'||
4439                       '<p>This quote will be sent to the Recipient '||l_quote_rec.recipient_name||' on '||l_quote_rec.recipient_date||' following your <br>'||
4440                       'approval. </p>'||
4441                       '<table width="50%" border="1">'||
4442                       '<tr>'||
4443                       '<td>Asset Number</td>'||
4444                       '<td>Asset Description</td>'||
4445                       '<td>Model</td>'||
4446                       '<td>Serial Number</td>'||
4447                       '</tr>';
4448              l_header_done := TRUE;
4449              l_updated_by  := l_quote_rec.last_updated_by;
4450              l_comments    := l_quote_rec.comments;
4451              l_sent_date   := l_quote_rec.recipient_date;
4452 
4453         FOR l_asset_details_rec in c_asset_details_csr(l_id) loop
4454           l_message  :=  l_message||'<tr>'||
4455                                 '<td>'||l_asset_details_rec.asset_number||'</td>'||
4456                                 '<td>'||l_asset_details_rec.asset_description||'</td>'||
4457                                 '<td>'||l_asset_details_rec.model_number||'</td>'||
4458                                 '<td>'||l_asset_details_rec.serial_number||'</td>'||
4459                                 '</tr>';
4460         END LOOP;
4461 
4462           l_message  := l_message||'</table><p>Comments:<br>'||
4463                     l_comments||'</p>'||
4464                     '<p>Please contact us before '||l_sent_date||' to confirm the quote amounts.'||
4465                     '</p>';
4466 
4467         wf_engine.SetItemAttrText ( itemtype=> itemtype,
4468                     itemkey => itemkey,
4469                     aname   => 'TRX_TYPE_ID',
4470                               avalue  => 'OKLAMPAR');
4471 
4472         wf_engine.SetItemAttrText ( itemtype=> itemtype,
4473                     itemkey => itemkey,
4474                     aname   => 'MESSAGE_DESCRIPTION',
4475                               avalue  => l_message);
4476 
4477         resultout := 'COMPLETE:';
4478         RETURN ;
4479     END IF;
4480 
4481     --
4482     -- CANCEL mode
4483     --
4484     IF (funcmode = 'CANCEL') THEN
4485       --
4486       resultout := 'COMPLETE:';
4487       RETURN;
4488       --
4489     END IF;
4490 
4491     --
4492     -- TIMEOUT mode
4493     --
4494     IF (funcmode = 'TIMEOUT') THEN
4495       --
4496       resultout := 'COMPLETE:';
4497       RETURN;
4498       --
4499     END IF;
4500 
4501    IF (is_debug_procedure_on) THEN
4502        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
4503    END IF;
4504 
4505   EXCEPTION
4506      WHEN OTHERS THEN
4507          IF (is_debug_exception_on) THEN
4508             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4509                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
4510         END IF;
4511         IF okl_partial_quote_csr%ISOPEN THEN
4512            CLOSE okl_partial_quote_csr;
4513         END IF;
4514 
4515         wf_core.context('OKL_AM_QUOTES_WF' , 'pop_partial_quote_att', itemtype, itemkey, actid, funcmode);
4516         RAISE;
4517 
4518   END pop_partial_quote_att;
4519 
4520   -- Start of comments
4521   --
4522   -- Procedure Name : set_quote_approved_yn
4523   -- Description : Called from Send Quote Workflow (OKLAMNQT) to update
4524   --                  the quote status afer Approval/Rejection
4525   -- Business Rules :
4526   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
4527   -- Version  : 1.0
4528   --
4529   -- End of comments
4530   PROCEDURE set_quote_approved_yn( itemtype   IN VARCHAR2,
4531                                  itemkey    IN VARCHAR2,
4532                       actid  IN NUMBER,
4533                        funcmode IN VARCHAR2,
4534                      resultout OUT NOCOPY VARCHAR2 ) AS
4535 
4536 
4537     l_id            VARCHAR2(100);
4538     l_approved      VARCHAR2(1);
4539 
4540     x_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
4541     x_msg_count     NUMBER;
4542     x_msg_data      VARCHAR2(2000);
4543     p_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
4544     x_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
4545     p_api_version   NUMBER       := 1;
4546     p_init_msg_list VARCHAR2(1)  := FND_API.G_TRUE;
4547 
4548     API_ERROR       EXCEPTION;
4549 
4550     l_notify_response VARCHAR2(30);
4551 -- for debug logging
4552     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_quote_approved_yn';
4553     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4554     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4555     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4556 
4557   BEGIN
4558 
4559    IF (is_debug_procedure_on) THEN
4560        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
4561    END IF;
4562 
4563     IF (funcmode = 'RUN') THEN
4564         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
4565                         itemkey => itemkey,
4566                       aname   => 'TRANSACTION_ID');
4567 
4568 
4569         l_approved := wf_engine.GetItemAttrText( itemtype => itemtype,
4570                         itemkey => itemkey,
4571                       aname   => 'APPROVED_YN');
4572 
4573         l_notify_response := wf_engine.GetItemAttrText( itemtype => itemtype,
4574                         itemkey => itemkey,
4575                       aname   => 'RESULT');
4576 
4577         IF nvl(l_approved, 'Y') = 'N' OR l_notify_response = 'REJECTED' THEN
4578             p_qtev_rec.QST_CODE := 'REJECTED';
4579         ELSE
4580             p_qtev_rec.QST_CODE := 'APPROVED';
4581             p_qtev_rec.DATE_APPROVED := SYSDATE;
4582         END IF;
4583 
4584         p_qtev_rec.ID := to_number(l_id);
4585 
4586         p_qtev_rec.APPROVED_YN := nvl(l_approved, 'Y');
4587 
4588         okl_qte_pvt.update_row( p_api_version    => p_api_version,
4589                                 p_init_msg_list  => p_init_msg_list,
4590                                 x_return_status  => x_return_status,
4591                                 x_msg_count      => x_msg_count,
4592                                 x_msg_data       => x_msg_data,
4593                                 p_qtev_rec       => p_qtev_rec,
4594                                 x_qtev_rec       => x_qtev_rec);
4595 
4596            IF (is_debug_statement_on) THEN
4597                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4598                'after call to okl_qte_pvt.update_row :'||x_return_status);
4599            END IF;
4600 
4601   IF x_return_status = OKC_API.G_RET_STS_SUCCESS THEN
4602             IF nvl(l_approved, 'Y') = 'Y' THEN
4603        resultout := 'COMPLETE:APPROVED';
4604             ELSE
4605        resultout := 'COMPLETE:REJECTED';
4606             END IF;
4607   ELSE
4608    RAISE API_ERROR;
4609   END IF;
4610 
4611         RETURN ;
4612     END IF;
4613 
4614     --
4615     -- CANCEL mode
4616     --
4617     IF (funcmode = 'CANCEL') THEN
4618       --
4619       resultout := 'COMPLETE:';
4620       RETURN;
4621       --
4622     END IF;
4623 
4624     --
4625     -- TIMEOUT mode
4626     --
4627     IF (funcmode = 'TIMEOUT') THEN
4628       --
4629       resultout := 'COMPLETE:';
4630       RETURN;
4631       --
4632     END IF;
4633 
4634    IF (is_debug_procedure_on) THEN
4635        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
4636    END IF;
4637 
4638   EXCEPTION
4639 
4640      WHEN API_ERROR THEN
4641         IF (is_debug_exception_on) THEN
4642             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
4643         END IF;
4644         wf_core.context('OKL_AM_QUOTES_WF' , 'set_quote_approved_yn', itemtype, itemkey, actid, funcmode);
4645         RAISE;
4646 
4647      WHEN OTHERS THEN
4648 
4649         IF (is_debug_exception_on) THEN
4650             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4651                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
4652         END IF;
4653 
4654         wf_core.context('OKL_AM_QUOTES_WF' , 'set_quote_approved_yn', itemtype, itemkey, actid, funcmode);
4655         RAISE;
4656 
4657   END set_quote_approved_yn;
4658 
4659   -- Start of comments
4660   --
4661   -- Procedure Name : pop_gl_quote_att
4662   -- Description :
4663   -- Business Rules :
4664   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
4665   -- Version  : 1.0
4666   --
4667   -- End of comments
4668   PROCEDURE pop_gl_quote_att( itemtype   IN VARCHAR2,
4669                                  itemkey    IN VARCHAR2,
4670                       actid  IN NUMBER,
4671                        funcmode IN VARCHAR2,
4672                      resultout OUT NOCOPY VARCHAR2 ) AS
4673 
4674     l_id      NUMBER;
4675  l_no_data_found  BOOLEAN;
4676     l_user              WF_USERS.NAME%TYPE;
4677 
4678     l_message       VARCHAR2(30000);
4679 
4680     -- cursor to populate notification attributes
4681  CURSOR okl_quote_csr(c_id NUMBER)
4682  IS
4683     SELECT     TO_CHAR(SYSDATE, 'DD-MON-RRRR') SYSTEM_DATE,
4684                OTQ.QUOTE_NUMBER             QUOTE_NUMBER,
4685                to_char(OTQ.DATE_EFFECTIVE_TO, 'DD-MON-RRRR') EFFECTIVE_TO,
4686                okl_accounting_util.format_amount(SUM(NVL(OTL.AMOUNT,0)),okl_am_util_pvt.get_chr_currency(OTQ.KHR_ID))||' '||okl_am_util_pvt.get_chr_currency(OTQ.KHR_ID)       QUOTE_TOTAL,
4687                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_REASON',OTQ.qrs_code,'N')QUOTE_REASON ,
4688                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_TYPE',OTQ.qtp_code,'N') QUOTE_TYPE,
4689                to_char(OTQ.CREATION_DATE, 'DD-MON-RRRR') QUOTE_CREATION_DATE,
4690                AD.CONTRACT_NUMBER           CONTRACT_NUMBER,
4691                OTQ.COMMENTS                 COMMENTS,
4692                OTQ.LAST_UPDATED_BY          LAST_UPDATED_BY,
4693                OTQ.KHR_ID                   KHR_ID
4694                ,OTQ.gain_loss                gain_loss -- Added for bug 12802662
4695     FROM      OKL_TRX_QUOTES_V OTQ,
4696               OKL_TXL_QUOTE_LINES_B OTL,
4697               OKC_K_HEADERS_V AD
4698     WHERE OTQ.ID          = c_id
4699     AND   OTQ.ID          = OTL.QTE_ID
4700     AND AD.ID         = OTQ.KHR_ID
4701     GROUP BY TO_CHAR(SYSDATE, 'DD-MON-RRRR'),
4702                OTQ.QUOTE_NUMBER,
4703                OTQ.DATE_EFFECTIVE_TO,
4704                OTQ.QST_CODE,
4705                OTQ.CREATION_DATE,
4706                OTQ.QRS_CODE,
4707                AD.CONTRACT_NUMBER,
4708                OTQ.COMMENTS,
4709                OTQ.LAST_UPDATED_BY, OTQ.KHR_ID, OTQ.qtp_code
4710                ,OTQ.gain_loss;  -- Added for bug 12802662
4711 
4712     l_quote_rec okl_quote_csr%rowtype;
4713     l_projected_gl      NUMBER;
4714 -- for debug logging
4715     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_gl_quote_att';
4716     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4717     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4718     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4719   BEGIN
4720 
4721    IF (is_debug_procedure_on) THEN
4722        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
4723    END IF;
4724 
4725     IF (funcmode = 'RUN') THEN
4726 
4727         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
4728                         itemkey => itemkey,
4729                       aname   => 'TRANSACTION_ID');
4730 
4731         l_projected_gl := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4732                         itemkey => itemkey,
4733                       aname   => 'QUOTE_GL');
4734         --build message
4735      OPEN  okl_quote_csr(l_id);
4736      FETCH okl_quote_csr INTO l_quote_rec;
4737      CLOSE okl_quote_csr;
4738 
4739         l_message  := '<p>Quote Number:'||l_quote_rec.quote_number||'<br>'||
4740                       'Quote Effective To Date:'||l_quote_rec.effective_to||'<br>'||
4741                       'Total:'||l_quote_rec.quote_total||'<br>'||
4742                       'Projected Gain/Loss:'||okl_accounting_util.format_amount((l_quote_rec.gain_loss),okl_am_util_pvt.get_chr_currency(l_quote_rec.KHR_ID))||' '||okl_am_util_pvt.get_chr_currency(l_quote_rec.KHR_ID)||'<br>'||
4743                       '<p>A Quote of type '||l_quote_rec.quote_type||' was requested for Contract '||l_quote_rec.contract_number||' on<br>'||
4744                       l_quote_rec.quote_creation_date||' for the following reason: '||l_quote_rec.quote_reason||'.</p>'||
4745                       '<p>Comments:<br>'||
4746                       l_quote_rec.comments||'</p>'||
4747                       '<p>The quote will be completed following your approval.</p>';
4748 
4749         wf_engine.SetItemAttrText ( itemtype=> itemtype,
4750                     itemkey => itemkey,
4751                     aname   => 'TRX_TYPE_ID',
4752                               avalue  => 'OKLAMGAL');
4753 
4754         wf_engine.SetItemAttrText ( itemtype=> itemtype,
4755                     itemkey => itemkey,
4756                     aname   => 'MESSAGE_DESCRIPTION',
4757                               avalue  => l_message);
4758 
4759         resultout := 'COMPLETE:';
4760         RETURN ;
4761     END IF;
4762 
4763     --
4764     -- CANCEL mode
4765     --
4766     IF (funcmode = 'CANCEL') THEN
4767       --
4768       resultout := 'COMPLETE:';
4769       RETURN;
4770       --
4771     END IF;
4772 
4773     --
4774     -- TIMEOUT mode
4775     --
4776     IF (funcmode = 'TIMEOUT') THEN
4777       --
4778       resultout := 'COMPLETE:';
4779       RETURN;
4780       --
4781     END IF;
4782 
4783    IF (is_debug_procedure_on) THEN
4784        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
4785    END IF;
4786 
4787   EXCEPTION
4788      WHEN OTHERS THEN
4789 
4790              IF (is_debug_exception_on) THEN
4791             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4792                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
4793         END IF;
4794 
4795         IF okl_quote_csr%ISOPEN THEN
4796            CLOSE okl_quote_csr;
4797         END IF;
4798 
4799         wf_core.context('OKL_AM_QUOTES_WF' , 'pop_gl_quote_att', itemtype, itemkey, actid, funcmode);
4800         RAISE;
4801 
4802   END pop_gl_quote_att;
4803 
4804   -- Start of comments
4805   --
4806   -- Procedure Name : validate_quote_approval
4807   -- Description    : Validates quote id on entry to Workflow
4808   -- Business Rules :
4809   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
4810   -- Version     : 1.0
4811   --
4812   -- End of comments
4813   PROCEDURE validate_quote_approval( itemtype IN  VARCHAR2,
4814                                      itemkey   IN  VARCHAR2,
4815                                      actid     IN  NUMBER,
4816                                      funcmode IN  VARCHAR2,
4817                                      resultout OUT NOCOPY VARCHAR2) IS
4818 
4819     -- Check quote exists an d is either DRAFTED or REJECTED
4820   -- nikshah -- Bug # 5484903 Fixed,
4821   -- Changed CURSOR get_quote_csr SQL definition
4822     CURSOR  get_quote_csr  ( p_qte_id   IN VARCHAR2)
4823     IS
4824     SELECT  a.last_updated_by, a.quote_number, count(*) recs
4825     FROM    OKL_TRX_QUOTES_B a,
4826             OKL_QUOTE_PARTIES b
4827     WHERE   a.id = p_qte_id
4828     and     a.qst_code in ('DRAFTED', 'REJECTED')
4829     and     b.qte_id (+) = a.id
4830     GROUP BY a.last_updated_by, a.quote_number;
4831 
4832     l_last_updated_by               NUMBER;
4833     l_quote_id                      VARCHAR2(200);
4834 
4835     l_user_name   WF_USERS.name%type;
4836     l_name        WF_USERS.description%type;
4837     l_current_party  NUMBER;
4838 
4839     l_quote_number  VARCHAR2(100);
4840 
4841     x_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
4842     x_msg_count     NUMBER;
4843     x_msg_data      VARCHAR2(2000);
4844     p_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
4845     x_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
4846     p_api_version   NUMBER       := 1;
4847     p_init_msg_list VARCHAR2(1)  := FND_API.G_TRUE;
4848 
4849     API_ERROR       EXCEPTION;
4850 --19-jul-2007 ansethur R12B XML Publisher starts
4851     l_api_version    NUMBER       := 1;
4852     l_init_msg_list  VARCHAR2(1) := 'T';
4853     l_return_status  VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
4854     ERR EXCEPTION;
4855     l_batch_id     NUMBER;
4856     l_xmp_rec      OKL_XMLP_PARAMS_PVT.xmp_rec_type;
4857     lx_xmp_rec     OKL_XMLP_PARAMS_PVT.xmp_rec_type;
4858 
4859  -- Check quote exists
4860     CURSOR  get_quote_xmlp_csr  ( p_qte_id   IN VARCHAR2)
4861     IS
4862     SELECT  a.LAST_UPDATED_BY LAST_UPDATED_BY,
4863             a.QTE_ID QTE_ID,
4864             b.PO_PARTY_ID1 QP_PARTY_ID,
4865             decode(b.po_party_object, 'OKX_OPERUNIT', 'O', 'OKX_PARTY', 'P', 'OKX_VENDOR', 'V') party_type
4866     FROM    OKL_TXL_QUOTE_LINES_V a,
4867             OKL_AM_QUOTE_PARTIES_UV b
4868     WHERE   a.qte_id = to_number(p_qte_id)
4869 --  and     b.qp_role_code = 'RECIPIENT'
4870     and     b.quote_id = a.qte_id;
4871 
4872     l_quote_rec                     get_quote_xmlp_csr%rowtype;
4873     l_party_object_tbl   okl_am_parties_pvt.party_object_tbl_type;
4874 
4875  --get the recipient email address
4876     CURSOR c_recipient(p_recipient_id IN NUMBER)
4877     IS
4878     SELECT hzp.email_address email
4879     FROM  hz_parties hzp
4880     WHERE hzp.party_id = p_recipient_id;
4881 
4882 -- get the sender email address
4883     CURSOR c_agent_csr (c_agent_id NUMBER) IS
4884     SELECT nvl(ppf.email_address , fu.email_address) email
4885     FROM   fnd_user fu,
4886            per_people_f ppf
4887     WHERE  fu.employee_id = ppf.person_id (+)
4888     AND    fu.user_id = c_agent_id;
4889 
4890     l_from_email      VARCHAR2(100);
4891     l_to_email        VARCHAR2(100);
4892   --19-jul-2007 ansethur R12B XML Publisher Starts
4893 -- for debug logging
4894     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_quote_approval';
4895     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4896     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4897     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4898   BEGIN
4899 
4900    IF (is_debug_procedure_on) THEN
4901        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
4902    END IF;
4903 
4904     --
4905     -- RUN mode
4906     --
4907     IF (funcmode = 'RUN') THEN
4908 
4909       l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
4910                                                itemkey  => itemkey,
4911                                                aname   => 'TRANSACTION_ID');
4912 
4913 --  20-Mar-06 rmunjulu 5087501 call okl_qte_pvt.update_row( ) to update the
4914 --  LAST_UPDATED_BY column of the quote with the current logged in user_id so before
4915 --  raising the business event so that workflow can pick up the correct requestor.
4916 
4917        p_qtev_rec.ID := to_number(l_quote_id);
4918        okl_qte_pvt.update_row( p_api_version      => p_api_version,
4919                                 p_init_msg_list   => p_init_msg_list,
4920                                 x_return_status   => x_return_status,
4921                                 x_msg_count       => x_msg_count,
4922                                 x_msg_data        => x_msg_data,
4923                                 p_qtev_rec        => p_qtev_rec,
4924                                 x_qtev_rec        => x_qtev_rec);
4925    IF (is_debug_statement_on) THEN
4926        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4927        'after call to okl_qte_pvt.update_row :'||x_return_status);
4928    END IF;
4929 
4930        IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
4931           RAISE API_ERROR;
4932        END IF;
4933 -- end of 20-Mar-06 rmunjulu 5087501
4934 
4935       OPEN  get_quote_csr(l_quote_id);
4936       FETCH get_quote_csr INTO l_last_updated_by, l_quote_number, l_current_party;
4937       CLOSE get_quote_csr;
4938 
4939       okl_am_wf.get_notification_agent(
4940                                 itemtype   => itemtype
4941                            , itemkey     => itemkey
4942                            , actid       => actid
4943                            , funcmode   => funcmode
4944                               , p_user_id     => l_last_updated_by
4945                               , x_name     => l_user_name
4946                            , x_description => l_name);
4947       -- Check that a quote id is returned for the TRANSACTION_ID given.
4948 
4949          IF (is_debug_statement_on) THEN
4950        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4951        'after call to okl_am_wf.get_notification_agent :'||l_return_status);
4952    END IF;
4953 
4954   IF l_last_updated_by IS NOT NULL AND l_user_name IS NOT NULL THEN
4955 
4956             wf_engine.SetItemAttrText ( itemtype=> itemtype,
4957                     itemkey => itemkey,
4958                     aname   => 'REQUESTER',
4959                              avalue  => l_user_name);
4960 
4961              wf_engine.SetItemAttrText ( itemtype=> itemtype,
4962                     itemkey => itemkey,
4963                     aname   => 'WF_ADMINISTRATOR',
4964                               avalue  => l_user_name);
4965 
4966             IF itemtype <> 'OKLAMRQT' THEN
4967 
4968              wf_engine.SetItemAttrNumber ( itemtype=> itemtype,
4969                     itemkey => itemkey,
4970                     aname   => 'CREATED_BY',
4971                              avalue  => l_last_updated_by);
4972 
4973              wf_engine.SetItemAttrText (
4974                                 itemtype=> itemtype,
4975                     itemkey => itemkey,
4976                     aname   => 'NOTIFY_AGENT',
4977                               avalue  => l_user_name);
4978 
4979              wf_engine.SetItemAttrText (
4980                                 itemtype=> itemtype,
4981                     itemkey => itemkey,
4982                     aname   => 'QUOTE_NUMBER',
4983                               avalue  => l_quote_number);
4984    END IF;
4985 
4986             -- change the quote status to submitted to indicate that the WF
4987             -- is processing for approval
4988 
4989             p_qtev_rec.ID := to_number(l_quote_id);
4990             p_qtev_rec.QST_CODE := 'SUBMITTED';
4991             okl_qte_pvt.update_row( p_api_version    => p_api_version,
4992                                 p_init_msg_list  => p_init_msg_list,
4993                                 x_return_status  => x_return_status,
4994                                 x_msg_count      => x_msg_count,
4995                                 x_msg_data       => x_msg_data,
4996                                 p_qtev_rec        => p_qtev_rec,
4997                                 x_qtev_rec        => x_qtev_rec);
4998 
4999   IF (is_debug_statement_on) THEN
5000        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5001        'after call to okl_qte_pvt.update_row :'||x_return_status);
5002    END IF;
5003 
5004             IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5005                 RAISE API_ERROR;
5006             END IF;
5007    --19-jul-2007 ansethur R12B XML Publisher Starts
5008         OPEN  get_quote_xmlp_csr(l_quote_id);
5009         FETCH get_quote_xmlp_csr INTO l_quote_rec;
5010         CLOSE get_quote_xmlp_csr;
5011 
5012         -- Find party details
5013         OKL_AM_PARTIES_PVT.get_party_details (
5014                                	p_id_code		    => l_quote_rec.party_type,
5015                                	p_id_value		    => l_quote_rec.qp_party_id,
5016                                	x_party_object_tbl	=> l_party_object_tbl,
5017                                	x_return_status		=> x_return_status);
5018 
5019   IF (is_debug_statement_on) THEN
5020        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5021        'after call to OKL_AM_PARTIES_PVT.get_party_details :'||l_return_status);
5022    END IF;
5023 
5024             IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5025                 RAISE API_ERROR;
5026             END IF;
5027 
5028             -- Populate Item Attributes for Fulfillment
5029             wf_engine.SetItemAttrText ( itemtype=> itemtype,
5030 				                itemkey => itemkey,
5031 				                aname   => 'PROCESS_CODE',
5032          	                    avalue  => 'AMTER');
5033 
5034             wf_engine.SetItemAttrText ( itemtype=> itemtype,
5035 				                itemkey => itemkey,
5036 				                aname   => 'RECIPIENT_ID',
5037                                 avalue  => l_party_object_tbl(1).p_id1);
5038 
5039 
5040             wf_engine.SetItemAttrText ( itemtype=> itemtype,
5041 				                itemkey => itemkey,
5042 				                aname   => 'RECIPIENT_DESCRIPTION',
5043                                 avalue  => l_party_object_tbl(1).p_name);
5044 
5045         OPEN c_recipient(l_party_object_tbl(1).p_id1);
5046         FETCH c_recipient INTO l_to_email;
5047         CLOSE c_recipient;
5048 
5049          wf_engine.SetItemAttrText ( itemtype=> itemtype,
5050                                      itemkey => itemkey,
5051                                      aname   => 'EMAIL_ADDRESS',
5052                                      avalue  =>  l_to_email);
5053 
5054         OPEN c_agent_csr(l_quote_rec.last_updated_by);
5055         FETCH c_agent_csr into l_from_email;
5056         CLOSE c_agent_csr;
5057 
5058           wf_engine.SetItemAttrText ( itemtype=> itemtype,
5059                                      itemkey => itemkey,
5060                                      aname   => 'FROM_ADDRESS',
5061                                      avalue  =>  l_from_email);
5062    --18-Dec-06 rkuttiya added for XMLP Project
5063    --code for inserting bind parameters into table
5064 
5065           l_xmp_rec.param_name := 'P_QUOTE_ID';
5066           l_xmp_rec.param_value := l_quote_id;
5067           l_xmp_rec.param_type_code := 'NUMBER';
5068 
5069            OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec(
5070                            p_api_version     => l_api_version
5071                           ,p_init_msg_list   => l_init_msg_list
5072                           ,x_return_status   => l_return_status
5073                           ,x_msg_count       => x_msg_count
5074                           ,x_msg_data        => x_msg_data
5075                           ,p_xmp_rec         => l_xmp_rec
5076                           ,x_xmp_rec         => lx_xmp_rec
5077                            );
5078 
5079           IF (is_debug_statement_on) THEN
5080                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5081                'after call to OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec :'||l_return_status);
5082            END IF;
5083 
5084                IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5085                  RAISE ERR;
5086                END IF;
5087 
5088 
5089                 IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
5090                        l_batch_id := lx_xmp_rec.batch_id;
5091                        wf_engine.SetItemAttrText ( itemtype=> itemtype,
5092                                                    itemkey => itemkey,
5093                                                    aname   => 'BATCH_ID',
5094                                                    avalue  => l_batch_id );
5095 
5096                         resultout := 'COMPLETE:VALID';
5097                 ELSE
5098                         resultout := 'COMPLETE:ERROR';
5099                 END IF;
5100           --  resultout := 'COMPLETE:VALID';
5101 
5102   --19-jul-2007 ansethur R12B XML Publisher Ends
5103 
5104          ELSE
5105             resultout := 'COMPLETE:INVALID';
5106          END IF;
5107 
5108       RETURN ;
5109     END IF;
5110 
5111     --
5112     -- CANCEL mode
5113     --
5114     IF (funcmode = 'CANCEL') THEN
5115       --
5116       resultout := 'COMPLETE:';
5117       RETURN;
5118       --
5119     END IF;
5120 
5121     --
5122     -- TIMEOUT mode
5123     --
5124     IF (funcmode = 'TIMEOUT') THEN
5125       --
5126       resultout := 'COMPLETE:';
5127       RETURN;
5128       --
5129     END IF;
5130 
5131    IF (is_debug_procedure_on) THEN
5132        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5133    END IF;
5134 
5135   EXCEPTION
5136 
5137      WHEN API_ERROR THEN
5138 
5139         IF (is_debug_exception_on) THEN
5140             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5141         END IF;
5142 
5143         wf_core.context('OKL_AM_QUOTES_WF' , 'VALIDATE_QUOTE_APPROVAL', itemtype, itemkey, actid, funcmode);
5144         RAISE;
5145 
5146      WHEN OTHERS THEN
5147 
5148         IF (is_debug_exception_on) THEN
5149             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5150                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5151         END IF;
5152 
5153         IF get_quote_csr%ISOPEN THEN
5154            CLOSE get_quote_csr;
5155         END IF;
5156 
5157         WF_CORE.context('OKL_AM_QUOTES_WF' , 'VALIDATE_QUOTE_APPROVAL',
5158                         itemtype, itemkey, actid, funcmode);
5159         RAISE;
5160 
5161   END validate_quote_approval;
5162 
5163   -- Start of comments
5164   --
5165   -- Procedure Name : pop_cp_quote_att
5166   -- Description    : Populate Restructure Quote Notification Message
5167   -- Business Rules :
5168   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5169   -- Version     : 1.0
5170   --
5171   -- End of comments
5172   PROCEDURE pop_cp_quote_att( itemtype   IN VARCHAR2,
5173                                  itemkey    IN VARCHAR2,
5174                       actid  IN NUMBER,
5175                        funcmode IN VARCHAR2,
5176                      resultout OUT NOCOPY VARCHAR2 ) AS
5177 
5178     l_id      NUMBER;
5179  l_no_data_found  BOOLEAN;
5180     l_user              WF_USERS.NAME%TYPE;
5181 
5182     l_message       VARCHAR2(30000);
5183 
5184     -- cursor to populate notification attributes
5185  CURSOR okl_quote_csr(c_id NUMBER)
5186  IS
5187     SELECT     TO_CHAR(SYSDATE, 'DD-MON-RRRR') SYSTEM_DATE,
5188                OTQ.QUOTE_NUMBER             QUOTE_NUMBER,
5189                to_char(OTQ.DATE_EFFECTIVE_TO, 'DD-MON-RRRR') EFFECTIVE_TO,
5190                okl_accounting_util.format_amount(SUM(NVL(OTL.AMOUNT,0)),okl_am_util_pvt.get_chr_currency(OTQ.KHR_ID))||' '||okl_am_util_pvt.get_chr_currency(OTQ.KHR_ID)       QUOTE_TOTAL,
5191                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_REASON',OTQ.qrs_code,'N')QUOTE_REASON ,
5192                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_TYPE',OTQ.qtp_code,'N') QUOTE_TYPE,
5193                to_char(OTQ.CREATION_DATE, 'DD-MON-RRRR') QUOTE_CREATION_DATE,
5194                AD.CONTRACT_NUMBER           CONTRACT_NUMBER,
5195                OTQ.COMMENTS                 COMMENTS,
5196                OTQ.LAST_UPDATED_BY          LAST_UPDATED_BY,
5197                OTQ.KHR_ID                   KHR_ID
5198     FROM      OKL_TRX_QUOTES_V OTQ,
5199               OKL_TXL_QUOTE_LINES_B OTL,
5200               OKC_K_HEADERS_V AD
5201     WHERE OTQ.ID          = c_id
5202     AND   OTQ.ID          = OTL.QTE_ID
5203     AND AD.ID         = OTQ.KHR_ID
5204     GROUP BY TO_CHAR(SYSDATE, 'DD-MON-RRRR'),
5205                OTQ.QUOTE_NUMBER,
5206                OTQ.DATE_EFFECTIVE_TO,
5207                OTQ.QST_CODE,
5208                OTQ.CREATION_DATE,
5209                OTQ.QRS_CODE,
5210                AD.CONTRACT_NUMBER,
5211                OTQ.COMMENTS,
5212                OTQ.LAST_UPDATED_BY, OTQ.KHR_ID, OTQ.qtp_code;
5213 
5214     l_quote_rec okl_quote_csr%rowtype;
5215 -- for debug logging
5216     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_cp_quote_att';
5217     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5218     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5219     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5220 
5221   BEGIN
5222 
5223    IF (is_debug_procedure_on) THEN
5224        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5225    END IF;
5226 
5227     IF (funcmode = 'RUN') THEN
5228 
5229         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
5230                         itemkey => itemkey,
5231                       aname   => 'TRANSACTION_ID');
5232 
5233         --build message
5234      OPEN  okl_quote_csr(l_id);
5235      FETCH okl_quote_csr INTO l_quote_rec;
5236      CLOSE okl_quote_csr;
5237 
5238         l_message  := '<p>Quote Number:'||l_quote_rec.quote_number||'<br>'||
5239                       'Quote Effective To Date:'||l_quote_rec.effective_to||'<br>'||
5240                       'Total:'||l_quote_rec.quote_total||'<br>'||
5241                       '<p>The Restructure Quote was requested for Contract '||l_quote_rec.contract_number||' on<br>'||
5242                       l_quote_rec.quote_creation_date||' for the following reason: '||l_quote_rec.quote_reason||'.</p>'||
5243                       '<p>Comments:<br>'||
5244                       l_quote_rec.comments||'</p>'||
5245                       '<p>The quote will be porcessed following your approval.</p>';
5246 
5247         wf_engine.SetItemAttrText ( itemtype=> itemtype,
5248                     itemkey => itemkey,
5249                     aname   => 'TRX_TYPE_ID',
5250                               avalue  => 'OKLAMRQT');
5251 
5252         wf_engine.SetItemAttrText ( itemtype=> itemtype,
5253                     itemkey => itemkey,
5254                     aname   => 'MESSAGE_DESCRIPTION',
5255                               avalue  => l_message);
5256 
5257         resultout := 'COMPLETE:';
5258         RETURN ;
5259     END IF;
5260 
5261     --
5262     -- CANCEL mode
5263     --
5264     IF (funcmode = 'CANCEL') THEN
5265       --
5266       resultout := 'COMPLETE:';
5267       RETURN;
5268       --
5269     END IF;
5270 
5271     --
5272     -- TIMEOUT mode
5273     --
5274     IF (funcmode = 'TIMEOUT') THEN
5275       --
5276       resultout := 'COMPLETE:';
5277       RETURN;
5278       --
5279     END IF;
5280 
5281    IF (is_debug_procedure_on) THEN
5282        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5283    END IF;
5284 
5285   EXCEPTION
5286      WHEN OTHERS THEN
5287 
5288          IF (is_debug_exception_on) THEN
5289             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5290                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5291         END IF;
5292         IF okl_quote_csr%ISOPEN THEN
5293            CLOSE okl_quote_csr;
5294         END IF;
5295 
5296         wf_core.context('OKL_AM_QUOTES_WF' , 'pop_cp_quote_att', itemtype, itemkey, actid, funcmode);
5297         RAISE;
5298 
5299   END pop_cp_quote_att;
5300 
5301   -- Start of comments
5302   --
5303   -- Procedure Name : CHECK_IF_PARTIAL_QUOTE
5304   -- Description    : Check for Partial Quote
5305   -- Business Rules :
5306   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5307   -- Version     : 1.0
5308   --
5309   -- End of comments
5310   PROCEDURE CHECK_IF_PARTIAL_QUOTE(
5311                                     itemtype    IN  VARCHAR2,
5312                                     itemkey   IN  VARCHAR2,
5313                                     actid       IN  NUMBER,
5314                                     funcmode IN  VARCHAR2,
5315                                     resultout OUT NOCOPY VARCHAR2) IS
5316     l_id      NUMBER;
5317     l_partial_yn    VARCHAR2(1);
5318     l_khr_id        NUMBER;
5319     l_rule_khr_id   NUMBER;
5320     l_qtp_code      VARCHAR2(30);
5321     l_qtev_rec      okl_trx_quotes_pub.qtev_rec_type;
5322     l_rgd_code      VARCHAR2(30);
5323 
5324     CURSOR c_qte_csr(c_id NUMBER) IS
5325     SELECT  partial_yn, khr_id, qtp_code
5326     FROM    OKL_TRX_QUOTES_B
5327     WHERE   id = c_id;
5328 
5329     l_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5330     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
5331 
5332     API_ERROR EXCEPTION;
5333 -- for debug logging
5334     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_if_partial_quote';
5335     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5336     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5337     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5338   BEGIN
5339 
5340    IF (is_debug_procedure_on) THEN
5341        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5342    END IF;
5343 
5344     IF (funcmode = 'RUN') THEN
5345 
5346         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
5347                         itemkey => itemkey,
5348                       aname   => 'TRANSACTION_ID');
5349 
5350         OPEN c_qte_csr(l_id);
5351         FETCH c_qte_csr INTO l_partial_yn, l_khr_id, l_qtp_code;
5352         CLOSE c_qte_csr;
5353 
5354         l_qtev_rec.khr_id := l_khr_id;
5355         l_qtev_rec.qtp_code := l_qtp_code;
5356         l_rule_khr_id := okl_am_util_pvt.get_rule_chr_id (l_qtev_rec);
5357         IF l_qtp_code LIKE 'TER_RECOURSE%' THEN
5358                 l_rgd_code := 'AVTPAR';
5359         ELSE
5360                 l_rgd_code := 'AMTPAR';
5361         END IF;
5362 
5363      IF l_partial_yn = 'Y' THEN
5364 
5365          OKL_AM_UTIL_PVT.get_rule_record(
5366                                   p_rgd_code     => l_rgd_code,
5367                                   p_rdf_code     => 'AMAPRE',
5368                                   p_chr_id     => l_rule_khr_id,
5369                                   p_cle_id     => NULL,
5370                                   x_rulv_rec     => l_rulv_rec,
5371                                   x_return_status => l_return_status,
5372                                   p_message_yn => FALSE);
5373 
5374    IF (is_debug_statement_on) THEN
5375        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5376        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
5377    END IF;
5378 
5379      IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
5380 
5381       IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
5382 
5383                 resultout := 'COMPLETE:Y';
5384             ELSE
5385                 resultout := 'COMPLETE:N';
5386             END IF;
5387         ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
5388 
5389             resultout := 'COMPLETE:N';
5390         ELSE
5391             RAISE API_ERROR;
5392         END IF;
5393     ELSE
5394         resultout := 'COMPLETE:N';
5395     END IF;
5396 
5397     RETURN;
5398 
5399    END IF;
5400 
5401    IF (is_debug_procedure_on) THEN
5402        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5403    END IF;
5404 
5405   EXCEPTION
5406 
5407      WHEN API_ERROR THEN
5408 
5409          IF (is_debug_exception_on) THEN
5410             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5411         END IF;
5412 
5413         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_PARTIAL_QUOTE', itemtype, itemkey, actid, funcmode);
5414         RAISE;
5415 
5416      WHEN OTHERS THEN
5417 
5418         IF (is_debug_exception_on) THEN
5419             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5420                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5421         END IF;
5422 
5423         IF c_qte_csr%ISOPEN THEN
5424            CLOSE c_qte_csr;
5425         END IF;
5426 
5427         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_PARTIAL_QUOTE', itemtype, itemkey, actid, funcmode);
5428         RAISE;
5429 
5430   END CHECK_IF_PARTIAL_QUOTE;
5431 
5432   -- Start of comments
5433   --
5434   -- Procedure Name : pop_stop_notification
5435   -- Description    : populates stop notification
5436   -- Business Rules :
5437   -- Parameters     : document_id,display_type, document, document_type
5438   -- Version     : 1.0
5439   -- History        : rkuttiya created 22-SEP-2003  Bug:2794685
5440   --                : RMUNJULU 03-OCT-03 2794685 Changed to get proper results
5441   -- End of comments
5442 
5443   PROCEDURE pop_stop_notification (document_id   in varchar2,
5444                                    display_type  in varchar2,
5445                                    document      in out nocopy varchar2,
5446                                    document_type in out nocopy varchar2) IS
5447 
5448 
5449     -- Cursor to obtain quote and contract details
5450     CURSOR  c_quote_ctr  ( p_qte_id   IN NUMBER)
5451     IS
5452     SELECT  TRX.ID,
5453             TRX.QUOTE_NUMBER,
5454             TRX.KHR_ID,
5455             TRX.QTP_CODE,
5456             KHR.CONTRACT_NUMBER
5457     FROM    OKL_TRX_QUOTES_B TRX,
5458             OKC_K_HEADERS_B KHR
5459     WHERE   TRX.id = p_qte_id
5460     AND     TRX.KHR_ID = KHR.ID;
5461 
5462 
5463     l_quote_ctr         c_quote_ctr%rowtype;
5464     l_quote_id          NUMBER;
5465     l_rgd_code          VARCHAR2(30);
5466     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
5467     l_return_status     VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5468     l_message           VARCHAR2(32000);
5469 
5470     l_tolerance_option VARCHAR2(150);
5471     l_tolerance_value NUMBER;
5472     l_tolerance_formula VARCHAR2(150);
5473     l_tolerance_basis   VARCHAR2(30);
5474     l_approval_formula  VARCHAR2(150);
5475 
5476 
5477     l_user_name      WF_USERS.name%type;
5478     l_name           WF_USERS.description%type;
5479     l_header_done    BOOLEAN := FALSE;
5480     l_pos            NUMBER;
5481     l_stop_type      VARCHAR2(15);
5482 -- for debug logging
5483     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_stop_notification';
5484     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5485     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5486     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5487 
5488   BEGIN
5489 
5490    IF (is_debug_procedure_on) THEN
5491        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5492    END IF;
5493 
5494 
5495         --get the parameters from document id
5496         l_pos      := INSTR(document_id, ':');
5497         l_quote_id   := SUBSTR(document_id, 1, l_pos - 1);
5498         l_stop_type   := SUBSTR(document_id, l_pos + 1, LENGTH(document_id) - l_pos);
5499 
5500         --get quote and contract details
5501         OPEN c_quote_ctr(l_quote_id);
5502         FETCH c_quote_ctr INTO l_quote_ctr;
5503         CLOSE c_quote_ctr;
5504 
5505         -- RMUNJULU Updated the message texts
5506         --setting the message dynamically based on different STOP  Global Variables
5507         IF l_stop_type = 'TOPTION' THEN -- Tolerance Allowed Option is set to NOT APPLICABLE
5508          l_message := '<html><body>'||
5509                       '<p>The termination quote approval process for Contract Number '||l_quote_ctr.contract_number||', Quote Number '||l_quote_ctr.quote_number||
5510                       ' has resulted in error.</p>'||
5511                       '<p>The Tolerance Allowed Option of the Gain/Loss value set of Termination Quote Process terms and conditions is set to NOT APPLICABLE.</p>'||
5512                       '<p>Please verify and change the Termination Quote Process terms and conditions and resubmit the quote for approval.</p> </body></html>';
5513         ELSIF l_stop_type = 'TFORMULAE' THEN -- Tolerance Allowed Formula returned no value
5514          l_message := '<html><body>'||
5515                       '<p>The termination quote approval process for Contract Number '||l_quote_ctr.contract_number||', Quote Number '||l_quote_ctr.quote_number||
5516                       ' has resulted in error.</p>'||
5517                       '<p>The Tolerance Allowed Formula of the Gain/Loss value set of Termination Quote Process terms and conditions has returned an error.</p> '||
5518                       '<p>Please  verify and change the Termination Quote Process terms and conditions and resubmit the quote for approval.</p> </body></html>';
5519         ELSIF l_stop_type = 'AFORMULA' THEN -- Approval Processing Formula is not set
5520          l_message := '<html><body>'||
5521                       '<p>The termination quote approval process for Contract Number: '||l_quote_ctr.contract_number||', Quote Number '||l_quote_ctr.quote_number||
5522                       ' has resulted in error.</p>'||
5523                       '<p>The Approval Processing Formula of the Gain/Loss value set of Termination Quote Process terms and conditions is not set.</p>'||
5524                       '<p>Please verify and change the Termination Quote Process terms and conditions and resubmit the quote for approval.</p> </body></html>';
5525         ELSIF l_stop_type = 'AFORMULAE' THEN -- Approval Processing Formula returned error
5526          l_message := '<html><body>'||
5527                       '<p>The termination quote approval process for Contract Number: '||l_quote_ctr.contract_number||', Quote Number: '||l_quote_ctr.quote_number||
5528                       ' has resulted in error.</p>'||
5529                       '<p>The Approval Processing Formula of the Gain/Loss value set of Termination Quote Process terms and conditions has returned an error. '||
5530                       '<p>Please verify and change the Termination Quote Process terms and conditions and resubmit the quote for approval.</p> </body></html>';
5531         END IF;
5532 
5533 
5534         document := l_message;
5535         document_type := display_type;
5536 
5537    IF (is_debug_procedure_on) THEN
5538        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5539    END IF;
5540 
5541         RETURN;
5542 
5543   EXCEPTION
5544      WHEN OTHERS THEN
5545         IF (is_debug_exception_on) THEN
5546             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5547                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5548         END IF;
5549         IF c_quote_ctr%ISOPEN THEN
5550            CLOSE c_quote_ctr;
5551         END IF;
5552 
5553   END pop_stop_notification;
5554 
5555   -- Start of comments
5556   --
5557   -- Procedure Name : CHECK_IF_QUOTE_GAIN_LOSS
5558   -- Description    : Check for Quote Gain or Loss
5559   -- Business Rules :
5560   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5561   -- Version     : 1.0
5562   -- History        : rkuttiya updated on 16-SEP-2003 Bug: 2794685
5563   --                : RMUNJULU 03-OCT-03 2794685 Changed to get proper results
5564   -- End of comments
5565 
5566   PROCEDURE CHECK_IF_QUOTE_GAIN_LOSS(
5567                                     itemtype    IN  VARCHAR2,
5568                                     itemkey   IN  VARCHAR2,
5569                                     actid       IN  NUMBER,
5570                                     funcmode IN  VARCHAR2,
5571                                     resultout OUT NOCOPY VARCHAR2) IS
5572     l_id     NUMBER;
5573     l_partial_yn    VARCHAR2(1);
5574     l_khr_id        NUMBER;
5575     l_rule_khr_id   NUMBER;
5576     l_qtp_code      VARCHAR2(30);
5577     l_qtev_rec      okl_trx_quotes_pub.qtev_rec_type;
5578     l_rgd_code      VARCHAR2(30);
5579 
5580 --Rkuttiya 18-SEP-2003 added "last_updated by" column to the  following cursor for bug 2794685
5581     CURSOR c_qte_csr(c_id NUMBER) IS
5582     SELECT  khr_id, qtp_code,last_updated_by
5583     FROM    OKL_TRX_QUOTES_B
5584     WHERE   id = c_id;
5585 
5586     CURSOR c_qtl_csr(c_id NUMBER) IS
5587     SELECT *
5588     FROM   OKL_TXL_QUOTE_LINES_B
5589     WHERE  qte_id =c_id;
5590 
5591     l_return_status     VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5592     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
5593 
5594     API_ERROR EXCEPTION;
5595 
5596     l_quote_total NUMBER := 0;
5597     l_quote_net  NUMBER := 0;
5598     l_tolerance  NUMBER := 0;
5599     l_seq  NUMBER;
5600     l_formula_value NUMBER;
5601 
5602     l_rule_found BOOLEAN := FALSE;
5603     l_check_gain_yn BOOLEAN := FALSE;
5604     l_line_formula_yn BOOLEAN := FALSE;
5605     l_always_approve_yn BOOLEAN := FALSE;
5606 
5607     l_calc_option VARCHAR2(150);
5608     l_fixed_value NUMBER;
5609     l_formula_name VARCHAR2(150);
5610 
5611     l_result VARCHAR2(50) := 'COMPLETE:NO';
5612 
5613 --rkuttiya 18-SEP-2003 Bug:2794685
5614     l_last_updated_by    NUMBER;
5615     l_user_name          VARCHAR2(200);
5616     l_name               VARCHAR2(200);
5617 -- for debug logging
5618     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_if_quote_gain_loss';
5619     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5620     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5621     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5622   BEGIN
5623 
5624    IF (is_debug_procedure_on) THEN
5625        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5626    END IF;
5627 
5628     IF (funcmode = 'RUN') THEN
5629 
5630         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
5631         itemkey  => itemkey,
5632         aname    => 'TRANSACTION_ID');
5633 
5634 
5635 --rkuttiya 18-SEP-2003  added variable l_last_updated_by in the FETCH clause bug: 2794685
5636         OPEN c_qte_csr(l_id);
5637         FETCH c_qte_csr INTO l_khr_id, l_qtp_code,l_last_updated_by;
5638         CLOSE c_qte_csr;
5639 
5640         l_qtev_rec.khr_id := l_khr_id;
5641         l_qtev_rec.qtp_code := l_qtp_code;
5642         l_rule_khr_id := okl_am_util_pvt.get_rule_chr_id (l_qtev_rec);
5643         IF l_qtp_code LIKE 'TER_RECOURSE%' THEN
5644                 l_rgd_code := 'AVTGAL';
5645         ELSE
5646                 l_rgd_code := 'AMTGAL';
5647         END IF;
5648 
5649      OKL_AM_UTIL_PVT.get_rule_record(
5650                                     p_rgd_code         => l_rgd_code,
5651                                     p_rdf_code         => 'AMAPRE',
5652                                     p_chr_id         => l_rule_khr_id,
5653                                     p_cle_id         => NULL,
5654                                     x_rulv_rec         => l_rulv_rec,
5655                                     x_return_status => l_return_status,
5656                                     p_message_yn => FALSE);
5657 
5658    IF (is_debug_statement_on) THEN
5659        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5660        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
5661    END IF;
5662 
5663 
5664      IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
5665               IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
5666                 l_result := CHECK_CALC_OPTIONS(itemtype   => itemtype,
5667                                                itemkey    => itemkey,
5668                                                actid      => actid,
5669                                                funcmode   => funcmode,
5670                                             p_rgd_code => l_rgd_code,
5671                                 p_khr_id   => l_rule_khr_id,
5672                                                p_qte_id   => l_id);
5673 
5674 --rkuttiya 18-SEP-2003  added for bug 2794685
5675                 IF l_result = 'COMPLETE:STOP' THEN
5676 --Set notification body
5677                    wf_engine.SetItemAttrText (
5678                                               itemtype=> itemtype,
5679                   itemkey => itemkey,
5680                   aname   => 'MESSAGE_DOC',
5681                                         avalue  => 'plsql:okl_am_quotes_wf.pop_stop_notification/'||l_id||':'||G_STOP);
5682 
5683 --get the name of requestor
5684 
5685                    okl_am_wf.get_notification_agent(
5686                                                itemtype           => itemtype
5687                                       , itemkey            => itemkey
5688                                       , actid           => actid
5689                                       , funcmode           => funcmode
5690                                              , p_user_id          => l_last_updated_by
5691                                              , x_name             => l_user_name
5692                                       , x_description      => l_name);
5693 
5694 --set the value for item attribute 'REQUESTER'
5695 
5696                    wf_engine.SetItemAttrText ( itemtype    => itemtype,
5697                    itemkey     => itemkey,
5698                    aname       => 'REQUESTER',
5699                                         avalue      => l_user_name);
5700                  END IF;
5701             ELSE
5702                l_result := 'COMPLETE:NO';
5703             end if;
5704 
5705 
5706            ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
5707              resultout := 'COMPLETE:NO';
5708            ELSE
5709              RAISE API_ERROR;
5710           END IF;
5711         resultout := l_result;
5712 
5713         RETURN;
5714     END IF;
5715 
5716    IF (is_debug_procedure_on) THEN
5717        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5718    END IF;
5719 
5720   EXCEPTION
5721 
5722      WHEN API_ERROR THEN
5723 
5724         IF (is_debug_exception_on) THEN
5725             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5726         END IF;
5727 
5728         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_QUOTE_GAIN_LOSS', itemtype, itemkey, actid, funcmode);
5729         RAISE;
5730 
5731      WHEN OTHERS THEN
5732 
5733         IF (is_debug_exception_on) THEN
5734             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5735                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5736         END IF;
5737 
5738         IF c_qte_csr%ISOPEN THEN
5739            CLOSE c_qte_csr;
5740         END IF;
5741 
5742         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_QUOTE_GAIN_LOSS', itemtype, itemkey, actid, funcmode);
5743         RAISE;
5744 
5745   END CHECK_IF_QUOTE_GAIN_LOSS;
5746 
5747   -- Start of comments
5748   --
5749   -- Procedure Name : CHECK_FOR_EXT_APPROVAL
5750   -- Description    : Check for Quote Approvers
5751   -- Business Rules :
5752   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5753   -- Version     : 1.0
5754   --
5755   -- End of comments
5756   PROCEDURE CHECK_FOR_EXT_APPROVAL(
5757                                     itemtype    IN  VARCHAR2,
5758                                     itemkey   IN  VARCHAR2,
5759                                     actid       IN  NUMBER,
5760                                     funcmode IN  VARCHAR2,
5761                                     resultout OUT NOCOPY VARCHAR2) IS
5762 
5763     l_quote_id                      varchar2(100);
5764 
5765  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5766  l_api_version  CONSTANT NUMBER := 1;
5767     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
5768  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
5769  l_msg_data      VARCHAR2(2000);
5770  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
5771  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
5772     l_party_count  NUMBER;
5773 
5774     API_ERROR           EXCEPTION;
5775 -- for debug logging
5776     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_ext_approval';
5777     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5778     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5779     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5780 
5781   BEGIN
5782 
5783    IF (is_debug_procedure_on) THEN
5784        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5785    END IF;
5786 
5787     IF (funcmode = 'RUN') THEN
5788 
5789         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
5790                               itemkey  => itemkey,
5791                             aname    => 'TRANSACTION_ID');
5792 
5793         l_q_party_uv_rec.quote_id := l_quote_id;
5794         l_q_party_uv_rec.qp_role_code := 'APPROVER';
5795 
5796 
5797         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
5798             RAISE API_ERROR;
5799         END IF;
5800 
5801   okl_am_parties_pvt.get_quote_parties (
5802    p_api_version  => l_api_version,
5803    p_init_msg_list  => l_init_msg_list,
5804    x_msg_count      => l_msg_count,
5805    x_msg_data      => l_msg_data,
5806    x_return_status  => l_return_status,
5807    p_q_party_uv_rec => l_q_party_uv_rec,
5808    x_q_party_uv_tbl => l_q_party_uv_tbl,
5809    x_record_count  => l_party_count);
5810 
5811       IF (is_debug_statement_on) THEN
5812        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5813        'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
5814    END IF;
5815 
5816 
5817         IF l_party_count > 0 THEN
5818 
5819             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
5820                     itemkey  => itemkey,
5821                   aname    => 'PARTY_COUNT',
5822                                        avalue   => l_party_count);
5823 
5824 
5825             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
5826                     itemkey  => itemkey,
5827                   aname    => 'PARTY_TYPE',
5828                                        avalue   => 'APPROVER');
5829 
5830 
5831             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
5832                     itemkey  => itemkey,
5833                   aname    => 'PROCESS_CODE',
5834                                        avalue   => 'AMTER');
5835 
5836              resultout := 'COMPLETE:Y';
5837         ELSE
5838              resultout := 'COMPLETE:N';
5839         END IF;
5840 
5841       RETURN ;
5842     END IF;
5843 
5844    IF (is_debug_procedure_on) THEN
5845        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5846    END IF;
5847 
5848   EXCEPTION
5849 
5850      WHEN API_ERROR THEN
5851         IF (is_debug_exception_on) THEN
5852             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5853         END IF;
5854         IF (is_debug_exception_on) THEN
5855             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5856         END IF;
5857         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
5858                         itemtype, itemkey, actid, funcmode);
5859      WHEN OTHERS THEN
5860         IF (is_debug_exception_on) THEN
5861             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5862                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5863         END IF;
5864 
5865         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_EXT_APPROVAL',
5866                         itemtype, itemkey, actid, funcmode);
5867         RAISE;
5868   END CHECK_FOR_EXT_APPROVAL;
5869 
5870   -- Start of comments
5871   --
5872   -- Procedure Name : GET_QUOTE_PARTY_DETAILS
5873   -- Description    : Generic procedure called from OKLAMNQT Workflow
5874   -- Business Rules :
5875   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5876   -- Version     : 1.0
5877   --
5878   -- End of comments
5879   PROCEDURE GET_QUOTE_PARTY_DETAILS(
5880                                     itemtype    IN  VARCHAR2,
5881                                     itemkey   IN  VARCHAR2,
5882                                     actid       IN  NUMBER,
5883                                     funcmode IN  VARCHAR2,
5884                                     resultout OUT NOCOPY VARCHAR2) IS
5885 
5886     l_quote_id          NUMBER;
5887     l_party_count       NUMBER;
5888     l_party_type        VARCHAR2(30);
5889 
5890     l_return_status     VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5891     l_api_version       CONSTANT NUMBER := 1;
5892     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
5893     l_msg_count         NUMBER  := OKL_API.G_MISS_NUM;
5894     l_msg_data          VARCHAR2(2000);
5895     l_q_party_uv_tbl    okl_am_parties_pvt.q_party_uv_tbl_type;
5896     l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
5897     l_total_party_count NUMBER;
5898     l_current_rec       NUMBER;
5899 
5900     l_recipient_type    VARCHAR2(50);
5901     l_recipient_id      NUMBER;
5902     l_recipient_desc    VARCHAR2(1000);
5903 
5904     l_external_approver VARCHAR2(30000);
5905 
5906     MISSING_DETAILS_ERROR  EXCEPTION;
5907 -- for debug logging
5908     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'get_quote_party_details';
5909     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5910     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5911     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5912 
5913   BEGIN
5914 
5915    IF (is_debug_procedure_on) THEN
5916        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5917    END IF;
5918 
5919     IF (funcmode = 'RUN') THEN
5920       -- Get the values for dispose_asset before calling the dispose_asset api
5921 
5922         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
5923                               itemkey  => itemkey,
5924                             aname    => 'TRANSACTION_ID');
5925 
5926         l_party_count := WF_ENGINE.GetItemAttrNumber( itemtype => itemtype,
5927                               itemkey  => itemkey,
5928                             aname    => 'PARTY_COUNT');
5929 
5930         l_party_type := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
5931                               itemkey  => itemkey,
5932                             aname    => 'PARTY_TYPE');
5933 
5934         l_q_party_uv_rec.quote_id       := l_quote_id;
5935         l_q_party_uv_rec.qp_role_code   := l_party_type;
5936 
5937         IF l_party_count > 0 THEN
5938 
5939       okl_am_parties_pvt.get_quote_parties (
5940            p_api_version  => l_api_version,
5941            p_init_msg_list  => l_init_msg_list,
5942            x_msg_count      => l_msg_count,
5943            x_msg_data      => l_msg_data,
5944            x_return_status  => l_return_status,
5945            p_q_party_uv_rec => l_q_party_uv_rec,
5946            x_q_party_uv_tbl => l_q_party_uv_tbl,
5947            x_record_count  => l_total_party_count);
5948 
5949    IF (is_debug_statement_on) THEN
5950        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5951        'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
5952    END IF;
5953 
5954    IF l_q_party_uv_tbl(l_party_count).co_email IS NOT NULL THEN
5955 
5956         wf_engine.SetItemAttrText ( itemtype=> itemtype,
5957             itemkey => itemkey,
5958             aname   => 'EMAIL_ADDRESS',
5959             avalue  => l_q_party_uv_tbl(l_party_count).co_email);
5960 
5961         l_recipient_desc := nvl(l_q_party_uv_tbl(l_party_count).co_contact_name,
5962         l_q_party_uv_tbl(l_party_count).po_party_name);
5963 
5964 --19-jul-2007 ansethur  R12B XML Publisher Starts
5965         l_recipient_id := l_q_party_uv_tbl(l_party_count).po_party_id1;
5966 
5967         IF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_PARTY' THEN
5968               l_recipient_type := 'LESSEE';
5969         ELSIF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_VENDOR' THEN
5970               l_recipient_type := 'VENDOR';
5971         ELSIF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_OPERUNIT' THEN
5972                l_recipient_type := 'LESSEE';
5973         END IF;
5974 --19-jul-2007 ansethur  R12B XML Publisher Ends
5975 
5976   ELSIF l_q_party_uv_tbl(l_party_count).co_contact_id1 IS NOT NULL THEN
5977 
5978         -- Recipient is at contact level
5979         l_recipient_id := l_q_party_uv_tbl(l_party_count).co_contact_id1;
5980         --rkuttiya changed recipient type to LESSEE/VENDOR for XMLP Project
5981         IF l_q_party_uv_tbl(l_party_count).co_contact_object = 'OKX_PARTY' THEN
5982             --l_recipient_type := 'PC';
5983               l_recipient_type := 'LESSEE';
5984         ELSIF l_q_party_uv_tbl(l_party_count).co_contact_object = 'OKX_VENDOR' THEN
5985             --l_recipient_type := 'VC';
5986               l_recipient_type := 'VENDOR';
5987         ELSIF l_q_party_uv_tbl(l_party_count).co_contact_object = 'OKX_OPERUNIT' THEN
5988             --l_recipient_type := 'O';
5989               l_recipient_type := 'LESSEE';
5990         END IF;
5991 
5992         l_recipient_desc := l_q_party_uv_tbl(l_party_count).co_contact_name;
5993 
5994   ELSIF l_q_party_uv_tbl(l_party_count).po_party_id1 IS NOT NULL THEN
5995 
5996         -- Recipient is at po party level
5997         l_recipient_id := l_q_party_uv_tbl(l_party_count).po_party_id1;
5998 
5999         IF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_PARTY' THEN
6000             --l_recipient_type := 'P';
6001               l_recipient_type := 'LESSEE';
6002         ELSIF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_VENDOR' THEN
6003             --l_recipient_type := 'V';
6004               l_recipient_type := 'VENDOR';
6005         ELSIF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_OPERUNIT' THEN
6006             --l_recipient_type := 'O';
6007               l_recipient_type := 'LESSEE';
6008         END IF;
6009 
6010         l_recipient_desc := l_q_party_uv_tbl(l_party_count).po_party_name;
6011 
6012   ELSE
6013         OKC_API.SET_MESSAGE (
6014    p_app_name => OKC_API.G_APP_NAME,
6015    p_msg_name => 'NO_RECIPIENT',
6016    p_token1 => 'PARAM',
6017    p_token1_value => l_quote_id);
6018 
6019         RAISE MISSING_DETAILS_ERROR;
6020 
6021   END IF;
6022 
6023   IF l_q_party_uv_tbl(l_party_count).co_email IS NULL THEN
6024    -- Populate remaining Item Attributes for Fulfillment
6025 
6026      IF l_recipient_type IS NOT NULL THEN
6027          wf_engine.SetItemAttrText ( itemtype=> itemtype,
6028                                      itemkey => itemkey,
6029                                      aname   => 'RECIPIENT_TYPE',
6030                                      avalue  => l_recipient_type);
6031      ELSE
6032          OKC_API.SET_MESSAGE (
6033             p_app_name => OKC_API.G_APP_NAME,
6034             p_msg_name => 'NO_RECIPIENT_TYPE',
6035             p_token1 => 'PARAM',
6036             p_token1_value => l_quote_id);
6037 
6038          RAISE MISSING_DETAILS_ERROR;
6039      END IF;
6040 
6041      IF l_recipient_id IS NOT NULL THEN
6042          wf_engine.SetItemAttrText (
6043                   itemtype=> itemtype,
6044                   itemkey => itemkey,
6045                   aname   => 'RECIPIENT_ID',
6046                   avalue  => l_recipient_id);
6047     ELSE
6048          OKC_API.SET_MESSAGE (
6049           p_app_name => OKC_API.G_APP_NAME,
6050           p_msg_name => 'NO_RECIPIENT_ID',
6051           p_token1 => 'PARAM',
6052           p_token1_value => l_quote_id);
6053 
6054          RAISE MISSING_DETAILS_ERROR;
6055     END IF;
6056   END IF;
6057 
6058     IF l_party_type = 'APPROVER' AND l_recipient_desc IS NOT NULL THEN
6059 
6060         l_external_approver := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6061                       itemkey  => itemkey,
6062                     aname    => 'EXTERNAL_APPROVER');
6063 
6064         IF l_external_approver IS NOT NULL THEN
6065             l_external_approver := l_external_approver||'<tr><td>'||l_recipient_desc||'</td></tr>';
6066         ELSE
6067             l_external_approver := '<tr><td>'||l_recipient_desc||'</td></tr>';
6068         END IF;
6069 
6070         wf_engine.SetItemAttrText ( itemtype=> itemtype,
6071             itemkey => itemkey,
6072             aname   => 'EXTERNAL_APPROVER',
6073                         avalue  => l_external_approver);
6074 
6075     END IF;
6076 --19-jul-2007 ansethur  R12B XML Publisher Starts
6077     IF l_recipient_type IS NOT NULL THEN
6078         wf_engine.SetItemAttrText ( itemtype=> itemtype,
6079                                        itemkey => itemkey,
6080                                        aname   => 'RECIPIENT_TYPE',
6081                                        avalue  => l_recipient_type);
6082     ELSE
6083         OKC_API.SET_MESSAGE (
6084                   p_app_name => OKC_API.G_APP_NAME,
6085                   p_msg_name => 'NO_RECIPIENT_TYPE',
6086                   p_token1 => 'PARAM',
6087                   p_token1_value => l_quote_id);
6088 
6089         RAISE MISSING_DETAILS_ERROR;
6090     END IF;
6091 
6092     IF l_recipient_id IS NOT NULL THEN
6093          wf_engine.SetItemAttrNumber ( itemtype=> itemtype,
6094                                        itemkey => itemkey,
6095                                        aname   => 'RECIPIENT_ID',
6096                                        avalue  => l_recipient_id);
6097     ELSE
6098         OKC_API.SET_MESSAGE (
6099                      p_app_name => OKC_API.G_APP_NAME,
6100                      p_msg_name => 'NO_RECIPIENT_ID',
6101                      p_token1 => 'PARAM',
6102                      p_token1_value => l_quote_id);
6103 
6104                      RAISE MISSING_DETAILS_ERROR;
6105     END IF;
6106 --19-jul-2007 ansethur  R12B XML Publisher Ends
6107         wf_engine.SetItemAttrText ( itemtype=> itemtype,
6108                                     itemkey => itemkey,
6109                                     aname   => 'RECIPIENT_DESCRIPTION',
6110                                     avalue  => l_recipient_desc);
6111 
6112         -- Decrement party counter
6113          wf_engine.SetItemAttrNumber ( itemtype=> itemtype,
6114                                        itemkey => itemkey,
6115                                        aname   => 'PARTY_COUNT',
6116                                        avalue  => l_party_count-1);
6117 
6118 -- If there is no email found on the quote party record
6119 -- then return NO_EMAIL, the workflow bypasses the Fulfillment
6120 -- request in this instance.
6121 -- Logic changed for bug ????????
6122         IF l_q_party_uv_tbl(l_party_count).co_email IS NOT NULL THEN
6123             resultout := 'COMPLETE:NEXT';
6124         ELSE
6125             resultout := 'COMPLETE:NO_EMAIL';
6126         END IF;
6127   ELSE
6128          -- MDOKAL, 15-APR-2003 Bug 2862254, Fix for HTML Notification Issue
6129          WF_ENGINE.SetItemAttrText(
6130                             itemtype => itemtype,
6131                 itemkey  => itemkey,
6132                 aname    => 'EXTERNAL_APPROVER_DOC',
6133                           avalue   => 'plsql:okl_am_quotes_wf.pop_external_approver_doc/'||itemkey);
6134 
6135          resultout := 'COMPLETE:DONE';
6136   END IF;
6137  RETURN ;
6138 END IF;
6139 
6140 
6141    IF (is_debug_procedure_on) THEN
6142        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6143    END IF;
6144 
6145     EXCEPTION
6146      WHEN MISSING_DETAILS_ERROR THEN
6147 
6148         IF (is_debug_exception_on) THEN
6149             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED : MISSING_DETAILS_ERROR');
6150         END IF;
6151 
6152         WF_CORE.context('OKL_AM_QUOTES_WF' , 'GET_QUOTE_PARTY_DETAILS',
6153                         itemtype, itemkey, actid, funcmode);
6154 
6155   END GET_QUOTE_PARTY_DETAILS;
6156 
6157   -- Start of comments
6158   --
6159   -- Procedure Name : CHECK_FOR_ADVANCE_NOTICE
6160   -- Description    : Checks for any Advanced Notices
6161   -- Business Rules :
6162   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6163   -- Version     : 1.0
6164   --
6165   -- End of comments
6166   PROCEDURE CHECK_FOR_ADVANCE_NOTICE(
6167                                     itemtype    IN  VARCHAR2,
6168                                     itemkey   IN  VARCHAR2,
6169                                     actid       IN  NUMBER,
6170                                     funcmode IN  VARCHAR2,
6171                                     resultout OUT NOCOPY VARCHAR2) IS
6172 
6173     l_quote_id                      varchar2(100);
6174 
6175  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6176  l_api_version  CONSTANT NUMBER := 1;
6177     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
6178  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
6179  l_msg_data      VARCHAR2(2000);
6180  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
6181  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
6182     l_party_count  NUMBER;
6183     l_delay_days        NUMBER(10,4);
6184 
6185     CURSOR c_delay_days_csr(c_qte_id  NUMBER) IS
6186  SELECT  max(QP_DELAY_DAYS) DELAY_DAYS
6187  FROM   OKL_AM_QUOTE_PARTIES_UV
6188     WHERE  quote_id = c_qte_id
6189  AND    qp_role_code = 'ADVANCE_NOTICE';
6190 
6191     API_ERROR           EXCEPTION;
6192 -- for debug logging
6193     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_advance_notice';
6194     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6195     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6196     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6197   BEGIN
6198 
6199    IF (is_debug_procedure_on) THEN
6200        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6201    END IF;
6202 
6203     IF (funcmode = 'RUN') THEN
6204 
6205         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6206                               itemkey  => itemkey,
6207                             aname    => 'TRANSACTION_ID');
6208 
6209         l_q_party_uv_rec.quote_id := l_quote_id;
6210         l_q_party_uv_rec.qp_role_code := 'ADVANCE_NOTICE';
6211 
6212   okl_am_parties_pvt.get_quote_parties (
6213    p_api_version  => l_api_version,
6214    p_init_msg_list  => l_init_msg_list,
6215    x_msg_count      => l_msg_count,
6216    x_msg_data      => l_msg_data,
6217    x_return_status  => l_return_status,
6218    p_q_party_uv_rec => l_q_party_uv_rec,
6219    x_q_party_uv_tbl => l_q_party_uv_tbl,
6220    x_record_count  => l_party_count);
6221 
6222    IF (is_debug_statement_on) THEN
6223        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6224        'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
6225    END IF;
6226 
6227         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6228             RAISE API_ERROR;
6229         END IF;
6230 
6231         IF l_party_count > 0 THEN
6232 
6233    OPEN c_delay_days_csr(l_quote_id);
6234    FETCH c_delay_days_csr INTO l_delay_days;
6235    CLOSE c_delay_days_csr;
6236 
6237             WF_ENGINE.SetItemAttrNumber( itemtype => itemtype,
6238                     itemkey  => itemkey,
6239                   aname    => 'NOTICE_DELAY',
6240                                        avalue   => l_delay_days);
6241 
6242             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6243                     itemkey  => itemkey,
6244                   aname    => 'PARTY_COUNT',
6245                                        avalue   => l_party_count);
6246 
6247 
6248             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6249                     itemkey  => itemkey,
6250                   aname    => 'PARTY_TYPE',
6251                                        avalue   => 'ADVANCE_NOTICE');
6252 
6253 
6254             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6255                     itemkey  => itemkey,
6256                   aname    => 'PROCESS_CODE',
6257                                        avalue   => 'AMTER');
6258 
6259              resultout := 'COMPLETE:Y';
6260         ELSE
6261              resultout := 'COMPLETE:N';
6262         END IF;
6263 
6264       RETURN ;
6265     END IF;
6266 
6267    IF (is_debug_procedure_on) THEN
6268        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6269    END IF;
6270 
6271   EXCEPTION
6272 
6273      WHEN API_ERROR THEN
6274         IF (is_debug_exception_on) THEN
6275             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6276         END IF;
6277 
6278         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6279                         itemtype, itemkey, actid, funcmode);
6280 
6281      WHEN OTHERS THEN
6282 
6283         IF (is_debug_exception_on) THEN
6284             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6285                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6286         END IF;
6287 
6288 
6289         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_ADVANCE_NOTICE',
6290                         itemtype, itemkey, actid, funcmode);
6291         RAISE;
6292 
6293   END CHECK_FOR_ADVANCE_NOTICE;
6294 
6295   -- Start of comments
6296   --
6297   -- Procedure Name : CHECK_FOR_RECIPIENT
6298   -- Description    : Checks for any RECIPIENT's
6299   -- Business Rules :
6300   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6301   -- Version     : 1.0
6302   --
6303   -- End of comments
6304   PROCEDURE CHECK_FOR_RECIPIENT(
6305                                     itemtype    IN  VARCHAR2,
6306                                     itemkey   IN  VARCHAR2,
6307                                     actid       IN  NUMBER,
6308                                     funcmode IN  VARCHAR2,
6309                                     resultout OUT NOCOPY VARCHAR2) IS
6310 
6311 
6312 
6313     l_quote_id                      varchar2(100);
6314 
6315  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6316  l_api_version  CONSTANT NUMBER := 1;
6317     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
6318  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
6319  l_msg_data      VARCHAR2(2000);
6320  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
6321  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
6322     l_party_count  NUMBER;
6323 
6324     API_ERROR           EXCEPTION;
6325 -- for debug logging
6326     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_recipient';
6327     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6328     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6329     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6330 
6331   BEGIN
6332 
6333    IF (is_debug_procedure_on) THEN
6334        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6335    END IF;
6336 
6337     IF (funcmode = 'RUN') THEN
6338 
6339         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6340                               itemkey  => itemkey,
6341                             aname    => 'TRANSACTION_ID');
6342 
6343         l_q_party_uv_rec.quote_id := l_quote_id;
6344         l_q_party_uv_rec.qp_role_code := 'RECIPIENT';
6345 
6346         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6347             RAISE API_ERROR;
6348         END IF;
6349 
6350   okl_am_parties_pvt.get_quote_parties (
6351    p_api_version  => l_api_version,
6352    p_init_msg_list  => l_init_msg_list,
6353    x_msg_count      => l_msg_count,
6354    x_msg_data      => l_msg_data,
6355    x_return_status  => l_return_status,
6356    p_q_party_uv_rec => l_q_party_uv_rec,
6357    x_q_party_uv_tbl => l_q_party_uv_tbl,
6358    x_record_count  => l_party_count);
6359 
6360    IF (is_debug_statement_on) THEN
6361        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6362        'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
6363    END IF;
6364 
6365         IF l_party_count > 0 THEN
6366 
6367             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6368                     itemkey  => itemkey,
6369                   aname    => 'PARTY_COUNT',
6370                                        avalue   => l_party_count);
6371 
6372 
6373             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6374                     itemkey  => itemkey,
6375                   aname    => 'PARTY_TYPE',
6376                                        avalue   => 'RECIPIENT');
6377 
6378 
6379             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6380                     itemkey  => itemkey,
6381                   aname    => 'PROCESS_CODE',
6382                                        avalue   => 'AMTER');
6383 
6384              resultout := 'COMPLETE:Y';
6385         ELSE
6386              resultout := 'COMPLETE:N';
6387         END IF;
6388 
6389       RETURN ;
6390     END IF;
6391 
6392    IF (is_debug_procedure_on) THEN
6393        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6394    END IF;
6395 
6396   EXCEPTION
6397 
6398      WHEN API_ERROR THEN
6399         IF (is_debug_exception_on) THEN
6400             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6401         END IF;
6402         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6403                         itemtype, itemkey, actid, funcmode);
6404      WHEN OTHERS THEN
6405         IF (is_debug_exception_on) THEN
6406             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6407                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6408         END IF;
6409 
6410         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT',
6411                         itemtype, itemkey, actid, funcmode);
6412         RAISE;
6413 
6414   END CHECK_FOR_RECIPIENT;
6415 
6416   -- Start of comments
6417   --
6418   -- Procedure Name : CHECK_FOR_FYI
6419   -- Description    : Checks for any FYI's
6420   -- Business Rules :
6421   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6422   -- Version     : 1.0
6423   --
6424   -- End of comments
6425   PROCEDURE CHECK_FOR_FYI(
6426                                     itemtype    IN  VARCHAR2,
6427                                     itemkey   IN  VARCHAR2,
6428                                     actid       IN  NUMBER,
6429                                     funcmode IN  VARCHAR2,
6430                                     resultout OUT NOCOPY VARCHAR2) IS
6431 
6432 
6433 
6434     l_quote_id                      varchar2(100);
6435 
6436  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6437  l_api_version  CONSTANT NUMBER := 1;
6438     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
6439  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
6440  l_msg_data      VARCHAR2(2000);
6441  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
6442  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
6443     l_party_count  NUMBER;
6444 
6445     API_ERROR           EXCEPTION;
6446 -- for debug logging
6447     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_fyi';
6448     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6449     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6450     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6451   BEGIN
6452 
6453    IF (is_debug_procedure_on) THEN
6454        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6455    END IF;
6456 
6457     IF (funcmode = 'RUN') THEN
6458 
6459         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6460                               itemkey  => itemkey,
6461                             aname    => 'TRANSACTION_ID');
6462 
6463         l_q_party_uv_rec.quote_id := l_quote_id;
6464         l_q_party_uv_rec.qp_role_code := 'FYI';
6465 
6466         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6467             RAISE API_ERROR;
6468         END IF;
6469 
6470   okl_am_parties_pvt.get_quote_parties (
6471                            p_api_version  => l_api_version,
6472                            p_init_msg_list  => l_init_msg_list,
6473                            x_msg_count      => l_msg_count,
6474                            x_msg_data      => l_msg_data,
6475                            x_return_status  => l_return_status,
6476                            p_q_party_uv_rec => l_q_party_uv_rec,
6477                            x_q_party_uv_tbl => l_q_party_uv_tbl,
6478                            x_record_count  => l_party_count);
6479 
6480 
6481            IF (is_debug_statement_on) THEN
6482                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6483                'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
6484            END IF;
6485 
6486         IF l_party_count > 0 THEN
6487 
6488             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6489                     itemkey  => itemkey,
6490                   aname    => 'PARTY_COUNT',
6491                                        avalue   => l_party_count);
6492 
6493 
6494             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6495                     itemkey  => itemkey,
6496                   aname    => 'PARTY_TYPE',
6497                                        avalue   => 'FYI');
6498 
6499 
6500             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6501                     itemkey  => itemkey,
6502                   aname    => 'PROCESS_CODE',
6503                                        avalue   => 'AMTER');
6504 
6505              resultout := 'COMPLETE:Y';
6506         ELSE
6507              resultout := 'COMPLETE:N';
6508         END IF;
6509 
6510       RETURN ;
6511     END IF;
6512 
6513    IF (is_debug_procedure_on) THEN
6514        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6515    END IF;
6516 
6517   EXCEPTION
6518 
6519      WHEN API_ERROR THEN
6520         IF (is_debug_exception_on) THEN
6521             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6522         END IF;
6523 
6524         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6525                         itemtype, itemkey, actid, funcmode);
6526      WHEN OTHERS THEN
6527         IF (is_debug_exception_on) THEN
6528             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6529                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6530         END IF;
6531         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_FYI',
6532                         itemtype, itemkey, actid, funcmode);
6533         RAISE;
6534 
6535   END CHECK_FOR_FYI;
6536 
6537   -- Start of comments
6538   --
6539   -- Procedure Name : CHECK_FOR_RECIPIENT_ADD
6540   -- Description    : Checks for any additional recipients exists
6541   -- Business Rules :
6542   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6543   -- Version     : 1.0
6544   --
6545   -- End of comments
6546   PROCEDURE CHECK_FOR_RECIPIENT_ADD(
6547                                     itemtype    IN  VARCHAR2,
6548                                     itemkey   IN  VARCHAR2,
6549                                     actid       IN  NUMBER,
6550                                     funcmode IN  VARCHAR2,
6551                                     resultout OUT NOCOPY VARCHAR2) IS
6552 
6553 
6554 
6555     l_quote_id                      varchar2(100);
6556 
6557  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6558  l_api_version  CONSTANT NUMBER := 1;
6559     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
6560  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
6561  l_msg_data      VARCHAR2(2000);
6562  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
6563  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
6564     l_party_count  NUMBER;
6565 
6566     API_ERROR           EXCEPTION;
6567 -- for debug logging
6568     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_recipient_add';
6569     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6570     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6571     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6572 
6573   BEGIN
6574 
6575    IF (is_debug_procedure_on) THEN
6576        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6577    END IF;
6578 
6579     IF (funcmode = 'RUN') THEN
6580 
6581         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6582                               itemkey  => itemkey,
6583                             aname    => 'TRANSACTION_ID');
6584 
6585         l_q_party_uv_rec.quote_id := l_quote_id;
6586         l_q_party_uv_rec.qp_role_code := 'RECIPIENT_ADDITIONAL';
6587 
6588         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6589             RAISE API_ERROR;
6590         END IF;
6591 
6592   okl_am_parties_pvt.get_quote_parties (
6593    p_api_version  => l_api_version,
6594    p_init_msg_list  => l_init_msg_list,
6595    x_msg_count      => l_msg_count,
6596    x_msg_data      => l_msg_data,
6597    x_return_status  => l_return_status,
6598    p_q_party_uv_rec => l_q_party_uv_rec,
6599    x_q_party_uv_tbl => l_q_party_uv_tbl,
6600    x_record_count  => l_party_count);
6601 
6602 	   IF (is_debug_statement_on) THEN
6603 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6604 	       'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
6605 	   END IF;
6606 
6607         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6608             RAISE API_ERROR;
6609         END IF;
6610 
6611         IF l_party_count > 0 THEN
6612 
6613             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6614                     itemkey  => itemkey,
6615                   aname    => 'PARTY_COUNT',
6616                                        avalue   => l_party_count);
6617 
6618 
6619             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6620                     itemkey  => itemkey,
6621                   aname    => 'PARTY_TYPE',
6622                                        avalue   => 'RECIPIENT_ADDITIONAL');
6623 
6624 
6625             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6626                     itemkey  => itemkey,
6627                   aname    => 'PROCESS_CODE',
6628                                        avalue   => 'AMTER');
6629 
6630              resultout := 'COMPLETE:Y';
6631         ELSE
6632              resultout := 'COMPLETE:N';
6633         END IF;
6634 
6635       RETURN ;
6636     END IF;
6637 
6638    IF (is_debug_procedure_on) THEN
6639        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6640    END IF;
6641 
6642   EXCEPTION
6643 
6644      WHEN API_ERROR THEN
6645 
6646         IF (is_debug_exception_on) THEN
6647             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6648         END IF;
6649 
6650         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6651                         itemtype, itemkey, actid, funcmode);
6652      WHEN OTHERS THEN
6653 
6654         IF (is_debug_exception_on) THEN
6655             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6656                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6657         END IF;
6658 
6659         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6660                         itemtype, itemkey, actid, funcmode);
6661         RAISE;
6662 
6663   END CHECK_FOR_RECIPIENT_ADD;
6664 
6665   -- Start of comments
6666   --
6667   -- Function Name : CHECK_CALC_OPTIONS
6668   -- Description    : Called when quote is gain/loss
6669   -- Business Rules :
6670   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6671   -- Version  : 1.1
6672   --History         : rkuttiya  22-SEP-2003  modified for Bug:2794685
6673   --                : RMUNJULU 03-OCT-03 2794685 Changed to get proper results
6674   -- End of comments
6675 
6676  FUNCTION CHECK_CALC_OPTIONS(itemtype IN  VARCHAR2,
6677                             itemkey      IN  VARCHAR2,
6678                             actid        IN  NUMBER,
6679                             funcmode     IN  VARCHAR2,
6680                             p_rgd_code   IN VARCHAR2,
6681                    p_khr_id     IN NUMBER,
6682                             p_qte_id     IN NUMBER )
6683   RETURN VARCHAR2
6684   IS
6685 
6686 --rkuttiya 17-SEP-2003  commented for bug 2794685
6687 /*    CURSOR c_qtl_csr(c_id NUMBER) IS
6688       SELECT *
6689       FROM   OKL_TXL_QUOTE_LINES_B
6690       WHERE  qte_id =c_id;
6691 */
6692     l_id         NUMBER;
6693     l_partial_yn    VARCHAR2(1);
6694     l_khr_id        NUMBER;
6695     l_rule_khr_id   NUMBER;
6696     l_qtp_code      VARCHAR2(30);
6697     l_qtev_rec      okl_trx_quotes_pub.qtev_rec_type;
6698     l_rgd_code      VARCHAR2(30);
6699 
6700     l_quote_total NUMBER := 0;
6701     l_quote_net  NUMBER := 0;
6702     l_tolerance  VARCHAR2(150);
6703     l_seq      NUMBER;
6704 
6705     l_rule_found BOOLEAN := FALSE;
6706   --l_check_gain_yn BOOLEAN := FALSE;
6707     l_line_formula_yn BOOLEAN := FALSE;
6708     l_always_approve_yn BOOLEAN := FALSE;
6709 
6710     l_calc_option VARCHAR2(150);
6711     l_fixed_value NUMBER;
6712     l_formula_name VARCHAR2(150);
6713     l_approval_formula  VARCHAR2(150);
6714 
6715     l_result VARCHAR2(50) := 'COMPLETE:NO';
6716 
6717     l_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
6718     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
6719 
6720 --  rkuttiya 16-SEP-2003  Bug:2794685
6721     l_gain_loss_approval  VARCHAR2(100);
6722     l_tolerance_amount    NUMBER;
6723     l_formula_value       NUMBER;
6724     l_params           OKL_EXECUTE_FORMULA_PUB.ctxt_val_tbl_type;
6725     l_net_gain_loss       NUMBER;
6726 --  rkuttiya end;
6727 
6728     API_ERROR EXCEPTION;
6729 -- for debug logging
6730     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_calc_options';
6731     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6732     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6733     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6734   BEGIN
6735 
6736    IF (is_debug_procedure_on) THEN
6737        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6738    END IF;
6739 
6740         --rkuttiya  17-SEP-2003    added for Bug:2794685
6741         l_params(1).name  := 'quote_id'; -- for bug 12802662 changed
6742         l_params(1).value := p_qte_id;
6743         --rkuttiya end
6744 
6745      -- ***************************************
6746      -- Check tolerance calculation options for Gain/Loss
6747      -- ***************************************
6748 
6749      OKL_AM_UTIL_PVT.get_rule_record(
6750                                     p_rgd_code     => p_rgd_code,
6751                                     p_rdf_code     => 'AMGALO',
6752                                     p_chr_id     => p_khr_id,
6753                                     p_cle_id     => NULL,
6754                                     x_rulv_rec     => l_rulv_rec,
6755                                     x_return_status => l_return_status,
6756                                     p_message_yn => TRUE);
6757 
6758            IF (is_debug_statement_on) THEN
6759                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6760                'after call to okl_am_util_pvt.get_rule_record :'||l_return_status);
6761            END IF;
6762 
6763 
6764      IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
6765 
6766                 --rkuttiya 16-SEP-2003 added following code for bug:2794685
6767                 l_calc_option           := l_rulv_rec.rule_information7;
6768                 l_fixed_value           := NVL(TO_NUMBER(l_rulv_rec.rule_information4),0);
6769                 l_formula_name          := l_rulv_rec.rule_information6;
6770                 l_tolerance             := l_rulv_rec.rule_information5;
6771                 l_approval_formula      := l_rulv_rec.rule_information8;
6772         ELSE
6773         RAISE API_ERROR;
6774      END IF;
6775 
6776        --rkuttiya 16-SEP-2003 added following code for bug:2794685
6777        IF l_calc_option = 'NOT_APPLICABLE' THEN -- Tolerance option not applicable
6778 
6779           l_gain_loss_approval := 'COMPLETE:STOP';
6780           G_STOP := 'TOPTION'; -- Tolerance Option is not set
6781           l_tolerance_amount := 0;
6782 
6783           RETURN  l_gain_loss_approval;  -- RMUNJULU 2794685 Added
6784 
6785        ELSIF l_calc_option = 'USE_FIXED_AMOUNT' THEN -- Tolerance option is amount -- RMUNJULU CHANGED FROM AMOUNT
6786 
6787           l_gain_loss_approval := 'COMPLETE:YES';
6788           l_tolerance_amount := l_fixed_value;
6789 
6790        ELSIF l_calc_option = 'USE_FORMULA' THEN -- Tolerance option is formula
6791 
6792           l_gain_loss_approval := 'COMPLETE:YES';
6793 
6794           -- Get tolerance amount from tolerance formula
6795           OKL_AM_UTIL_PVT.get_formula_value (
6796                  p_formula_name           => l_formula_name,
6797                  p_chr_id                 => p_khr_id, -- RMUNJULU Changed
6798                  p_cle_id                 => NULL,
6799                  p_additional_parameters  => l_params, -- RMUNJULU 2794685 Added
6800                  x_formula_value          => l_formula_value,
6801                  x_return_status          => l_return_status);
6802 
6803            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6804             l_gain_loss_approval := 'COMPLETE:STOP';
6805                G_STOP := 'TFORMULAE'; -- Tolerance Formula has returned error
6806 
6807                RETURN  l_gain_loss_approval;    -- RMUNJULU 2794685 Added
6808             ELSE
6809              l_tolerance_amount := l_formula_value;
6810            END IF;
6811         END IF;
6812 
6813        --rkuttiya 17-SEP-2003  added following code for Bug:2794685
6814        -- Check Approval details
6815       IF l_approval_formula IS NULL THEN
6816 
6817          l_gain_loss_approval := 'COMPLETE:STOP';
6818          G_STOP := 'AFORMULA'; -- No Approval Processing Formula set
6819 
6820           RETURN  l_gain_loss_approval;  -- RMUNJULU 2794685 Added
6821 
6822       ELSE
6823 
6824          l_gain_loss_approval := 'COMPLETE:YES';
6825 
6826          -- Get Approval Processing Formula value : this will be the net gain loss for the quote
6827          OKL_AM_UTIL_PVT.get_formula_value (
6828                         p_formula_name           => l_approval_formula,
6829                         p_chr_id                 => p_khr_id, -- RMUNJULU Changed
6830                         p_cle_id                 => NULL,
6831                         p_additional_parameters  => l_params,
6832                         x_formula_value          => l_formula_value,
6833                         x_return_status          => l_return_status);
6834 
6835            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6836           l_gain_loss_approval := 'COMPLETE:STOP';
6837              G_STOP := 'AFORMULAE'; -- Approval Processing Formula returned error
6838 
6839              RETURN  l_gain_loss_approval;  -- RMUNJULU 2794685 Added
6840            ELSE
6841              l_net_gain_loss := l_formula_value;
6842            END IF;
6843       END IF;
6844 
6845       --Comparing the net Gain Loss with the tolerance amount
6846       IF l_gain_loss_approval = 'COMPLETE:YES' THEN
6847 
6848          -- If Loss or gain less than tolerance then approval required
6849          IF l_net_gain_loss < l_tolerance_amount THEN -- RMUNJULU Changed
6850 
6851             l_gain_loss_approval := 'COMPLETE:YES'; -- Gain Loss Approval is needed
6852 
6853             wf_engine.SetItemAttrNumber(
6854                        itemtype => itemtype,
6855            itemkey  => itemkey,
6856            aname    => 'QUOTE_GL',
6857                        avalue   => (l_net_gain_loss));
6858          ELSE
6859             l_gain_loss_approval := 'COMPLETE:NO';   -- Gain Loss Approval is NOT needed
6860          END IF;
6861       END IF;
6862 
6863       RETURN  l_gain_loss_approval;
6864 
6865 --rkuttiya 16-SEP-2003  commented the following code for Bug: 2794685
6866 /*      l_calc_option := l_rulv_rec.rule_information1;
6867       l_fixed_value := NVL (To_Number (l_rulv_rec.rule_information2), 0);
6868       l_formula_name := l_rulv_rec.rule_information3;
6869       l_tolerance := NVL (To_Number (l_rulv_rec.rule_information4), 0);
6870 */
6871 
6872 
6873 --rkuttiya 16-SEP-2003  commented the following code for Bug: 2794685
6874 
6875 /*        IF    l_calc_option = 'NOT_APPLICABLE' THEN
6876       l_always_approve_yn := TRUE;
6877 
6878         ELSIF l_calc_option = 'USE_FIXED_AMOUNT' THEN
6879       l_quote_net := l_fixed_value;
6880 
6881         ELSIF l_calc_option = 'USE_FORMULA' THEN
6882       l_line_formula_yn := TRUE;
6883 
6884      ELSE
6885   -- Invalid combination of values for RULE rule in GROUP group
6886       okl_am_util_pvt.set_message(
6887                                 p_app_name => 'OKL'
6888                                ,p_msg_name => 'OKL_AM_INVALID_RULE_FORMULA'
6889                                ,p_msg_level => OKL_AM_UTIL_PVT.G_DEBUG_LEVEL
6890                                ,p_token1 => 'GROUP'
6891                                ,p_token1_value => l_rgd_code
6892                                ,p_token2 => 'RULE'
6893                                ,p_token2_value => 'AMGALO');
6894 
6895       RAISE API_ERROR;
6896      END IF;
6897 */
6898 
6899 
6900 --rkuttiya 16-SEP-2003  commented the following code for Bug: 2794685
6901 
6902 /*
6903 
6904  -- *****************************
6905  -- Calculate taxable quote total
6906  -- *****************************
6907 
6908      IF NOT l_always_approve_yn THEN
6909 
6910             FOR l_rec in c_qtl_csr(l_id) LOOP
6911 
6912           IF NVL (l_rec.taxed_yn, 'N') <> 'Y' THEN
6913               l_quote_total := l_quote_total + NVL(l_rec.amount,0);
6914           END IF;
6915          END LOOP;
6916 
6917      END IF;
6918 
6919  -- ***********************************
6920  -- Calculate net quote using a formula
6921  -- ***********************************
6922 
6923      IF l_line_formula_yn THEN
6924 
6925             FOR l_rec in c_qtl_csr(l_id) LOOP
6926 
6927           l_formula_value := 0;
6928                 okl_am_util_pvt.get_formula_value (
6929                                p_formula_name => l_formula_name,
6930                                    p_chr_id         => l_khr_id,
6931                                    p_cle_id         => l_rec.kle_id,
6932                                    x_formula_value => l_formula_value,
6933                                    x_return_status => l_return_status);
6934 
6935       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6936           RAISE API_ERROR;
6937       ELSE
6938           l_quote_net := l_quote_net + l_formula_value;
6939       END IF;
6940 
6941      END LOOP;
6942 
6943  END IF;
6944 
6945  -- *********************************
6946  -- Compare quote total and net quote
6947  -- *********************************
6948 
6949  IF (l_quote_total - l_quote_net < l_tolerance) OR (l_always_approve_yn) THEN
6950 
6951         wf_engine.SetItemAttrNumber( itemtype => itemtype,
6952                   itemkey  => itemkey,
6953                 aname    => 'QUOTE_GL',
6954                                      avalue   => (l_quote_total - l_quote_net));
6955         l_result := 'COMPLETE:Y';
6956     ELSE
6957         l_result := 'COMPLETE:N';
6958  END IF;
6959 */
6960 
6961 
6962    IF (is_debug_procedure_on) THEN
6963        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6964    END IF;
6965 
6966     EXCEPTION
6967      WHEN API_ERROR THEN
6968 
6969         IF (is_debug_exception_on) THEN
6970             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6971         END IF;
6972 
6973         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_CALC_OPTIONS', itemtype, itemkey, actid, funcmode);
6974         RAISE;
6975 
6976      WHEN OTHERS THEN
6977 
6978         IF (is_debug_exception_on) THEN
6979             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6980                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6981         END IF;
6982 
6983         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_CALC_OPTIONS', itemtype, itemkey, actid, funcmode);
6984         RAISE;
6985 
6986     END CHECK_CALC_OPTIONS;
6987 
6988 
6989   -- Start of comments
6990   --
6991   -- Procedure Name : validate_manual_quote_req
6992   -- Description    : Validates quote id on entry to Workflow
6993   --                  and gets merge field for notification message.
6994   --                : MDOKAL 20-MAR-2003
6995   --                : Modified procedure, no longer obtains notification
6996   --                  message details.
6997   -- Business Rules :
6998   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6999   -- Version     : 1.1
7000   --
7001   -- End of comments
7002   PROCEDURE VALIDATE_MANUAL_QUOTE_REQ( itemtype IN  VARCHAR2,
7003                 itemkey   IN  VARCHAR2,
7004                    actid     IN  NUMBER,
7005                    funcmode IN  VARCHAR2,
7006                 resultout OUT NOCOPY VARCHAR2) IS
7007 
7008 
7009     -- MDOKAL,  20-MAR-2003 BUG 2862254
7010     -- Modified cursor to retrieve only header details as the HTML body is now
7011     -- created in a separate procedure 'pop_oklamnmq_doc', now handled as a
7012     -- PL/SQL Document.
7013 
7014     -- Check quote exists
7015     CURSOR  get_quote_csr  ( p_qte_id   IN NUMBER)
7016     IS
7017     SELECT  trx.QUOTE_NUMBER
7018     ,       khr.short_description contract_name
7019     ,       khr.contract_number
7020     ,       trx.last_updated_by
7021     ,       trx.date_requested
7022     ,       decode(trx.QTP_CODE, 'TER_PURCHASE', 'Y', 'N') PURCHASE_ASSET
7023     ,       nvl(early_termination_yn, 'N') EOT
7024     ,       decode(nvl(partial_yn, 'N'), 'N', 'Y', 'N') COMPLETE_CONTRACT
7025     FROM    OKL_TRX_QUOTES_V trx,
7026             OKC_K_HEADERS_V khr
7027     WHERE   trx.id = p_qte_id
7028     and     trx.QST_CODE = 'DRAFTED'
7029     and     trx.khr_id  = khr.id;
7030 
7031     r_qte_details   get_quote_csr%rowtype;
7032 
7033     l_user_name   WF_USERS.name%type;
7034     l_name        WF_USERS.description%type;
7035 
7036     l_quote_id    NUMBER;
7037   -- for debug logging
7038     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_manual_quote_req';
7039     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7040     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7041     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7042   BEGIN
7043 
7044    IF (is_debug_procedure_on) THEN
7045        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7046    END IF;
7047 
7048     --
7049     -- RUN mode
7050     --
7051     IF (funcmode = 'RUN') THEN
7052 
7053         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
7054                                itemkey  => itemkey,
7055                             aname    => 'TRANSACTION_ID');
7056 
7057         wf_engine.SetItemAttrText (
7058                                 itemtype=> itemtype,
7059                     itemkey => itemkey,
7060                     aname   => 'MESSAGE_DOC',
7061                               avalue  => 'plsql:okl_am_quotes_wf.pop_oklamnmq_doc/'||l_quote_id);
7062 
7063         OPEN get_quote_csr(l_quote_id);
7064         FETCH get_quote_csr INTO r_qte_details;
7065         CLOSE get_quote_csr;
7066 
7067         okl_am_wf.get_notification_agent(
7068                                 itemtype   => itemtype
7069                            , itemkey     => itemkey
7070                            , actid       => actid
7071                            , funcmode   => funcmode
7072                               , p_user_id     => r_qte_details.last_updated_by
7073                               , x_name     => l_user_name
7074                            , x_description => l_name);
7075 
7076         wf_engine.SetItemAttrText ( itemtype=> itemtype,
7077                     itemkey => itemkey,
7078                     aname   => 'REQUESTER',
7079                              avalue  => l_user_name);
7080 
7081         wf_engine.SetItemAttrText (
7082                                 itemtype=> itemtype,
7083                     itemkey => itemkey,
7084                     aname   => 'QUOTE_NUMBER',
7085                               avalue  => r_qte_details.quote_number);
7086 
7087         wf_engine.SetItemAttrText (
7088                                 itemtype=> itemtype,
7089                     itemkey => itemkey,
7090                     aname   => 'CONTRACT_NUMBER',
7091                               avalue  => r_qte_details.contract_number);
7092 
7093         wf_engine.SetItemAttrText (
7094                                 itemtype=> itemtype,
7095                     itemkey => itemkey,
7096                     aname   => 'CONTRACT_NAME',
7097                               avalue  => r_qte_details.contract_name);
7098 
7099         IF l_user_name IS NOT NULL THEN
7100             resultout := 'COMPLETE:VALID';
7101         ELSE
7102             resultout := 'COMPLETE:INVALID';
7103         END IF;
7104     END IF;
7105     RETURN ;
7106 
7107     --
7108     -- CANCEL mode
7109     --
7110     IF (funcmode = 'CANCEL') THEN
7111       --
7112       resultout := 'COMPLETE:';
7113       RETURN;
7114       --
7115     END IF;
7116 
7117     --
7118     -- TIMEOUT mode
7119     --
7120     IF (funcmode = 'TIMEOUT') THEN
7121       --
7122       resultout := 'COMPLETE:';
7123       RETURN;
7124       --
7125     END IF;
7126 
7127    IF (is_debug_procedure_on) THEN
7128        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7129    END IF;
7130 
7131   EXCEPTION
7132      WHEN OTHERS THEN
7133 
7134         IF (is_debug_exception_on) THEN
7135             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7136                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7137         END IF;
7138 
7139         IF get_quote_csr%ISOPEN THEN
7140            CLOSE get_quote_csr;
7141         END IF;
7142 
7143         WF_CORE.context('OKL_AM_QUOTES_WF' , 'validate_quote_approval',
7144                         itemtype, itemkey, actid, funcmode);
7145         RAISE;
7146 
7147   END VALIDATE_MANUAL_QUOTE_REQ;
7148 
7149   -- Start of comments
7150   --
7151   -- Procedure Name : VALIDATE_ACCEPT_REST_QTE
7152   -- Description    : Validates quote id on entry to Workflow
7153   -- Business Rules :
7154   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
7155   -- Version     : 1.0
7156   --
7157   -- End of comments
7158   PROCEDURE VALIDATE_ACCEPT_REST_QTE( itemtype IN  VARCHAR2,
7159                 itemkey   IN  VARCHAR2,
7160                    actid     IN  NUMBER,
7161                    funcmode IN  VARCHAR2,
7162                 resultout OUT NOCOPY VARCHAR2) IS
7163 
7164     -- Check quote exists an d is either DRAFTED or REJECTED
7165   -- nikshah -- Bug # 5484903 Fixed,
7166   -- Changed CURSOR get_quote_csr SQL definition
7167     CURSOR  get_quote_csr  ( p_qte_id   IN VARCHAR2)
7168     IS
7169     SELECT  a.last_updated_by, a.quote_number
7170     FROM    OKL_TRX_QUOTES_B a,
7171             okl_quote_parties b
7172     WHERE   a.id = p_qte_id
7173     and     a.qst_code in ('ACCEPTED')
7174     and     b.qte_id (+) = a.id;
7175 
7176     l_last_updated_by               NUMBER;
7177     l_quote_id                      VARCHAR2(200);
7178 
7179     l_user_name   WF_USERS.name%type;
7180     l_name        WF_USERS.description%type;
7181 
7182  l_quote_number  VARCHAR2(100);
7183   -- for debug logging
7184     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_accept_rest_qte';
7185     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7186     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7187     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7188   BEGIN
7189 
7190    IF (is_debug_procedure_on) THEN
7191        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7192    END IF;
7193 
7194     --
7195     -- RUN mode
7196     --
7197     IF (funcmode = 'RUN') THEN
7198 
7199       l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
7200                             itemkey  => itemkey,
7201                           aname   => 'TRANSACTION_ID');
7202 
7203       OPEN  get_quote_csr(l_quote_id);
7204       FETCH get_quote_csr INTO l_last_updated_by, l_quote_number;
7205       CLOSE get_quote_csr;
7206 
7207       okl_am_wf.get_notification_agent(
7208                                 itemtype   => itemtype
7209                            , itemkey     => itemkey
7210                            , actid       => actid
7211                            , funcmode   => funcmode
7212                               , p_user_id     => l_last_updated_by
7213                               , x_name     => l_user_name
7214                            , x_description => l_name);
7215       -- Check that a quote id is returned for the TRANSACTION_ID given.
7216 
7217   IF l_last_updated_by IS NOT NULL AND l_user_name IS NOT NULL THEN
7218 
7219              wf_engine.SetItemAttrText ( itemtype=> itemtype,
7220                     itemkey => itemkey,
7221                     aname   => 'REQUESTER',
7222                              avalue  => l_user_name);
7223 
7224              wf_engine.SetItemAttrText ( itemtype=> itemtype,
7225                     itemkey => itemkey,
7226                     aname   => 'WF_ADMINISTRATOR',
7227                               avalue  => l_user_name);
7228 
7229              wf_engine.SetItemAttrText ( itemtype=> itemtype,
7230                     itemkey => itemkey,
7231                     aname   => 'QUOTE_NUMBER',
7232                              avalue  => l_quote_number);
7233 
7234             resultout := 'COMPLETE:VALID';
7235          ELSE
7236             resultout := 'COMPLETE:INVALID';
7237          END IF;
7238 
7239       RETURN ;
7240     END IF;
7241 
7242     --
7243     -- CANCEL mode
7244     --
7245     IF (funcmode = 'CANCEL') THEN
7246       --
7247       resultout := 'COMPLETE:';
7248       RETURN;
7249       --
7250     END IF;
7251 
7252     --
7253     -- TIMEOUT mode
7254     --
7255     IF (funcmode = 'TIMEOUT') THEN
7256       --
7257       resultout := 'COMPLETE:';
7258       RETURN;
7259       --
7260     END IF;
7261 
7262    IF (is_debug_procedure_on) THEN
7263        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7264    END IF;
7265 
7266   EXCEPTION
7267 
7268      WHEN OTHERS THEN
7269 
7270         IF (is_debug_exception_on) THEN
7271             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7272                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7273         END IF;
7274 
7275         IF get_quote_csr%ISOPEN THEN
7276            CLOSE get_quote_csr;
7277         END IF;
7278 
7279         WF_CORE.context('OKL_AM_QUOTES_WF' , 'VALIDATE_ACCEPT_REST_QTE',
7280                         itemtype, itemkey, actid, funcmode);
7281         RAISE;
7282 
7283   END VALIDATE_ACCEPT_REST_QTE;
7284 
7285 
7286   -- Start of comments
7287   --
7288   -- Procedure Name : set_quote_approved_yn
7289   -- Description :
7290   -- Business Rules :
7291   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7292   -- Version  : 1.0
7293   --
7294   -- End of comments
7295   PROCEDURE set_rest_qte_approved_yn( itemtype   IN VARCHAR2,
7296                                  itemkey    IN VARCHAR2,
7297                       actid  IN NUMBER,
7298                        funcmode IN VARCHAR2,
7299                      resultout OUT NOCOPY VARCHAR2 ) AS
7300 
7301 
7302     l_id            VARCHAR2(100);
7303     l_approved      VARCHAR2(1);
7304 
7305     x_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
7306     x_msg_count     NUMBER;
7307     x_msg_data      VARCHAR2(2000);
7308     p_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
7309     x_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
7310     p_api_version   NUMBER       := 1;
7311     p_init_msg_list VARCHAR2(1)  := FND_API.G_TRUE;
7312 
7313     API_ERROR       EXCEPTION;
7314 
7315     l_notify_response VARCHAR2(30);
7316 -- for debug logging
7317     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_rest_qte_approved_yn';
7318     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7319     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7320     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7321   BEGIN
7322 
7323    IF (is_debug_procedure_on) THEN
7324        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7325    END IF;
7326 
7327     IF (funcmode = 'RUN') THEN
7328         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
7329                         itemkey => itemkey,
7330                       aname   => 'TRANSACTION_ID');
7331 
7332 
7333         l_approved := wf_engine.GetItemAttrText( itemtype => itemtype,
7334                         itemkey => itemkey,
7335                       aname   => 'APPROVED_YN');
7336 
7337         -- Set the quote status to REJECTED if the approval is declined
7338         -- else set to 'APPROVED'
7339         IF nvl(l_approved, 'Y') = 'N' THEN
7340             p_qtev_rec.QST_CODE := 'REJECTED';
7341         ELSE
7342             p_qtev_rec.QST_CODE := 'APPROVED';
7343             p_qtev_rec.DATE_APPROVED := SYSDATE;
7344         END IF;
7345 
7346         p_qtev_rec.ID := to_number(l_id);
7347 
7348         p_qtev_rec.APPROVED_YN := nvl(l_approved, 'Y');
7349 
7350         okl_qte_pvt.update_row( p_api_version    => p_api_version,
7351                                 p_init_msg_list  => p_init_msg_list,
7352                                 x_return_status  => x_return_status,
7353                                 x_msg_count      => x_msg_count,
7354                                 x_msg_data       => x_msg_data,
7355                                 p_qtev_rec        => p_qtev_rec,
7356                                 x_qtev_rec        => x_qtev_rec);
7357 
7358    IF (is_debug_statement_on) THEN
7359        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
7360        'after call to okl_qte_pvt.update_row :'||x_return_status);
7361    END IF;
7362 
7363   IF x_return_status = OKC_API.G_RET_STS_SUCCESS THEN
7364             IF nvl(l_approved, 'Y') = 'Y' THEN
7365        resultout := 'COMPLETE:SUCCESS';
7366             ELSE
7367        resultout := 'COMPLETE:ERROR';
7368             END IF;
7369   ELSE
7370    RAISE API_ERROR;
7371   END IF;
7372 
7373         RETURN ;
7374     END IF;
7375 
7376     --
7377     -- CANCEL mode
7378     --
7379     IF (funcmode = 'CANCEL') THEN
7380       --
7381       resultout := 'COMPLETE:';
7382       RETURN;
7383       --
7384     END IF;
7385 
7386     --
7387     -- TIMEOUT mode
7388     --
7389     IF (funcmode = 'TIMEOUT') THEN
7390       --
7391       resultout := 'COMPLETE:';
7392       RETURN;
7393       --
7394     END IF;
7395 
7396    IF (is_debug_procedure_on) THEN
7397        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7398    END IF;
7399 
7400   EXCEPTION
7401 
7402      WHEN API_ERROR THEN
7403 
7404         IF (is_debug_exception_on) THEN
7405             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
7406         END IF;
7407 
7408         wf_core.context('OKL_AM_QUOTES_WF' , 'set_rest_qte_approved_yn', itemtype, itemkey, actid, funcmode);
7409         RAISE;
7410 
7411      WHEN OTHERS THEN
7412 
7413 
7414         IF (is_debug_exception_on) THEN
7415             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7416                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7417         END IF;
7418 
7419         wf_core.context('OKL_AM_QUOTES_WF' , 'set_rest_qte_approved_yn', itemtype, itemkey, actid, funcmode);
7420         RAISE;
7421 
7422   END set_rest_qte_approved_yn;
7423 
7424   -- Start of comments
7425   --
7426   -- Procedure Name : check_profile_recipient
7427   -- Description : check if the profile value for OKL_MANUAL_TERMINATION_QUOTE_REP
7428   --                  returns valid recipients.
7429   -- Business Rules :
7430   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7431   -- Version  : 1.0
7432   --
7433   -- End of comments
7434   PROCEDURE check_profile_recipient( itemtype   IN VARCHAR2,
7435                                  itemkey    IN VARCHAR2,
7436                       actid  IN NUMBER,
7437                        funcmode IN VARCHAR2,
7438                      resultout OUT NOCOPY VARCHAR2 ) AS
7439 
7440 
7441     l_id            VARCHAR2(100);
7442     l_performer     VARCHAR2(100);
7443     l_recipients    NUMBER;
7444 
7445     cursor c1_csr (p_value varchar)  is
7446        select count(*)
7447        from WF_USER_ROLES WUR
7448        where WUR.ROLE_NAME = p_value;
7449 
7450 -- for debug logging
7451     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_profile_recipient';
7452     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7453     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7454     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7455   BEGIN
7456 
7457    IF (is_debug_procedure_on) THEN
7458        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7459    END IF;
7460 
7461     IF (funcmode = 'RUN') THEN
7462         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
7463                         itemkey => itemkey,
7464                       aname   => 'TRANSACTION_ID');
7465 
7466         l_performer := rtrim(ltrim(fnd_profile.value('OKL_MANUAL_TERMINATION_QUOTE_REP')));
7467 
7468         wf_engine.SetItemAttrText( itemtype => itemtype,
7469                   itemkey  => itemkey,
7470                 aname    => 'PERFORMING_AGENT',
7471                                      avalue   => l_performer);
7472 
7473         OPEN c1_csr (l_performer);
7474         FETCH c1_csr INTO l_recipients;
7475         CLOSE c1_csr;
7476 
7477   IF l_recipients > 0 THEN
7478       resultout := 'COMPLETE:VALID';
7479         ELSE
7480       resultout := 'COMPLETE:INVALID';
7481         END IF;
7482 
7483         RETURN ;
7484     END IF;
7485 
7486     --
7487     -- CANCEL mode
7488     --
7489     IF (funcmode = 'CANCEL') THEN
7490       --
7491       resultout := 'COMPLETE:';
7492       RETURN;
7493       --
7494     END IF;
7495 
7496     --
7497     -- TIMEOUT mode
7498     --
7499     IF (funcmode = 'TIMEOUT') THEN
7500       --
7501       resultout := 'COMPLETE:';
7502       RETURN;
7503       --
7504     END IF;
7505 
7506    IF (is_debug_procedure_on) THEN
7507        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7508    END IF;
7509 
7510   EXCEPTION
7511 
7512      WHEN OTHERS THEN
7513 
7514 
7515         IF (is_debug_exception_on) THEN
7516             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7517                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7518         END IF;
7519         IF c1_csr%ISOPEN THEN
7520            CLOSE c1_csr;
7521         END IF;
7522 
7523         wf_core.context('OKL_AM_QUOTES_WF' , 'check_profile_recipient', itemtype, itemkey, actid, funcmode);
7524         RAISE;
7525 
7526   END check_profile_recipient;
7527 
7528 
7529   -- Start of comments
7530   --
7531   -- Procedure Name : pop_oklamnmq_doc
7532   -- Description : MDOKAL, 20-MAR-2003 Bug 2862254
7533   --                  This procedure is invoked dynamically by Workflow API's
7534   --                  in order to populate the message body item attribute
7535   --                  during notification submission.
7536   -- Business Rules :
7537   -- Parameters  : document_id, display_type, document, document_type
7538   -- Version  : 1.0
7539   --
7540   -- End of comments
7541   PROCEDURE pop_oklamnmq_doc (document_id   in varchar2,
7542                               display_type  in varchar2,
7543                               document      in out nocopy varchar2,
7544                               document_type in out nocopy varchar2) IS
7545 
7546 
7547     -- Check quote exists
7548     CURSOR  get_quote_csr  ( p_qte_id   IN NUMBER)
7549     IS
7550     SELECT  trx.QUOTE_NUMBER
7551     ,       khr.short_description contract_name
7552     ,       khr.contract_number
7553     ,       trx.last_updated_by
7554     ,       trx.date_requested
7555     ,       decode(trx.QTP_CODE, 'TER_PURCHASE', 'Y', 'N') PURCHASE_ASSET
7556     ,       nvl(early_termination_yn, 'N') EOT
7557     ,       decode(nvl(partial_yn, 'N'), 'N', 'Y', 'N') COMPLETE_CONTRACT
7558     ,       kle.ITEM_DESCRIPTION ASSET_NUMBER
7559     ,       txl.ASSET_QUANTITY ASSET_QUANTITY
7560     ,       txl.QUOTE_QUANTITY QUOTE_QUANTITY
7561     FROM    OKL_TRX_QUOTES_V trx,
7562             OKL_TXL_QUOTE_LINES_V txl,
7563             OKC_K_HEADERS_V khr,
7564             OKC_K_LINES_V   kle
7565     WHERE   trx.id = p_qte_id
7566     and     txl.qte_id (+) = trx.id
7567     and     trx.QST_CODE = 'DRAFTED'
7568     and     trx.khr_id  = khr.id
7569     and     txl.kle_id  = kle.id;
7570 
7571     r_qte_details   get_quote_csr%rowtype;
7572 
7573     l_user_name   WF_USERS.name%type;
7574     l_name        WF_USERS.description%type;
7575 
7576     l_quote_id    NUMBER;
7577 
7578     l_message        VARCHAR2(32000);
7579     l_header_done    BOOLEAN := FALSE;
7580 -- for debug logging
7581     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_oklamnmq_doc';
7582     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7583     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7584     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7585   BEGIN
7586 
7587    IF (is_debug_procedure_on) THEN
7588        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7589    END IF;
7590 
7591         l_quote_id := document_id;
7592 
7593         FOR r_qte_details in get_quote_csr(l_quote_id) LOOP
7594 
7595         IF NOT l_header_done THEN
7596 
7597             okl_am_wf.get_notification_agent(
7598                                 itemtype   => 'OKLAMNMQ'
7599                            , itemkey     => 'N/A'
7600                            , actid       => null
7601                            , funcmode   => 'RUN'
7602                               , p_user_id     => r_qte_details.last_updated_by
7603                               , x_name     => l_user_name
7604                            , x_description => l_name);
7605             l_message :=
7606                       '<p>Requestor: '||l_user_name||'</p>'||
7607                       '<p>A termination quote has been requested for Contract No. '||r_qte_details.contract_number||' on '||r_qte_details.date_requested||
7608                       ' with the following parameters:</p> '||
7609                       '<table width="25%">'||
7610                       '<tr><td>End of Term:</td><td>'||r_qte_details.eot||'</td></tr>'||
7611                       '<tr><td>Complete Contract:</td><td>'||r_qte_details.complete_contract||'</td></tr>'||
7612                       '<tr><td>Purchase Asset:</td><td>'||r_qte_details.purchase_asset||'</td></tr>'||
7613                       '</table>';
7614             IF r_qte_details.complete_contract = 'N' THEN
7615 
7616                l_message := l_message||'<p>Asset Details for Partial Contract:</p>'||
7617                       '<table width="50%" border="1">'||
7618                       '<tr>'||
7619                       '<td><b>Asset No.</b></td>'||
7620                       '<td><b>Asset Quantity</b></td>'||
7621                       '<td><b>Quote Quantity</b></td>'||
7622                       '</tr>';
7623             END IF;
7624 
7625             l_header_done := TRUE;
7626         END IF;
7627         IF r_qte_details.complete_contract = 'N' THEN
7628             l_message  :=  l_message||'<tr>'||
7629                                 '<td>'||r_qte_details.asset_number||'</td>'||
7630                                 '<td>'||r_qte_details.asset_quantity||'</td>'||
7631                                 '<td>'||r_qte_details.quote_quantity||'</td>'||
7632                                 '</tr>';
7633         END IF;
7634         END LOOP;
7635         IF r_qte_details.complete_contract = 'N' THEN
7636             l_message  :=  l_message||'</table>';
7637         END IF;
7638 
7639         document := l_message;
7640         document_type := display_type;
7641 
7642    IF (is_debug_procedure_on) THEN
7643        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7644    END IF;
7645 
7646         RETURN;
7647   EXCEPTION
7648      WHEN OTHERS THEN
7649 
7650         IF (is_debug_exception_on) THEN
7651             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7652                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7653         END IF;
7654 
7655         IF get_quote_csr%ISOPEN THEN
7656            CLOSE get_quote_csr;
7657         END IF;
7658 
7659   END pop_oklamnmq_doc;
7660 
7661   -- Start of comments
7662   --
7663   -- Procedure Name : pop_oklamppt_doc
7664   -- Description : MDOKAL, 21-MAR-2003 Bug 2862254
7665   --                  This procedure is invoked dynamically by Workflow API's
7666   --                  in order to populate the message body item attribute
7667   --                  during notification submission. Called from Termication
7668   --                  Quote Acceptance (OKLAMPPT)
7669   -- Business Rules :
7670   -- Parameters  : document_id, display_type, document, document_type
7671   -- Version  : 1.0
7672   --
7673   -- End of comments
7674   PROCEDURE pop_oklamppt_doc (document_id   in varchar2,
7675                               display_type  in varchar2,
7676                               document      in out nocopy varchar2,
7677                               document_type in out nocopy varchar2) IS
7678 
7679     l_message        VARCHAR2(32000);
7680 -- for debug logging
7681     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_oklamppt_doc';
7682     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7683     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7684     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7685   BEGIN
7686 
7687    IF (is_debug_procedure_on) THEN
7688        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7689    END IF;
7690 
7691         l_message := wf_engine.GetItemAttrText (
7692                                 itemtype            => 'OKLAMPPT',
7693                     itemkey             => document_id,
7694                     aname               => 'MESSAGE_DESCRIPTION');
7695 
7696         document := l_message;
7697         document_type := display_type;
7698 
7699    IF (is_debug_procedure_on) THEN
7700        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7701    END IF;
7702 
7703 	RETURN;
7704 
7705   EXCEPTION
7706      WHEN OTHERS THEN
7707 
7708         IF (is_debug_exception_on) THEN
7709             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7710                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7711         END IF;
7712      NULL;
7713 
7714   END pop_oklamppt_doc;
7715 
7716 
7717 
7718   -- Start of comments
7719   --
7720   -- Procedure Name : pop_external_approver_doc
7721   -- Description : MDOKAL, 15-APR-2003 Bug 2902588
7722   --                  This procedure is invoked dynamically by Workflow API's
7723   --                  in order to populate the message body item attribute
7724   --                  during notification submission. Called from Send Quote
7725   --                  (OKLAMNQT)
7726   -- Business Rules :
7727   -- Parameters  : document_id, display_type, document, document_type
7728   -- Version  : 1.0
7729   --
7730   -- End of comments
7731   PROCEDURE pop_external_approver_doc (document_id   in varchar2,
7732                               display_type  in varchar2,
7733                               document      in out nocopy varchar2,
7734                               document_type in out nocopy varchar2) IS
7735 
7736     l_message        VARCHAR2(32000);
7737 -- for debug logging
7738     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_external_approver_doc';
7739     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7740     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7741     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7742   BEGIN
7743 
7744    IF (is_debug_procedure_on) THEN
7745        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7746    END IF;
7747 
7748         l_message := wf_engine.GetItemAttrText (
7749                                 itemtype            => 'OKLAMNQT',
7750                     itemkey             => document_id,
7751                     aname               => 'EXTERNAL_APPROVER');
7752 
7753         document := l_message;
7754         document_type := display_type;
7755 
7756    IF (is_debug_procedure_on) THEN
7757        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7758    END IF;
7759 
7760         RETURN;
7761 
7762   EXCEPTION
7763      WHEN OTHERS THEN
7764 
7765         IF (is_debug_exception_on) THEN
7766             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7767                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7768         END IF;
7769 
7770      NULL;
7771 
7772   END pop_external_approver_doc;
7773 
7774   -- Start of comments
7775   --
7776   -- Procedure Name : update_partial_quote
7777   -- Description : Called from Send Quote (OKLAMNQT)
7778   -- Business Rules :
7779   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7780   -- Version  : 1.0
7781   --
7782   -- End of comments
7783   PROCEDURE update_partial_quote( itemtype   IN VARCHAR2,
7784                                  itemkey    IN VARCHAR2,
7785                       actid  IN NUMBER,
7786                        funcmode IN VARCHAR2,
7787                      resultout OUT NOCOPY VARCHAR2 ) AS
7788 
7789     l_approved      VARCHAR2(1);
7790 
7791 -- for debug logging
7792     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'update_partial_quote';
7793     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7794     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7795     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7796   BEGIN
7797 
7798    IF (is_debug_procedure_on) THEN
7799        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7800    END IF;
7801 
7802     IF (funcmode = 'RUN') THEN
7803 
7804         l_approved := wf_engine.GetItemAttrText( itemtype => itemtype,
7805                         itemkey => itemkey,
7806                       aname   => 'APPROVED_YN');
7807 
7808         IF nvl(l_approved, 'Y') = 'Y' THEN
7809        resultout := 'COMPLETE:APPROVED';
7810         ELSE
7811        resultout := 'COMPLETE:REJECTED';
7812         END IF;
7813 
7814         RETURN ;
7815     END IF;
7816 
7817     --
7818     -- CANCEL mode
7819     --
7820     IF (funcmode = 'CANCEL') THEN
7821       --
7822       resultout := 'COMPLETE:';
7823       RETURN;
7824       --
7825     END IF;
7826 
7827     --
7828     -- TIMEOUT mode
7829     --
7830     IF (funcmode = 'TIMEOUT') THEN
7831       --
7832       resultout := 'COMPLETE:';
7833       RETURN;
7834       --
7835     END IF;
7836 
7837    IF (is_debug_procedure_on) THEN
7838        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7839    END IF;
7840 
7841   EXCEPTION
7842 
7843      WHEN OTHERS THEN
7844 
7845         IF (is_debug_exception_on) THEN
7846             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7847                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7848         END IF;
7849 
7850         wf_core.context('OKL_AM_QUOTES_WF' , 'update_partial_quote', itemtype, itemkey, actid, funcmode);
7851         RAISE;
7852 
7853   END update_partial_quote;
7854 
7855   -- Start of comments
7856   --
7857   -- Procedure Name : update_gain_loss_quote
7858   -- Description : Called from Send Quote (OKLAMNQT)
7859   -- Business Rules :
7860   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7861   -- Version  : 1.0
7862   --
7863   -- End of comments
7864   PROCEDURE update_gain_loss_quote( itemtype   IN VARCHAR2,
7865                                  itemkey    IN VARCHAR2,
7866                       actid  IN NUMBER,
7867                        funcmode IN VARCHAR2,
7868                      resultout OUT NOCOPY VARCHAR2 ) AS
7869 
7870     l_approved      VARCHAR2(1);
7871 -- for debug logging
7872     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'update_gain_loss_quote';
7873     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7874     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7875     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7876 
7877   BEGIN
7878 
7879    IF (is_debug_procedure_on) THEN
7880        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7881    END IF;
7882 
7883     IF (funcmode = 'RUN') THEN
7884 
7885         l_approved := wf_engine.GetItemAttrText( itemtype => itemtype,
7886                         itemkey => itemkey,
7887                       aname   => 'APPROVED_YN');
7888 
7889         IF nvl(l_approved, 'Y') = 'Y' THEN
7890        resultout := 'COMPLETE:APPROVED';
7891         ELSE
7892        resultout := 'COMPLETE:REJECTED';
7893         END IF;
7894 
7895         RETURN ;
7896     END IF;
7897 
7898     --
7899     -- CANCEL mode
7900     --
7901     IF (funcmode = 'CANCEL') THEN
7902       --
7903       resultout := 'COMPLETE:';
7904       RETURN;
7905       --
7906     END IF;
7907 
7908     --
7909     -- TIMEOUT mode
7910     --
7911     IF (funcmode = 'TIMEOUT') THEN
7912       --
7913       resultout := 'COMPLETE:';
7914       RETURN;
7915       --
7916     END IF;
7917 
7918    IF (is_debug_procedure_on) THEN
7919        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7920    END IF;
7921 
7922   EXCEPTION
7923 
7924      WHEN OTHERS THEN
7925 
7926         IF (is_debug_exception_on) THEN
7927             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7928                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7929         END IF;
7930 
7931         wf_core.context('OKL_AM_QUOTES_WF' , 'update_gain_loss_quote', itemtype, itemkey, actid, funcmode);
7932         RAISE;
7933 
7934   END update_gain_loss_quote;
7935 
7936   -- Start of comments
7937   --
7938   -- Procedure Name : chk_securitization
7939   -- Description : Called from Terminate Quote Acceptance (OKLAMPPT)
7940   --                  Bug 3082639
7941   -- Business Rules :
7942   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7943   -- Version  : 1.0
7944   -- History        : rmunjulu EDAT Added code to pass quote dates to securitization API
7945   --
7946   -- End of comments
7947   PROCEDURE chk_securitization( itemtype   IN VARCHAR2,
7948                                  itemkey    IN VARCHAR2,
7949                       actid  IN NUMBER,
7950                        funcmode IN VARCHAR2,
7951                      resultout OUT NOCOPY VARCHAR2 ) AS
7952 
7953     l_quote_id      VARCHAR2(100);
7954 
7955  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7956  l_api_version  CONSTANT NUMBER := 1;
7957     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
7958  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
7959  l_msg_data      VARCHAR2(2000);
7960 
7961     API_ERROR           EXCEPTION;
7962 
7963 
7964     -- rmunjulu EDAT -- get quote dates
7965     CURSOR get_quote_values_csr (p_qte_id IN NUMBER) IS
7966        SELECT qte.date_effective_from,
7967               qte.date_accepted
7968        FROM   OKL_TRX_QUOTES_B  qte
7969        WHERE  qte.id = p_qte_id;
7970 
7971     l_quote_eff_date DATE;
7972     l_quote_accpt_date DATE;
7973   -- for debug logging
7974     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_securitization';
7975     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7976     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7977     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7978 
7979   BEGIN
7980 
7981    IF (is_debug_procedure_on) THEN
7982        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7983    END IF;
7984 
7985     IF (funcmode = 'RUN') THEN
7986 
7987         l_quote_id := wf_engine.GetItemAttrText( itemtype   => itemtype,
7988                               itemkey => itemkey,
7989                             aname   => 'TRANSACTION_ID');
7990 
7991         -- rmunjulu EDAT Added to get quote dates which are now passed to securitization API
7992         OPEN get_quote_values_csr (l_quote_id);
7993         FETCH get_quote_values_csr INTO l_quote_eff_date, l_quote_accpt_date;
7994         CLOSE get_quote_values_csr;
7995 
7996         -- call the securitization API to check for securitized components
7997         -- on the quote. If found create investor disbursements
7998         OKL_AM_SECURITIZATION_PVT.process_securitized_streams(
7999             p_api_version  => l_api_version,
8000             p_init_msg_list  => l_init_msg_list,
8001             x_return_status  => l_return_status,
8002             x_msg_count   => l_msg_count,
8003             x_msg_data   => l_msg_data,
8004             p_quote_id   => l_quote_id,
8005             p_effective_date    => l_quote_eff_date,   -- rmunjulu EDAT Added
8006             p_transaction_date  => l_quote_accpt_date, -- rmunjulu EDAT Added
8007             p_call_origin       => OKL_SECURITIZATION_PVT.G_TRX_REASON_EARLY_TERMINATION);
8008 
8009    IF (is_debug_statement_on) THEN
8010        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
8011        'after call to OKL_AM_SECURITIZATION_PVT.process_securitized_streams :'||l_return_status);
8012    END IF;
8013 
8014         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8015             RAISE API_ERROR;
8016         END IF;
8017 
8018         RETURN ;
8019     END IF;
8020 
8021     --
8022     -- CANCEL mode
8023     --
8024     IF (funcmode = 'CANCEL') THEN
8025       --
8026       resultout := 'COMPLETE:';
8027       RETURN;
8028       --
8029     END IF;
8030 
8031     --
8032     -- TIMEOUT mode
8033     --
8034     IF (funcmode = 'TIMEOUT') THEN
8035       --
8036       resultout := 'COMPLETE:';
8037       RETURN;
8038       --
8039     END IF;
8040 
8041    IF (is_debug_procedure_on) THEN
8042        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8043    END IF;
8044 
8045   EXCEPTION
8046 
8047      WHEN API_ERROR THEN
8048 
8049         IF (is_debug_exception_on) THEN
8050             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
8051         END IF;
8052 
8053         -- rmunjulu EDAT
8054         IF get_quote_values_csr%ISOPEN THEN
8055            CLOSE get_quote_values_csr;
8056         END IF;
8057 
8058         wf_core.context('OKL_AM_QUOTES_WF' , 'chk_securitization', itemtype, itemkey, actid, funcmode);
8059         RAISE;
8060 
8061      WHEN OTHERS THEN
8062         IF (is_debug_exception_on) THEN
8063             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8064                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8065         END IF;
8066         -- rmunjulu EDAT
8067         IF get_quote_values_csr%ISOPEN THEN
8068            CLOSE get_quote_values_csr;
8069         END IF;
8070 
8071         wf_core.context('OKL_AM_QUOTES_WF' , 'chk_securitization', itemtype, itemkey, actid, funcmode);
8072         RAISE;
8073 
8074   END chk_securitization;
8075 
8076   -- Start of comments
8077   --
8078   -- Procedure Name : update_partial_quote
8079   -- Description : Updates Quote status to Drafted when Check_if_Quote_gain_loss ends in STOP
8080   -- Business Rules :
8081   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
8082   -- Version  : 1.0
8083   -- History            : RKUTTIYA created for Bug: 2794685
8084   -- End of comments
8085 
8086   PROCEDURE update_quote_drafted(itemtype   IN VARCHAR2,
8087                                  itemkey    IN VARCHAR2,
8088                       actid  IN NUMBER,
8089                        funcmode IN VARCHAR2,
8090                      resultout OUT NOCOPY VARCHAR2) AS
8091 
8092     l_transaction_id            VARCHAR2(2000);
8093     l_api_version               NUMBER := 1;
8094     lx_msg_count                NUMBER;
8095     lx_msg_data                 VARCHAR2(2000);
8096     l_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8097     lp_qtev_rec                 OKL_TRX_QUOTES_PUB.qtev_rec_type;
8098     lx_qtev_rec                 OKL_TRX_QUOTES_PUB.qtev_rec_type;
8099     l_quote_status              VARCHAR2(200) := 'DRAFTED';--'OKL_QUOTE_STATUS'
8100 -- for debug logging
8101     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'update_quote_drafted';
8102     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8103     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8104     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
8105   BEGIN
8106 
8107    IF (is_debug_procedure_on) THEN
8108        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8109    END IF;
8110 
8111     --
8112     -- RUN mode
8113     --
8114     IF (funcmode = 'RUN') THEN
8115       --get attr for transaction id which is the quote id for quote WFs
8116       l_transaction_id := WF_ENGINE.GetItemAttrText(
8117                                            itemtype => itemtype,
8118                         itemkey => itemkey,
8119                       aname    => 'TRANSACTION_ID');
8120 
8121       -- set the qtev_rec_type of quote header
8122       lp_qtev_rec.id                    :=    TO_NUMBER(l_transaction_id);
8123       lp_qtev_rec.qst_code              :=    l_quote_status;
8124 
8125       -- Call the update of the quote header api
8126       OKL_TRX_QUOTES_PUB.update_trx_quotes (
8127            p_api_version                  => l_api_version,
8128            p_init_msg_list                => OKL_API.G_FALSE,
8129            x_return_status                => l_return_status,
8130            x_msg_count                    => lx_msg_count,
8131            x_msg_data                     => lx_msg_data,
8132            p_qtev_rec                     => lp_qtev_rec,
8133            x_qtev_rec                     => lx_qtev_rec);
8134 
8135    IF (is_debug_statement_on) THEN
8136        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
8137        'after call to  OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
8138    END IF;
8139 
8140       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8141         RAISE G_EXCEPTION;
8142       ELSE
8143         resultout := 'COMPLETE:';
8144       END IF;
8145       RETURN ;
8146     END IF;
8147 
8148     --
8149     -- CANCEL mode
8150     --
8151     IF (funcmode = 'CANCEL') THEN
8152       --
8153       resultout := 'COMPLETE:';
8154       RETURN;
8155       --
8156     END IF;
8157 
8158     --
8159     -- TIMEOUT mode
8160     --
8161     IF (funcmode = 'TIMEOUT') THEN
8162       --
8163       resultout := 'COMPLETE:';
8164       RETURN;
8165       --
8166     END IF;
8167 
8168    IF (is_debug_procedure_on) THEN
8169        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8170    END IF;
8171 
8172   EXCEPTION
8173      WHEN G_EXCEPTION THEN
8174 
8175         IF (is_debug_exception_on) THEN
8176             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
8177         END IF;
8178 
8179         WF_CORE.context('OKL_AM_QUOTES_WF' , 'update_quote_status',
8180                         itemtype, itemkey, actid, funcmode);
8181         RAISE;
8182      WHEN OTHERS THEN
8183         IF (is_debug_exception_on) THEN
8184             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8185                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8186         END IF;
8187 
8188         WF_CORE.context('OKL_AM_QUOTES_WF' , 'update_quote_status',
8189                         itemtype, itemkey, actid, funcmode);
8190         RAISE;
8191 
8192 
8193    END update_quote_drafted;
8194 
8195   -- Start of comments
8196   --
8197   -- Procedure Name : set_message
8198   -- Desciption     : Sets the message with tokens
8199   --                  Does NOT put the message on the message stack
8200   --                  This set_message is used instead of the standard OKL_API.set_message
8201   --                  because the OKL_API.set_message puts the message on message stack after
8202   --                  which it cannot be retrieved using FND_MESSAGE.get
8203   -- Business Rules :
8204   -- Parameters     :
8205   -- Version  : 1.0
8206   -- History        : RMUNJULU created 4131592
8207   --
8208   -- End of comments
8209   PROCEDURE set_message (
8210  p_app_name  IN VARCHAR2 DEFAULT 'OKL',
8211  p_msg_name  IN VARCHAR2,
8212  p_token1  IN VARCHAR2 DEFAULT NULL,
8213  p_token1_value IN VARCHAR2 DEFAULT NULL,
8214  p_token2  IN VARCHAR2 DEFAULT NULL,
8215  p_token2_value IN VARCHAR2 DEFAULT NULL,
8216  p_token3  IN VARCHAR2 DEFAULT NULL,
8217  p_token3_value IN VARCHAR2 DEFAULT NULL,
8218  p_token4  IN VARCHAR2 DEFAULT NULL,
8219  p_token4_value IN VARCHAR2 DEFAULT NULL,
8220  p_token5  IN VARCHAR2 DEFAULT NULL,
8221  p_token5_value IN VARCHAR2 DEFAULT NULL,
8222  p_token6  IN VARCHAR2 DEFAULT NULL,
8223  p_token6_value IN VARCHAR2 DEFAULT NULL,
8224  p_token7  IN VARCHAR2 DEFAULT NULL,
8225  p_token7_value IN VARCHAR2 DEFAULT NULL,
8226  p_token8  IN VARCHAR2 DEFAULT NULL,
8227  p_token8_value IN VARCHAR2 DEFAULT NULL,
8228  p_token9  IN VARCHAR2 DEFAULT NULL,
8229  p_token9_value IN VARCHAR2 DEFAULT NULL,
8230  p_token10  IN VARCHAR2 DEFAULT NULL,
8231  p_token10_value IN VARCHAR2 DEFAULT NULL ) IS
8232 
8233 -- for debug logging
8234     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_message';
8235     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8236     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8237   BEGIN
8238 
8239    IF (is_debug_procedure_on) THEN
8240        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8241    END IF;
8242 
8243  FND_MESSAGE.set_name( P_APP_NAME, P_MSG_NAME);
8244 
8245  IF (p_token1 IS NOT NULL) AND (p_token1_value IS NOT NULL) THEN
8246   FND_MESSAGE.set_token( TOKEN  => p_token1,
8247                  VALUE  => p_token1_value);
8248  END IF;
8249 
8250  IF (p_token2 IS NOT NULL) AND (p_token2_value IS NOT NULL) THEN
8251   FND_MESSAGE.set_token( TOKEN  => p_token2,
8252                  VALUE  => p_token2_value);
8253  END IF;
8254 
8255  IF (p_token3 IS NOT NULL) AND (p_token3_value IS NOT NULL) THEN
8256   FND_MESSAGE.set_token( TOKEN  => p_token3,
8257                  VALUE  => p_token3_value);
8258  END IF;
8259 
8260  IF (p_token4 IS NOT NULL) AND (p_token4_value IS NOT NULL) THEN
8261   FND_MESSAGE.set_token( TOKEN  => p_token4,
8262                  VALUE  => p_token4_value);
8263  END IF;
8264 
8265  IF (p_token5 IS NOT NULL) AND (p_token5_value IS NOT NULL) THEN
8266   FND_MESSAGE.set_token( TOKEN  => p_token5,
8267                  VALUE  => p_token5_value);
8268  END IF;
8269 
8270  IF (p_token6 IS NOT NULL) AND (p_token6_value IS NOT NULL) THEN
8271   FND_MESSAGE.set_token( TOKEN  => p_token6,
8272                  VALUE  => p_token6_value);
8273  END IF;
8274  IF (p_token7 IS NOT NULL) AND (p_token7_value IS NOT NULL) THEN
8275   FND_MESSAGE.set_token( TOKEN  => p_token7,
8276                  VALUE  => p_token7_value);
8277  END IF;
8278 
8279  IF (p_token8 IS NOT NULL) AND (p_token8_value IS NOT NULL) THEN
8280   FND_MESSAGE.set_token( TOKEN  => p_token8,
8281                  VALUE  => p_token8_value);
8282  END IF;
8283  IF (p_token9 IS NOT NULL) AND (p_token9_value IS NOT NULL) THEN
8284   FND_MESSAGE.set_token( TOKEN  => p_token9,
8285                  VALUE  => p_token9_value);
8286  END IF;
8287 
8288  IF (p_token10 IS NOT NULL) AND (p_token10_value IS NOT NULL) THEN
8289   FND_MESSAGE.set_token( TOKEN  => p_token10,
8290                  VALUE  => p_token10_value);
8291  END IF;
8292 
8293  --FND_MSG_PUB.add;
8294     IF (is_debug_procedure_on) THEN
8295        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8296    END IF;
8297 
8298   END set_message;
8299 
8300   -- Start of comments
8301   --
8302   -- Procedure Name : check_rollover_amount
8303   -- Description : Checks if Rollover Quote and if base amount > 0
8304   -- Business Rules :
8305   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
8306   -- Version  : 1.0
8307   -- History        : rmunjulu created for Bug: 4131592
8308   -- End of comments
8309   PROCEDURE check_rollover_amount(
8310                                     itemtype    IN  VARCHAR2,
8311                                     itemkey   IN  VARCHAR2,
8312                                     actid       IN  NUMBER,
8313                                     funcmode IN  VARCHAR2,
8314                                     resultout OUT NOCOPY VARCHAR2) IS
8315     -- Get the quote details
8316     CURSOR c_qte_csr(c_id NUMBER) IS
8317     SELECT  khr_id, qtp_code,last_updated_by
8318     FROM    OKL_TRX_QUOTES_B
8319     WHERE   id = c_id;
8320 
8321     -- Get the quote BASE amount
8322     CURSOR c_qtl_csr(c_id NUMBER) IS
8323     SELECT sum(amount) amount
8324     FROM   OKL_TXL_QUOTE_LINES_B
8325     WHERE  qte_id =c_id
8326     AND    qlt_code NOT IN ('AMCFIA','AMYOUB','BILL_ADJST');
8327 
8328     l_return_status     VARCHAR2(1)  := OKL_API.G_RET_STS_SUCCESS;
8329 
8330     l_result VARCHAR2(50) := 'COMPLETE:NO';
8331 
8332     l_last_updated_by    NUMBER;
8333     l_user_name          VARCHAR2(200);
8334     l_name               VARCHAR2(200);
8335     l_amount        NUMBER;
8336     l_id         NUMBER;
8337     l_khr_id        NUMBER;
8338     l_qtp_code      VARCHAR2(30);
8339     l_roll_message_header VARCHAR2(350);
8340 -- for debug logging
8341     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_rollover_amount';
8342     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8343     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8344     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
8345   BEGIN
8346 
8347    IF (is_debug_procedure_on) THEN
8348        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8349    END IF;
8350 
8351     IF (funcmode = 'RUN') THEN
8352 
8353         l_id := wf_engine.GetItemAttrText(
8354                        itemtype => itemtype,
8355         itemkey  => itemkey,
8356         aname    => 'TRANSACTION_ID');
8357 
8358         OPEN c_qte_csr(l_id);
8359         FETCH c_qte_csr INTO l_khr_id, l_qtp_code,l_last_updated_by;
8360         CLOSE c_qte_csr;
8361 
8362         IF l_qtp_code like ('TER_ROLL%') THEN
8363 
8364            OPEN  c_qtl_csr (l_id);
8365            FETCH c_qtl_csr INTO l_amount;
8366            CLOSE c_qtl_csr;
8367 
8368            IF l_amount IS NULL THEN
8369               l_amount := 0;
8370            END IF;
8371 
8372            IF l_amount <= 0 THEN
8373               l_result := 'COMPLETE:STOP';
8374            ELSE
8375               l_result := 'COMPLETE:YES';
8376            END IF;
8377 
8378            IF l_result = 'COMPLETE:STOP' THEN
8379 
8380 -- Rollover Quote Amount Approval.
8381               -- Get the proper message from Seed
8382               set_message(
8383                    p_app_name     => 'OKL',
8384                    p_msg_name     => 'OKL_AM_ROLL_HDR_MSG');
8385 
8386               l_roll_message_header := FND_MESSAGE.get;
8387 
8388               wf_engine.SetItemAttrText (
8389                               itemtype=> itemtype,
8390                   itemkey => itemkey,
8391                   aname   => 'MESSAGE_HEADER',
8392                             avalue  => l_roll_message_header);
8393 
8394               --Set notification body
8395               wf_engine.SetItemAttrText (
8396                               itemtype=> itemtype,
8397                   itemkey => itemkey,
8398                   aname   => 'MESSAGE_DOC',
8399                             avalue  => 'plsql:okl_am_quotes_wf.pop_roll_notification/'||l_id);
8400 
8401               --get the name of requestor
8402               okl_am_wf.get_notification_agent(
8403                            itemtype           => itemtype
8404                          , itemkey            => itemkey
8405                          , actid           => actid
8406                          , funcmode           => funcmode
8407                          , p_user_id          => l_last_updated_by
8408                          , x_name             => l_user_name
8409                          , x_description      => l_name);
8410 
8411               --set the value for item attribute 'REQUESTER'
8412               wf_engine.SetItemAttrText (
8413                                itemtype    => itemtype,
8414                    itemkey     => itemkey,
8415                    aname       => 'REQUESTER',
8416                             avalue      => l_user_name);
8417             END IF;
8418         ELSE
8419               l_result := 'COMPLETE:YES';
8420         END IF;
8421 
8422         resultout := l_result;
8423 
8424         RETURN;
8425     END IF;
8426 
8427    IF (is_debug_procedure_on) THEN
8428        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8429    END IF;
8430 
8431   EXCEPTION
8432 
8433      WHEN OTHERS THEN
8434         IF (is_debug_exception_on) THEN
8435             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8436                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8437         END IF;
8438         IF c_qte_csr%ISOPEN THEN
8439            CLOSE c_qte_csr;
8440         END IF;
8441         IF c_qtl_csr%ISOPEN THEN
8442            CLOSE c_qtl_csr;
8443         END IF;
8444         wf_core.context('OKL_AM_QUOTES_WF' , 'check_rollover_amount', itemtype, itemkey, actid, funcmode);
8445         RAISE;
8446 
8447   END check_rollover_amount;
8448 
8449   -- Start of comments
8450   --
8451   -- Procedure Name : pop_roll_notification
8452   -- Description : Populates the rollover notification message
8453   -- Business Rules :
8454   -- Parameters  : document_id,display_type, document, document_type
8455   -- Version  : 1.0
8456   -- History        : rmunjulu created for Bug: 4131592
8457   -- End of comments
8458   PROCEDURE pop_roll_notification (document_id   IN VARCHAR2,
8459                                    display_type  IN VARCHAR2,
8460                                    document      IN OUT NOCOPY VARCHAR2,
8461                                    document_type IN OUT NOCOPY VARCHAR2) IS
8462 
8463     -- Cursor to obtain quote and contract details
8464     CURSOR  l_quote_csr  ( p_qte_id   IN NUMBER) IS
8465     SELECT  TRX.ID,
8466             TRX.QUOTE_NUMBER,
8467             TRX.KHR_ID,
8468             TRX.QTP_CODE,
8469             KHR.CONTRACT_NUMBER
8470     FROM    OKL_TRX_QUOTES_B TRX,
8471             OKC_K_HEADERS_B KHR
8472     WHERE   TRX.id = p_qte_id
8473     AND     TRX.KHR_ID = KHR.ID;
8474 
8475     -- Cursor to obtain quote amount
8476     CURSOR  l_quote_amt_csr  ( p_qte_id   IN NUMBER) IS
8477     SELECT  nvl(SUM(amount),0) amount
8478     FROM    OKL_TXL_QUOTE_LINES_B TQL
8479     WHERE   TQL.qte_id = p_qte_id
8480     AND     TQL.qlt_code NOT IN ('AMCFIA','AMYOUB','BILL_ADJST');
8481 
8482 
8483     l_quote_rec         l_quote_csr%rowtype;
8484     l_quote_amt_rec     l_quote_amt_csr%rowtype;
8485     l_quote_id          NUMBER;
8486     l_message           VARCHAR2(32000);
8487     l_pos               NUMBER;
8488     l_noti_msg          VARCHAR2(32000);
8489     l_currency_code     VARCHAR2(200);
8490 -- for debug logging
8491     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_roll_notification';
8492     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8493     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8494 
8495   BEGIN
8496 
8497    IF (is_debug_procedure_on) THEN
8498        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8499    END IF;
8500 
8501         --get the parameters from document id
8502         l_quote_id   := TO_NUMBER(document_id);
8503 
8504         --get quote and contract details
8505         OPEN l_quote_csr(l_quote_id);
8506         FETCH l_quote_csr INTO l_quote_rec;
8507         CLOSE l_quote_csr;
8508 
8509         --get quote amount
8510         OPEN l_quote_amt_csr(l_quote_id);
8511         FETCH l_quote_amt_csr INTO l_quote_amt_rec;
8512         CLOSE l_quote_amt_csr;
8513 
8514         -- Get the Currency Code
8515         l_currency_code  := OKL_AM_UTIL_PVT.get_chr_currency(l_quote_rec.khr_id);
8516 
8517 -- The termination quote approval process for Contract Number, Quote Number has resulted in error.
8518 -- The quote base amount is amount which is less than or equal to 0.
8519 -- Please verify and change the quote amounts and re-submit the quote for approval.
8520         -- Get the proper message from Seed
8521         set_message(
8522                    p_app_name     => 'OKL',
8523                    p_msg_name     => 'OKL_AM_ROLL_NOTI_MSG',
8524                    p_token1       => 'CONTRACT_NUMBER',
8525                    p_token1_value => l_quote_rec.contract_number,
8526                    p_token2       => 'QUOTE_NUMBER',
8527                    p_token2_value => l_quote_rec.quote_number,
8528                    p_token3       => 'AMOUNT',
8529                    p_token3_value => l_quote_amt_rec.amount,
8530                    p_token4       => 'CURRENCY',
8531                    p_token4_value => l_currency_code);
8532 
8533         l_noti_msg := FND_MESSAGE.get;
8534 
8535         l_message :=  '<html><body><p>'||l_noti_msg||'</p></body></html>';
8536 
8537         document := l_message;
8538         document_type := display_type;
8539 
8540    IF (is_debug_procedure_on) THEN
8541        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8542    END IF;
8543 
8544         RETURN;
8545   EXCEPTION
8546      WHEN OTHERS THEN
8547 
8548         IF (is_debug_exception_on) THEN
8549             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8550                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8551         END IF;
8552 
8553         IF l_quote_csr%ISOPEN THEN
8554            CLOSE l_quote_csr;
8555         END IF;
8556 
8557         IF l_quote_amt_csr%ISOPEN THEN
8558            CLOSE l_quote_amt_csr;
8559         END IF;
8560 
8561         RETURN;
8562   END pop_roll_notification;
8563 
8564   --rkuttiya 12-Nov-07 added for Sprint 2 of Loans Repossession
8565    PROCEDURE check_if_repo_quote(itemtype IN VARCHAR2,
8566                                 itemkey  IN VARCHAR2,
8567                                 actid    IN NUMBER,
8568                                 funcmode IN VARCHAR2,
8569                                 resultout OUT NOCOPY VARCHAR2) IS
8570 
8571     CURSOR check_repo_csr(p_qte_id IN NUMBER) IS
8572     SELECT repo_quote_indicator_yn
8573     FROM OKL_TRX_QUOTES_B
8574     WHERE id = p_qte_id;
8575 
8576     l_id       NUMBER;
8577     l_repo_yn  VARCHAR2(1);
8578     lx_return_sts VARCHAR2(1);
8579 -- for debug logging
8580     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_if_repo_quote';
8581     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8582     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8583     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
8584    BEGIN
8585 
8586    IF (is_debug_procedure_on) THEN
8587        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8588    END IF;
8589 
8590      IF (funcmode = 'RUN') THEN
8591        l_id := wf_engine.GetItemAttrText(itemtype => itemtype,
8592                                          itemkey  => itemkey,
8593                                          aname    => 'TRANSACTION_ID');
8594 
8595 
8596        l_repo_yn := OKL_AM_CREATE_QUOTE_PVT.check_repo_quote(l_id,
8597                                                              lx_return_sts);
8598 
8599        IF lx_return_sts = OKL_API.G_RET_STS_SUCCESS THEN
8600          IF l_repo_yn = 'Y' THEN
8601             resultout := 'COMPLETE:Y';
8602          ELSIF NVL(l_repo_yn,'N') = 'N' THEN
8603             resultout := 'COMPLETE:N';
8604          END IF;
8605        ELSE
8606          RAISE G_EXCEPTION;
8607        END IF;
8608        RETURN;
8609      END IF;
8610 
8611    IF (is_debug_procedure_on) THEN
8612        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8613    END IF;
8614 
8615    EXCEPTION
8616       WHEN G_EXCEPTION THEN
8617         IF (is_debug_exception_on) THEN
8618             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
8619         END IF;
8620         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_REPO_QUOTE', itemtype,
8621                          itemkey, actid, funcmode);
8622        RAISE;
8623       WHEN OTHERS THEN
8624         IF (is_debug_exception_on) THEN
8625             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8626                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8627         END IF;
8628 
8629         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_REPO_QUOTE', itemtype,
8630                          itemkey, actid, funcmode);
8631         RAISE;
8632    END CHECK_IF_REPO_QUOTE;
8633 
8634 
8635    PROCEDURE create_repo_asset_return(itemtype IN VARCHAR2,
8636                                     itemkey  IN VARCHAR2,
8637                                     actid    IN NUMBER,
8638                                     funcmode IN VARCHAR2,
8639                                     resultout OUT NOCOPY VARCHAR2) IS
8640    CURSOR c_quote_assets_csr(p_qte_id IN NUMBER) IS
8641    SELECT kle_id, DATE_EFFECTIVE_FROM, CURRENCY_CODE -- 6736148
8642    FROM OKL_AM_ASSET_QUOTES_UV
8643    WHERE id = p_qte_id;
8644 
8645    CURSOR c_asset_return_csr(p_line_id IN NUMBER) IS
8646    SELECT COUNT(kle_id)
8647    FROM OKL_ASSET_RETURNS_B
8648    WHERE kle_id = p_line_id
8649    AND ARS_CODE <> 'CANCELLED';
8650 
8651    CURSOR c_khr_csr(p_qte_id IN NUMBER) IS
8652    SELECT khr_id
8653    FROM OKL_TRX_QUOTES_B
8654    WHERE ID = p_qte_id;
8655 
8656    CURSOR c_system_options(p_org_id IN NUMBER) IS
8657    SELECT B.NAME
8658    FROM   OKL_SYSTEM_PARAMS_ALL A,
8659           OKL_FORMULAE_B B
8660    WHERE  A.ORG_ID = p_org_id
8661    AND    A.FORMULA_ID = B.ID (+);
8662 
8663    l_formula_name OKL_FORMULAE_B.NAME%TYPE;
8664 
8665    l_id           NUMBER;
8666    l_ret_exists   VARCHAR2(1);
8667    l_count        NUMBER;
8668    l_contract_id  NUMBER;
8669    l_org_id       NUMBER;
8670 
8671    l_api_version               NUMBER := 1;
8672    lx_msg_count                NUMBER;
8673    lx_msg_data                 VARCHAR2(2000);
8674    l_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8675    lp_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
8676    lx_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
8677 -- for debug logging
8678     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'create_repo_asset_return';
8679     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8680     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8681     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
8682     /* Bug 6712322 start */
8683     l_params	       OKL_EXECUTE_FORMULA_PUB.ctxt_val_tbl_type;
8684     l_asset_return_value NUMBER;
8685     /* Bug 6712322 end */
8686     /* Bug 6736148 start */
8687     l_func_curr_code  GL_LEDGERS_PUBLIC_V.CURRENCY_CODE%TYPE;
8688     lx_contract_currency         okl_k_headers_full_v.currency_code%TYPE;
8689     lx_currency_conversion_type  okl_k_headers_full_v.currency_conversion_type%TYPE;
8690     lx_currency_conversion_rate  okl_k_headers_full_v.currency_conversion_rate%TYPE;
8691     lx_currency_conversion_date  okl_k_headers_full_v.currency_conversion_date%TYPE;
8692     lx_converted_amount          NUMBER;
8693     /* Bug 6736148 end */
8694   BEGIN
8695 
8696    IF (is_debug_procedure_on) THEN
8697        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8698    END IF;
8699 
8700     l_func_curr_code := okl_am_util_pvt.get_functional_currency;
8701 
8702     IF funcmode = 'RUN' THEN
8703       l_id := wf_engine.GetItemAttrText(itemtype => itemtype,
8704                                          itemkey  => itemkey,
8705                                          aname    => 'TRANSACTION_ID');
8706 
8707       OPEN c_khr_csr(l_id);
8708       FETCH c_khr_csr INTO l_contract_id;
8709       CLOSE c_khr_csr;
8710 
8711       l_org_id := OKL_AM_UTIL_PVT.get_chr_org_id(l_contract_id);
8712 
8713       FOR l_assets IN c_quote_assets_csr(l_id) LOOP
8714         OPEN c_asset_return_csr(l_assets.kle_id);
8715         FETCH c_asset_return_csr INTO l_count;
8716         CLOSE c_asset_return_csr;
8717 
8718         IF l_count > 0 THEN
8719           l_ret_exists := 'Y';
8720         ELSE
8721           l_ret_exists := 'N';
8722         END IF;
8723 
8724         IF l_ret_exists = 'N' THEN
8725           --call the asset return api to create the return
8726 
8727           lp_artv_rec.kle_id := l_assets.kle_id;
8728           lp_artv_rec.art1_code := 'REPOS_REQUEST';
8729           lp_artv_rec.ars_code  := 'SCHEDULED';
8730 
8731           -- Set the contract org id to the application
8732           MO_GLOBAL.set_policy_context ('S', l_org_id);
8733 
8734           /* 6712322 */
8735           l_formula_name := NULL;
8736           OPEN c_system_options(l_org_id);
8737           FETCH c_system_options INTO l_formula_name;
8738           CLOSE c_system_options;
8739 
8740           /* 6712322 Evaluate ASSET_RETURN_VALUE formula and attach */
8741           -- set the operands for formula engine with quote_id
8742           IF (l_formula_name IS NOT NULL AND
8743                l_formula_name <> OKL_API.G_MISS_CHAR) THEN
8744             l_params(1).name := 'quote_id';
8745             l_params(1).value := to_char(l_id);
8746 
8747             /*OKL_EXECUTE_FORMULA_PUB.execute(
8748                       p_api_version   => l_api_version,
8749                       p_init_msg_list => OKL_API.G_FALSE,
8750                       x_return_status => l_return_status,
8751                       x_msg_count     => lx_msg_count,
8752                       x_msg_data      => lx_msg_data,
8753                       p_formula_name  => 'ASSET_RETURN_VALUE',
8754                       p_contract_id   => l_contract_id,
8755                       p_line_id       => l_assets.kle_id,
8756                       x_value         => l_asset_return_value); */
8757 
8758               OKL_AM_UTIL_PVT.get_formula_value (
8759 		        --p_formula_name	  => 'ASSET_RETURN_AMOUNT',
8760 			p_formula_name	          => l_formula_name,
8761 			p_chr_id	          => l_contract_id,
8762 			p_cle_id                  => l_assets.kle_id,
8763     			p_additional_parameters   => l_params,
8764 			x_formula_value           => l_asset_return_value,
8765 			x_return_status	          => l_return_status);
8766 
8767 
8768             IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8769                 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8770             ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8771                 RAISE Okl_Api.G_EXCEPTION_ERROR;
8772             END IF;
8773 
8774             lp_artv_rec.asset_fmv_amount  := l_asset_return_value;
8775 
8776             /* Bug 6736148 start */
8777             IF (l_assets.CURRENCY_CODE <> l_func_curr_code) THEN
8778 
8779 	      IF (is_debug_statement_on) THEN
8780 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'calling okl_accounting_util.convert_to_functional_currency');
8781 	      END IF;
8782 
8783               okl_accounting_util.convert_to_functional_currency(
8784    	            p_khr_id  		       => l_contract_id,
8785    	            p_to_currency   	       => l_func_curr_code,
8786    	            p_transaction_date 	       => l_assets.DATE_EFFECTIVE_FROM,
8787    	            p_amount 		       => l_asset_return_value,
8788                     x_return_status	       => l_return_status,
8789    	            x_contract_currency	       => lx_contract_currency,
8790    		    x_currency_conversion_type => lx_currency_conversion_type,
8791    		    x_currency_conversion_rate => lx_currency_conversion_rate,
8792    		    x_currency_conversion_date => lx_currency_conversion_date,
8793    		    x_converted_amount 	       => lx_converted_amount );
8794 
8795 	      IF (is_debug_statement_on) THEN
8796 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'called okl_accounting_util.convert_to_functional_currency, l_return_status: ' || l_return_status);
8797 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_contract_currency: ' || lx_contract_currency);
8798 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_currency_conversion_type: ' || lx_currency_conversion_type);
8799 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_currency_conversion_rate: ' || lx_currency_conversion_rate);
8800 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_currency_conversion_date: ' || lx_currency_conversion_date);
8801 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_converted_amount: ' || lx_converted_amount);
8802 	      END IF;
8803 
8804               IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8805                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8806               ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
8807                 RAISE OKL_API.G_EXCEPTION_ERROR;
8808               END IF;
8809 
8810               lp_artv_rec.asset_fmv_amount  := lx_converted_amount;
8811 
8812             END IF;
8813             /* Bug 6736148 end */
8814 
8815           END IF;
8816 
8817           OKL_AM_ASSET_RETURN_PVT.create_asset_return(
8818                              p_api_version        =>  l_api_version,
8819                              p_init_msg_list      => OKL_API.G_FALSE,
8820                              x_return_status      => l_return_status,
8821                              x_msg_count          => lx_msg_count,
8822                              x_msg_data           => lx_msg_data,
8823                              p_artv_rec		  => lp_artv_rec,
8824                              x_artv_rec		  => lx_artv_rec,
8825                              p_quote_id           => l_id) ;
8826 
8827            IF (is_debug_statement_on) THEN
8828                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
8829                'after call to OKL_AM_ASSET_RETURN_PVT.create_asset_return :'||l_return_status);
8830            END IF;
8831 
8832           IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8833             RAISE G_EXCEPTION;
8834           ELSE
8835             resultout := 'COMPLETE:';
8836           END IF;
8837         ELSIF l_ret_exists = 'Y' THEN
8838          resultout := 'COMPLETE:';
8839         END IF;
8840       END LOOP;
8841 
8842       RETURN ;
8843     END IF;
8844 
8845     --
8846     -- CANCEL mode
8847     --
8848          IF (funcmode = 'CANCEL') THEN
8849       --
8850       resultout := 'COMPLETE:';
8851       RETURN;
8852       --
8853     END IF;
8854 
8855     --
8856     -- TIMEOUT mode
8857     --
8858     IF (funcmode = 'TIMEOUT') THEN
8859       --
8860       resultout := 'COMPLETE:';
8861       RETURN;
8862       --
8863     END IF;
8864 
8865 
8866    IF (is_debug_procedure_on) THEN
8867        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8868    END IF;
8869 
8870   EXCEPTION
8871     WHEN G_EXCEPTION THEN
8872 
8873         IF (is_debug_exception_on) THEN
8874             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
8875         END IF;
8876 
8877         IF c_quote_assets_csr%ISOPEN THEN
8878           CLOSE c_quote_assets_csr;
8879         END IF;
8880 
8881         IF c_asset_return_csr%ISOPEN THEN
8882           CLOSE c_asset_return_csr;
8883         END IF;
8884         WF_CORE.context('OKL_AM_QUOTES_WF' , 'create_repo_asset_return',
8885                         itemtype, itemkey, actid, funcmode);
8886         RAISE;
8887 
8888     WHEN OTHERS THEN
8889 
8890         IF (is_debug_exception_on) THEN
8891             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8892                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8893         END IF;
8894 
8895         IF c_quote_assets_csr%ISOPEN THEN
8896           CLOSE c_quote_assets_csr;
8897         END IF;
8898 
8899         IF c_asset_return_csr%ISOPEN THEN
8900           CLOSE c_asset_return_csr;
8901         END IF;
8902         WF_CORE.context('OKL_AM_QUOTES_WF' , 'create_repo_asset_return',
8903                         itemtype, itemkey, actid, funcmode);
8904         RAISE;
8905 
8906   END create_repo_asset_return;
8907 
8908 
8909 END OKL_AM_QUOTES_WF;