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.26 2008/02/01 04:58:13 veramach noship $ */
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     FROM      OKL_TRX_QUOTES_V OTQ,
4695               OKL_TXL_QUOTE_LINES_B OTL,
4696               OKC_K_HEADERS_V AD
4697     WHERE OTQ.ID          = c_id
4698     AND   OTQ.ID          = OTL.QTE_ID
4699     AND AD.ID         = OTQ.KHR_ID
4700     GROUP BY TO_CHAR(SYSDATE, 'DD-MON-RRRR'),
4701                OTQ.QUOTE_NUMBER,
4702                OTQ.DATE_EFFECTIVE_TO,
4703                OTQ.QST_CODE,
4704                OTQ.CREATION_DATE,
4705                OTQ.QRS_CODE,
4706                AD.CONTRACT_NUMBER,
4707                OTQ.COMMENTS,
4708                OTQ.LAST_UPDATED_BY, OTQ.KHR_ID, OTQ.qtp_code;
4709 
4710     l_quote_rec okl_quote_csr%rowtype;
4711     l_projected_gl      NUMBER;
4712 -- for debug logging
4713     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_gl_quote_att';
4714     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4715     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4716     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4717   BEGIN
4718 
4719    IF (is_debug_procedure_on) THEN
4720        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
4721    END IF;
4722 
4723     IF (funcmode = 'RUN') THEN
4724 
4725         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
4726                         itemkey => itemkey,
4727                       aname   => 'TRANSACTION_ID');
4728 
4729         l_projected_gl := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4730                         itemkey => itemkey,
4731                       aname   => 'QUOTE_GL');
4732         --build message
4733      OPEN  okl_quote_csr(l_id);
4734      FETCH okl_quote_csr INTO l_quote_rec;
4735      CLOSE okl_quote_csr;
4736 
4737         l_message  := '<p>Quote Number:'||l_quote_rec.quote_number||'<br>'||
4738                       'Quote Effective To Date:'||l_quote_rec.effective_to||'<br>'||
4739                       'Total:'||l_quote_rec.quote_total||'<br>'||
4740                       'Projected Gain/Loss:'||okl_accounting_util.format_amount((l_projected_gl),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>'||
4741                       '<p>A Quote of type '||l_quote_rec.quote_type||' was requested for Contract '||l_quote_rec.contract_number||' on<br>'||
4742                       l_quote_rec.quote_creation_date||' for the following reason: '||l_quote_rec.quote_reason||'.</p>'||
4743                       '<p>Comments:<br>'||
4744                       l_quote_rec.comments||'</p>'||
4745                       '<p>The quote will be completed following your approval.</p>';
4746 
4747         wf_engine.SetItemAttrText ( itemtype=> itemtype,
4748                     itemkey => itemkey,
4749                     aname   => 'TRX_TYPE_ID',
4750                               avalue  => 'OKLAMGAL');
4751 
4752         wf_engine.SetItemAttrText ( itemtype=> itemtype,
4753                     itemkey => itemkey,
4754                     aname   => 'MESSAGE_DESCRIPTION',
4755                               avalue  => l_message);
4756 
4757         resultout := 'COMPLETE:';
4758         RETURN ;
4759     END IF;
4760 
4761     --
4762     -- CANCEL mode
4763     --
4764     IF (funcmode = 'CANCEL') THEN
4765       --
4766       resultout := 'COMPLETE:';
4767       RETURN;
4768       --
4769     END IF;
4770 
4771     --
4772     -- TIMEOUT mode
4773     --
4774     IF (funcmode = 'TIMEOUT') THEN
4775       --
4776       resultout := 'COMPLETE:';
4777       RETURN;
4778       --
4779     END IF;
4780 
4781    IF (is_debug_procedure_on) THEN
4782        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
4783    END IF;
4784 
4785   EXCEPTION
4786      WHEN OTHERS THEN
4787 
4788              IF (is_debug_exception_on) THEN
4789             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4790                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
4791         END IF;
4792 
4793         IF okl_quote_csr%ISOPEN THEN
4794            CLOSE okl_quote_csr;
4795         END IF;
4796 
4797         wf_core.context('OKL_AM_QUOTES_WF' , 'pop_gl_quote_att', itemtype, itemkey, actid, funcmode);
4798         RAISE;
4799 
4800   END pop_gl_quote_att;
4801 
4802   -- Start of comments
4803   --
4804   -- Procedure Name : validate_quote_approval
4805   -- Description    : Validates quote id on entry to Workflow
4806   -- Business Rules :
4807   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
4808   -- Version     : 1.0
4809   --
4810   -- End of comments
4811   PROCEDURE validate_quote_approval( itemtype IN  VARCHAR2,
4812                                      itemkey   IN  VARCHAR2,
4813                                      actid     IN  NUMBER,
4814                                      funcmode IN  VARCHAR2,
4815                                      resultout OUT NOCOPY VARCHAR2) IS
4816 
4817     -- Check quote exists an d is either DRAFTED or REJECTED
4818   -- nikshah -- Bug # 5484903 Fixed,
4819   -- Changed CURSOR get_quote_csr SQL definition
4820     CURSOR  get_quote_csr  ( p_qte_id   IN VARCHAR2)
4821     IS
4822     SELECT  a.last_updated_by, a.quote_number, count(*) recs
4823     FROM    OKL_TRX_QUOTES_B a,
4824             OKL_QUOTE_PARTIES b
4825     WHERE   a.id = p_qte_id
4826     and     a.qst_code in ('DRAFTED', 'REJECTED')
4827     and     b.qte_id (+) = a.id
4828     GROUP BY a.last_updated_by, a.quote_number;
4829 
4830     l_last_updated_by               NUMBER;
4831     l_quote_id                      VARCHAR2(200);
4832 
4833     l_user_name   WF_USERS.name%type;
4834     l_name        WF_USERS.description%type;
4835     l_current_party  NUMBER;
4836 
4837     l_quote_number  VARCHAR2(100);
4838 
4839     x_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
4840     x_msg_count     NUMBER;
4841     x_msg_data      VARCHAR2(2000);
4842     p_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
4843     x_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
4844     p_api_version   NUMBER       := 1;
4845     p_init_msg_list VARCHAR2(1)  := FND_API.G_TRUE;
4846 
4847     API_ERROR       EXCEPTION;
4848 --19-jul-2007 ansethur R12B XML Publisher starts
4849     l_api_version    NUMBER       := 1;
4850     l_init_msg_list  VARCHAR2(1) := 'T';
4851     l_return_status  VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
4852     ERR EXCEPTION;
4853     l_batch_id     NUMBER;
4854     l_xmp_rec      OKL_XMLP_PARAMS_PVT.xmp_rec_type;
4855     lx_xmp_rec     OKL_XMLP_PARAMS_PVT.xmp_rec_type;
4856 
4857  -- Check quote exists
4858     CURSOR  get_quote_xmlp_csr  ( p_qte_id   IN VARCHAR2)
4859     IS
4860     SELECT  a.LAST_UPDATED_BY LAST_UPDATED_BY,
4861             a.QTE_ID QTE_ID,
4862             b.PO_PARTY_ID1 QP_PARTY_ID,
4863             decode(b.po_party_object, 'OKX_OPERUNIT', 'O', 'OKX_PARTY', 'P', 'OKX_VENDOR', 'V') party_type
4864     FROM    OKL_TXL_QUOTE_LINES_V a,
4865             OKL_AM_QUOTE_PARTIES_UV b
4866     WHERE   a.qte_id = to_number(p_qte_id)
4867 --  and     b.qp_role_code = 'RECIPIENT'
4868     and     b.quote_id = a.qte_id;
4869 
4870     l_quote_rec                     get_quote_xmlp_csr%rowtype;
4871     l_party_object_tbl   okl_am_parties_pvt.party_object_tbl_type;
4872 
4873  --get the recipient email address
4874     CURSOR c_recipient(p_recipient_id IN NUMBER)
4875     IS
4876     SELECT hzp.email_address email
4877     FROM  hz_parties hzp
4878     WHERE hzp.party_id = p_recipient_id;
4879 
4880 -- get the sender email address
4881     CURSOR c_agent_csr (c_agent_id NUMBER) IS
4882     SELECT nvl(ppf.email_address , fu.email_address) email
4883     FROM   fnd_user fu,
4884            per_people_f ppf
4885     WHERE  fu.employee_id = ppf.person_id (+)
4886     AND    fu.user_id = c_agent_id;
4887 
4888     l_from_email      VARCHAR2(100);
4889     l_to_email        VARCHAR2(100);
4890   --19-jul-2007 ansethur R12B XML Publisher Starts
4891 -- for debug logging
4892     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_quote_approval';
4893     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4894     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4895     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4896   BEGIN
4897 
4898    IF (is_debug_procedure_on) THEN
4899        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
4900    END IF;
4901 
4902     --
4903     -- RUN mode
4904     --
4905     IF (funcmode = 'RUN') THEN
4906 
4907       l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
4908                                                itemkey  => itemkey,
4909                                                aname   => 'TRANSACTION_ID');
4910 
4911 --  20-Mar-06 rmunjulu 5087501 call okl_qte_pvt.update_row( ) to update the
4912 --  LAST_UPDATED_BY column of the quote with the current logged in user_id so before
4913 --  raising the business event so that workflow can pick up the correct requestor.
4914 
4915        p_qtev_rec.ID := to_number(l_quote_id);
4916        okl_qte_pvt.update_row( p_api_version      => p_api_version,
4917                                 p_init_msg_list   => p_init_msg_list,
4918                                 x_return_status   => x_return_status,
4919                                 x_msg_count       => x_msg_count,
4920                                 x_msg_data        => x_msg_data,
4921                                 p_qtev_rec        => p_qtev_rec,
4922                                 x_qtev_rec        => x_qtev_rec);
4923    IF (is_debug_statement_on) THEN
4924        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4925        'after call to okl_qte_pvt.update_row :'||x_return_status);
4926    END IF;
4927 
4928        IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
4929           RAISE API_ERROR;
4930        END IF;
4931 -- end of 20-Mar-06 rmunjulu 5087501
4932 
4933       OPEN  get_quote_csr(l_quote_id);
4934       FETCH get_quote_csr INTO l_last_updated_by, l_quote_number, l_current_party;
4935       CLOSE get_quote_csr;
4936 
4937       okl_am_wf.get_notification_agent(
4938                                 itemtype   => itemtype
4939                            , itemkey     => itemkey
4940                            , actid       => actid
4941                            , funcmode   => funcmode
4942                               , p_user_id     => l_last_updated_by
4943                               , x_name     => l_user_name
4944                            , x_description => l_name);
4945       -- Check that a quote id is returned for the TRANSACTION_ID given.
4946 
4947          IF (is_debug_statement_on) THEN
4948        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4949        'after call to okl_am_wf.get_notification_agent :'||l_return_status);
4950    END IF;
4951 
4952   IF l_last_updated_by IS NOT NULL AND l_user_name IS NOT NULL THEN
4953 
4954             wf_engine.SetItemAttrText ( itemtype=> itemtype,
4955                     itemkey => itemkey,
4956                     aname   => 'REQUESTER',
4957                              avalue  => l_user_name);
4958 
4959              wf_engine.SetItemAttrText ( itemtype=> itemtype,
4960                     itemkey => itemkey,
4961                     aname   => 'WF_ADMINISTRATOR',
4962                               avalue  => l_user_name);
4963 
4964             IF itemtype <> 'OKLAMRQT' THEN
4965 
4966              wf_engine.SetItemAttrNumber ( itemtype=> itemtype,
4967                     itemkey => itemkey,
4968                     aname   => 'CREATED_BY',
4969                              avalue  => l_last_updated_by);
4970 
4971              wf_engine.SetItemAttrText (
4972                                 itemtype=> itemtype,
4973                     itemkey => itemkey,
4974                     aname   => 'NOTIFY_AGENT',
4975                               avalue  => l_user_name);
4976 
4977              wf_engine.SetItemAttrText (
4978                                 itemtype=> itemtype,
4979                     itemkey => itemkey,
4980                     aname   => 'QUOTE_NUMBER',
4981                               avalue  => l_quote_number);
4982    END IF;
4983 
4984             -- change the quote status to submitted to indicate that the WF
4985             -- is processing for approval
4986 
4987             p_qtev_rec.ID := to_number(l_quote_id);
4988             p_qtev_rec.QST_CODE := 'SUBMITTED';
4989             okl_qte_pvt.update_row( p_api_version    => p_api_version,
4990                                 p_init_msg_list  => p_init_msg_list,
4991                                 x_return_status  => x_return_status,
4992                                 x_msg_count      => x_msg_count,
4993                                 x_msg_data       => x_msg_data,
4994                                 p_qtev_rec        => p_qtev_rec,
4995                                 x_qtev_rec        => x_qtev_rec);
4996 
4997   IF (is_debug_statement_on) THEN
4998        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4999        'after call to okl_qte_pvt.update_row :'||x_return_status);
5000    END IF;
5001 
5002             IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5003                 RAISE API_ERROR;
5004             END IF;
5005    --19-jul-2007 ansethur R12B XML Publisher Starts
5006         OPEN  get_quote_xmlp_csr(l_quote_id);
5007         FETCH get_quote_xmlp_csr INTO l_quote_rec;
5008         CLOSE get_quote_xmlp_csr;
5009 
5010         -- Find party details
5011         OKL_AM_PARTIES_PVT.get_party_details (
5012                                	p_id_code		    => l_quote_rec.party_type,
5013                                	p_id_value		    => l_quote_rec.qp_party_id,
5014                                	x_party_object_tbl	=> l_party_object_tbl,
5015                                	x_return_status		=> x_return_status);
5016 
5017   IF (is_debug_statement_on) THEN
5018        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5019        'after call to OKL_AM_PARTIES_PVT.get_party_details :'||l_return_status);
5020    END IF;
5021 
5022             IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5023                 RAISE API_ERROR;
5024             END IF;
5025 
5026             -- Populate Item Attributes for Fulfillment
5027             wf_engine.SetItemAttrText ( itemtype=> itemtype,
5028 				                itemkey => itemkey,
5029 				                aname   => 'PROCESS_CODE',
5030          	                    avalue  => 'AMTER');
5031 
5032             wf_engine.SetItemAttrText ( itemtype=> itemtype,
5033 				                itemkey => itemkey,
5034 				                aname   => 'RECIPIENT_ID',
5035                                 avalue  => l_party_object_tbl(1).p_id1);
5036 
5037 
5038             wf_engine.SetItemAttrText ( itemtype=> itemtype,
5039 				                itemkey => itemkey,
5040 				                aname   => 'RECIPIENT_DESCRIPTION',
5041                                 avalue  => l_party_object_tbl(1).p_name);
5042 
5043         OPEN c_recipient(l_party_object_tbl(1).p_id1);
5044         FETCH c_recipient INTO l_to_email;
5045         CLOSE c_recipient;
5046 
5047          wf_engine.SetItemAttrText ( itemtype=> itemtype,
5048                                      itemkey => itemkey,
5049                                      aname   => 'EMAIL_ADDRESS',
5050                                      avalue  =>  l_to_email);
5051 
5052         OPEN c_agent_csr(l_quote_rec.last_updated_by);
5053         FETCH c_agent_csr into l_from_email;
5054         CLOSE c_agent_csr;
5055 
5056           wf_engine.SetItemAttrText ( itemtype=> itemtype,
5057                                      itemkey => itemkey,
5058                                      aname   => 'FROM_ADDRESS',
5059                                      avalue  =>  l_from_email);
5060    --18-Dec-06 rkuttiya added for XMLP Project
5061    --code for inserting bind parameters into table
5062 
5063           l_xmp_rec.param_name := 'P_QUOTE_ID';
5064           l_xmp_rec.param_value := l_quote_id;
5065           l_xmp_rec.param_type_code := 'NUMBER';
5066 
5067            OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec(
5068                            p_api_version     => l_api_version
5069                           ,p_init_msg_list   => l_init_msg_list
5070                           ,x_return_status   => l_return_status
5071                           ,x_msg_count       => x_msg_count
5072                           ,x_msg_data        => x_msg_data
5073                           ,p_xmp_rec         => l_xmp_rec
5074                           ,x_xmp_rec         => lx_xmp_rec
5075                            );
5076 
5077           IF (is_debug_statement_on) THEN
5078                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5079                'after call to OKL_XMLP_PARAMS_PVT.create_xmlp_params_rec :'||l_return_status);
5080            END IF;
5081 
5082                IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5083                  RAISE ERR;
5084                END IF;
5085 
5086 
5087                 IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
5088                        l_batch_id := lx_xmp_rec.batch_id;
5089                        wf_engine.SetItemAttrText ( itemtype=> itemtype,
5090                                                    itemkey => itemkey,
5091                                                    aname   => 'BATCH_ID',
5092                                                    avalue  => l_batch_id );
5093 
5094                         resultout := 'COMPLETE:VALID';
5095                 ELSE
5096                         resultout := 'COMPLETE:ERROR';
5097                 END IF;
5098           --  resultout := 'COMPLETE:VALID';
5099 
5100   --19-jul-2007 ansethur R12B XML Publisher Ends
5101 
5102          ELSE
5103             resultout := 'COMPLETE:INVALID';
5104          END IF;
5105 
5106       RETURN ;
5107     END IF;
5108 
5109     --
5110     -- CANCEL mode
5111     --
5112     IF (funcmode = 'CANCEL') THEN
5113       --
5114       resultout := 'COMPLETE:';
5115       RETURN;
5116       --
5117     END IF;
5118 
5119     --
5120     -- TIMEOUT mode
5121     --
5122     IF (funcmode = 'TIMEOUT') THEN
5123       --
5124       resultout := 'COMPLETE:';
5125       RETURN;
5126       --
5127     END IF;
5128 
5129    IF (is_debug_procedure_on) THEN
5130        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5131    END IF;
5132 
5133   EXCEPTION
5134 
5135      WHEN API_ERROR THEN
5136 
5137         IF (is_debug_exception_on) THEN
5138             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5139         END IF;
5140 
5141         wf_core.context('OKL_AM_QUOTES_WF' , 'VALIDATE_QUOTE_APPROVAL', itemtype, itemkey, actid, funcmode);
5142         RAISE;
5143 
5144      WHEN OTHERS THEN
5145 
5146         IF (is_debug_exception_on) THEN
5147             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5148                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5149         END IF;
5150 
5151         IF get_quote_csr%ISOPEN THEN
5152            CLOSE get_quote_csr;
5153         END IF;
5154 
5155         WF_CORE.context('OKL_AM_QUOTES_WF' , 'VALIDATE_QUOTE_APPROVAL',
5156                         itemtype, itemkey, actid, funcmode);
5157         RAISE;
5158 
5159   END validate_quote_approval;
5160 
5161   -- Start of comments
5162   --
5163   -- Procedure Name : pop_cp_quote_att
5164   -- Description    : Populate Restructure Quote Notification Message
5165   -- Business Rules :
5166   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5167   -- Version     : 1.0
5168   --
5169   -- End of comments
5170   PROCEDURE pop_cp_quote_att( itemtype   IN VARCHAR2,
5171                                  itemkey    IN VARCHAR2,
5172                       actid  IN NUMBER,
5173                        funcmode IN VARCHAR2,
5174                      resultout OUT NOCOPY VARCHAR2 ) AS
5175 
5176     l_id      NUMBER;
5177  l_no_data_found  BOOLEAN;
5178     l_user              WF_USERS.NAME%TYPE;
5179 
5180     l_message       VARCHAR2(30000);
5181 
5182     -- cursor to populate notification attributes
5183  CURSOR okl_quote_csr(c_id NUMBER)
5184  IS
5185     SELECT     TO_CHAR(SYSDATE, 'DD-MON-RRRR') SYSTEM_DATE,
5186                OTQ.QUOTE_NUMBER             QUOTE_NUMBER,
5187                to_char(OTQ.DATE_EFFECTIVE_TO, 'DD-MON-RRRR') EFFECTIVE_TO,
5188                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,
5189                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_REASON',OTQ.qrs_code,'N')QUOTE_REASON ,
5190                OKL_AM_UTIL_PVT.get_lookup_meaning('OKL_QUOTE_TYPE',OTQ.qtp_code,'N') QUOTE_TYPE,
5191                to_char(OTQ.CREATION_DATE, 'DD-MON-RRRR') QUOTE_CREATION_DATE,
5192                AD.CONTRACT_NUMBER           CONTRACT_NUMBER,
5193                OTQ.COMMENTS                 COMMENTS,
5194                OTQ.LAST_UPDATED_BY          LAST_UPDATED_BY,
5195                OTQ.KHR_ID                   KHR_ID
5196     FROM      OKL_TRX_QUOTES_V OTQ,
5197               OKL_TXL_QUOTE_LINES_B OTL,
5198               OKC_K_HEADERS_V AD
5199     WHERE OTQ.ID          = c_id
5200     AND   OTQ.ID          = OTL.QTE_ID
5201     AND AD.ID         = OTQ.KHR_ID
5202     GROUP BY TO_CHAR(SYSDATE, 'DD-MON-RRRR'),
5203                OTQ.QUOTE_NUMBER,
5204                OTQ.DATE_EFFECTIVE_TO,
5205                OTQ.QST_CODE,
5206                OTQ.CREATION_DATE,
5207                OTQ.QRS_CODE,
5208                AD.CONTRACT_NUMBER,
5209                OTQ.COMMENTS,
5210                OTQ.LAST_UPDATED_BY, OTQ.KHR_ID, OTQ.qtp_code;
5211 
5212     l_quote_rec okl_quote_csr%rowtype;
5213 -- for debug logging
5214     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_cp_quote_att';
5215     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5216     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5217     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5218 
5219   BEGIN
5220 
5221    IF (is_debug_procedure_on) THEN
5222        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5223    END IF;
5224 
5225     IF (funcmode = 'RUN') THEN
5226 
5227         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
5228                         itemkey => itemkey,
5229                       aname   => 'TRANSACTION_ID');
5230 
5231         --build message
5232      OPEN  okl_quote_csr(l_id);
5233      FETCH okl_quote_csr INTO l_quote_rec;
5234      CLOSE okl_quote_csr;
5235 
5236         l_message  := '<p>Quote Number:'||l_quote_rec.quote_number||'<br>'||
5237                       'Quote Effective To Date:'||l_quote_rec.effective_to||'<br>'||
5238                       'Total:'||l_quote_rec.quote_total||'<br>'||
5239                       '<p>The Restructure Quote was requested for Contract '||l_quote_rec.contract_number||' on<br>'||
5240                       l_quote_rec.quote_creation_date||' for the following reason: '||l_quote_rec.quote_reason||'.</p>'||
5241                       '<p>Comments:<br>'||
5242                       l_quote_rec.comments||'</p>'||
5243                       '<p>The quote will be porcessed following your approval.</p>';
5244 
5245         wf_engine.SetItemAttrText ( itemtype=> itemtype,
5246                     itemkey => itemkey,
5247                     aname   => 'TRX_TYPE_ID',
5248                               avalue  => 'OKLAMRQT');
5249 
5250         wf_engine.SetItemAttrText ( itemtype=> itemtype,
5251                     itemkey => itemkey,
5252                     aname   => 'MESSAGE_DESCRIPTION',
5253                               avalue  => l_message);
5254 
5255         resultout := 'COMPLETE:';
5256         RETURN ;
5257     END IF;
5258 
5259     --
5260     -- CANCEL mode
5261     --
5262     IF (funcmode = 'CANCEL') THEN
5263       --
5264       resultout := 'COMPLETE:';
5265       RETURN;
5266       --
5267     END IF;
5268 
5269     --
5270     -- TIMEOUT mode
5271     --
5272     IF (funcmode = 'TIMEOUT') THEN
5273       --
5274       resultout := 'COMPLETE:';
5275       RETURN;
5276       --
5277     END IF;
5278 
5279    IF (is_debug_procedure_on) THEN
5280        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5281    END IF;
5282 
5283   EXCEPTION
5284      WHEN OTHERS THEN
5285 
5286          IF (is_debug_exception_on) THEN
5287             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5288                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5289         END IF;
5290         IF okl_quote_csr%ISOPEN THEN
5291            CLOSE okl_quote_csr;
5292         END IF;
5293 
5294         wf_core.context('OKL_AM_QUOTES_WF' , 'pop_cp_quote_att', itemtype, itemkey, actid, funcmode);
5295         RAISE;
5296 
5297   END pop_cp_quote_att;
5298 
5299   -- Start of comments
5300   --
5301   -- Procedure Name : CHECK_IF_PARTIAL_QUOTE
5302   -- Description    : Check for Partial Quote
5303   -- Business Rules :
5304   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5305   -- Version     : 1.0
5306   --
5307   -- End of comments
5308   PROCEDURE CHECK_IF_PARTIAL_QUOTE(
5309                                     itemtype    IN  VARCHAR2,
5310                                     itemkey   IN  VARCHAR2,
5311                                     actid       IN  NUMBER,
5312                                     funcmode IN  VARCHAR2,
5313                                     resultout OUT NOCOPY VARCHAR2) IS
5314     l_id      NUMBER;
5315     l_partial_yn    VARCHAR2(1);
5316     l_khr_id        NUMBER;
5317     l_rule_khr_id   NUMBER;
5318     l_qtp_code      VARCHAR2(30);
5319     l_qtev_rec      okl_trx_quotes_pub.qtev_rec_type;
5320     l_rgd_code      VARCHAR2(30);
5321 
5322     CURSOR c_qte_csr(c_id NUMBER) IS
5323     SELECT  partial_yn, khr_id, qtp_code
5324     FROM    OKL_TRX_QUOTES_B
5325     WHERE   id = c_id;
5326 
5327     l_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5328     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
5329 
5330     API_ERROR EXCEPTION;
5331 -- for debug logging
5332     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_if_partial_quote';
5333     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5334     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5335     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5336   BEGIN
5337 
5338    IF (is_debug_procedure_on) THEN
5339        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5340    END IF;
5341 
5342     IF (funcmode = 'RUN') THEN
5343 
5344         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
5345                         itemkey => itemkey,
5346                       aname   => 'TRANSACTION_ID');
5347 
5348         OPEN c_qte_csr(l_id);
5349         FETCH c_qte_csr INTO l_partial_yn, l_khr_id, l_qtp_code;
5350         CLOSE c_qte_csr;
5351 
5352         l_qtev_rec.khr_id := l_khr_id;
5353         l_qtev_rec.qtp_code := l_qtp_code;
5354         l_rule_khr_id := okl_am_util_pvt.get_rule_chr_id (l_qtev_rec);
5355         IF l_qtp_code LIKE 'TER_RECOURSE%' THEN
5356                 l_rgd_code := 'AVTPAR';
5357         ELSE
5358                 l_rgd_code := 'AMTPAR';
5359         END IF;
5360 
5361      IF l_partial_yn = 'Y' THEN
5362 
5363          OKL_AM_UTIL_PVT.get_rule_record(
5364                                   p_rgd_code     => l_rgd_code,
5365                                   p_rdf_code     => 'AMAPRE',
5366                                   p_chr_id     => l_rule_khr_id,
5367                                   p_cle_id     => NULL,
5368                                   x_rulv_rec     => l_rulv_rec,
5369                                   x_return_status => l_return_status,
5370                                   p_message_yn => FALSE);
5371 
5372    IF (is_debug_statement_on) THEN
5373        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5374        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
5375    END IF;
5376 
5377      IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
5378 
5379       IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
5380 
5381                 resultout := 'COMPLETE:Y';
5382             ELSE
5383                 resultout := 'COMPLETE:N';
5384             END IF;
5385         ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
5386 
5387             resultout := 'COMPLETE:N';
5388         ELSE
5389             RAISE API_ERROR;
5390         END IF;
5391     ELSE
5392         resultout := 'COMPLETE:N';
5393     END IF;
5394 
5395     RETURN;
5396 
5397    END IF;
5398 
5399    IF (is_debug_procedure_on) THEN
5400        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5401    END IF;
5402 
5403   EXCEPTION
5404 
5405      WHEN API_ERROR THEN
5406 
5407          IF (is_debug_exception_on) THEN
5408             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5409         END IF;
5410 
5411         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_PARTIAL_QUOTE', itemtype, itemkey, actid, funcmode);
5412         RAISE;
5413 
5414      WHEN OTHERS THEN
5415 
5416         IF (is_debug_exception_on) THEN
5417             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5418                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5419         END IF;
5420 
5421         IF c_qte_csr%ISOPEN THEN
5422            CLOSE c_qte_csr;
5423         END IF;
5424 
5425         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_PARTIAL_QUOTE', itemtype, itemkey, actid, funcmode);
5426         RAISE;
5427 
5428   END CHECK_IF_PARTIAL_QUOTE;
5429 
5430   -- Start of comments
5431   --
5432   -- Procedure Name : pop_stop_notification
5433   -- Description    : populates stop notification
5434   -- Business Rules :
5435   -- Parameters     : document_id,display_type, document, document_type
5436   -- Version     : 1.0
5437   -- History        : rkuttiya created 22-SEP-2003  Bug:2794685
5438   --                : RMUNJULU 03-OCT-03 2794685 Changed to get proper results
5439   -- End of comments
5440 
5441   PROCEDURE pop_stop_notification (document_id   in varchar2,
5442                                    display_type  in varchar2,
5443                                    document      in out nocopy varchar2,
5444                                    document_type in out nocopy varchar2) IS
5445 
5446 
5447     -- Cursor to obtain quote and contract details
5448     CURSOR  c_quote_ctr  ( p_qte_id   IN NUMBER)
5449     IS
5450     SELECT  TRX.ID,
5451             TRX.QUOTE_NUMBER,
5452             TRX.KHR_ID,
5453             TRX.QTP_CODE,
5454             KHR.CONTRACT_NUMBER
5455     FROM    OKL_TRX_QUOTES_B TRX,
5456             OKC_K_HEADERS_B KHR
5457     WHERE   TRX.id = p_qte_id
5458     AND     TRX.KHR_ID = KHR.ID;
5459 
5460 
5461     l_quote_ctr         c_quote_ctr%rowtype;
5462     l_quote_id          NUMBER;
5463     l_rgd_code          VARCHAR2(30);
5464     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
5465     l_return_status     VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5466     l_message           VARCHAR2(32000);
5467 
5468     l_tolerance_option VARCHAR2(150);
5469     l_tolerance_value NUMBER;
5470     l_tolerance_formula VARCHAR2(150);
5471     l_tolerance_basis   VARCHAR2(30);
5472     l_approval_formula  VARCHAR2(150);
5473 
5474 
5475     l_user_name      WF_USERS.name%type;
5476     l_name           WF_USERS.description%type;
5477     l_header_done    BOOLEAN := FALSE;
5478     l_pos            NUMBER;
5479     l_stop_type      VARCHAR2(15);
5480 -- for debug logging
5481     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_stop_notification';
5482     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5483     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5484     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5485 
5486   BEGIN
5487 
5488    IF (is_debug_procedure_on) THEN
5489        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5490    END IF;
5491 
5492 
5493         --get the parameters from document id
5494         l_pos      := INSTR(document_id, ':');
5495         l_quote_id   := SUBSTR(document_id, 1, l_pos - 1);
5496         l_stop_type   := SUBSTR(document_id, l_pos + 1, LENGTH(document_id) - l_pos);
5497 
5498         --get quote and contract details
5499         OPEN c_quote_ctr(l_quote_id);
5500         FETCH c_quote_ctr INTO l_quote_ctr;
5501         CLOSE c_quote_ctr;
5502 
5503         -- RMUNJULU Updated the message texts
5504         --setting the message dynamically based on different STOP  Global Variables
5505         IF l_stop_type = 'TOPTION' THEN -- Tolerance Allowed Option is set to NOT APPLICABLE
5506          l_message := '<html><body>'||
5507                       '<p>The termination quote approval process for Contract Number '||l_quote_ctr.contract_number||', Quote Number '||l_quote_ctr.quote_number||
5508                       ' has resulted in error.</p>'||
5509                       '<p>The Tolerance Allowed Option of the Gain/Loss value set of Termination Quote Process terms and conditions is set to NOT APPLICABLE.</p>'||
5510                       '<p>Please verify and change the Termination Quote Process terms and conditions and resubmit the quote for approval.</p> </body></html>';
5511         ELSIF l_stop_type = 'TFORMULAE' THEN -- Tolerance Allowed Formula returned no value
5512          l_message := '<html><body>'||
5513                       '<p>The termination quote approval process for Contract Number '||l_quote_ctr.contract_number||', Quote Number '||l_quote_ctr.quote_number||
5514                       ' has resulted in error.</p>'||
5515                       '<p>The Tolerance Allowed Formula of the Gain/Loss value set of Termination Quote Process terms and conditions has returned an error.</p> '||
5516                       '<p>Please  verify and change the Termination Quote Process terms and conditions and resubmit the quote for approval.</p> </body></html>';
5517         ELSIF l_stop_type = 'AFORMULA' THEN -- Approval Processing Formula is not set
5518          l_message := '<html><body>'||
5519                       '<p>The termination quote approval process for Contract Number: '||l_quote_ctr.contract_number||', Quote Number '||l_quote_ctr.quote_number||
5520                       ' has resulted in error.</p>'||
5521                       '<p>The Approval Processing Formula of the Gain/Loss value set of Termination Quote Process terms and conditions is not set.</p>'||
5522                       '<p>Please verify and change the Termination Quote Process terms and conditions and resubmit the quote for approval.</p> </body></html>';
5523         ELSIF l_stop_type = 'AFORMULAE' THEN -- Approval Processing Formula returned error
5524          l_message := '<html><body>'||
5525                       '<p>The termination quote approval process for Contract Number: '||l_quote_ctr.contract_number||', Quote Number: '||l_quote_ctr.quote_number||
5526                       ' has resulted in error.</p>'||
5527                       '<p>The Approval Processing Formula of the Gain/Loss value set of Termination Quote Process terms and conditions has returned an error. '||
5528                       '<p>Please verify and change the Termination Quote Process terms and conditions and resubmit the quote for approval.</p> </body></html>';
5529         END IF;
5530 
5531 
5532         document := l_message;
5533         document_type := display_type;
5534 
5535    IF (is_debug_procedure_on) THEN
5536        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5537    END IF;
5538 
5539         RETURN;
5540 
5541   EXCEPTION
5542      WHEN OTHERS THEN
5543         IF (is_debug_exception_on) THEN
5544             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5545                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5546         END IF;
5547         IF c_quote_ctr%ISOPEN THEN
5548            CLOSE c_quote_ctr;
5549         END IF;
5550 
5551   END pop_stop_notification;
5552 
5553   -- Start of comments
5554   --
5555   -- Procedure Name : CHECK_IF_QUOTE_GAIN_LOSS
5556   -- Description    : Check for Quote Gain or Loss
5557   -- Business Rules :
5558   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5559   -- Version     : 1.0
5560   -- History        : rkuttiya updated on 16-SEP-2003 Bug: 2794685
5561   --                : RMUNJULU 03-OCT-03 2794685 Changed to get proper results
5562   -- End of comments
5563 
5564   PROCEDURE CHECK_IF_QUOTE_GAIN_LOSS(
5565                                     itemtype    IN  VARCHAR2,
5566                                     itemkey   IN  VARCHAR2,
5567                                     actid       IN  NUMBER,
5568                                     funcmode IN  VARCHAR2,
5569                                     resultout OUT NOCOPY VARCHAR2) IS
5570     l_id     NUMBER;
5571     l_partial_yn    VARCHAR2(1);
5572     l_khr_id        NUMBER;
5573     l_rule_khr_id   NUMBER;
5574     l_qtp_code      VARCHAR2(30);
5575     l_qtev_rec      okl_trx_quotes_pub.qtev_rec_type;
5576     l_rgd_code      VARCHAR2(30);
5577 
5578 --Rkuttiya 18-SEP-2003 added "last_updated by" column to the  following cursor for bug 2794685
5579     CURSOR c_qte_csr(c_id NUMBER) IS
5580     SELECT  khr_id, qtp_code,last_updated_by
5581     FROM    OKL_TRX_QUOTES_B
5582     WHERE   id = c_id;
5583 
5584     CURSOR c_qtl_csr(c_id NUMBER) IS
5585     SELECT *
5586     FROM   OKL_TXL_QUOTE_LINES_B
5587     WHERE  qte_id =c_id;
5588 
5589     l_return_status     VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5590     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
5591 
5592     API_ERROR EXCEPTION;
5593 
5594     l_quote_total NUMBER := 0;
5595     l_quote_net  NUMBER := 0;
5596     l_tolerance  NUMBER := 0;
5597     l_seq  NUMBER;
5598     l_formula_value NUMBER;
5599 
5600     l_rule_found BOOLEAN := FALSE;
5601     l_check_gain_yn BOOLEAN := FALSE;
5602     l_line_formula_yn BOOLEAN := FALSE;
5603     l_always_approve_yn BOOLEAN := FALSE;
5604 
5605     l_calc_option VARCHAR2(150);
5606     l_fixed_value NUMBER;
5607     l_formula_name VARCHAR2(150);
5608 
5609     l_result VARCHAR2(50) := 'COMPLETE:NO';
5610 
5611 --rkuttiya 18-SEP-2003 Bug:2794685
5612     l_last_updated_by    NUMBER;
5613     l_user_name          VARCHAR2(200);
5614     l_name               VARCHAR2(200);
5615 -- for debug logging
5616     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_if_quote_gain_loss';
5617     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5618     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5619     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5620   BEGIN
5621 
5622    IF (is_debug_procedure_on) THEN
5623        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5624    END IF;
5625 
5626     IF (funcmode = 'RUN') THEN
5627 
5628         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
5629         itemkey  => itemkey,
5630         aname    => 'TRANSACTION_ID');
5631 
5632 
5633 --rkuttiya 18-SEP-2003  added variable l_last_updated_by in the FETCH clause bug: 2794685
5634         OPEN c_qte_csr(l_id);
5635         FETCH c_qte_csr INTO l_khr_id, l_qtp_code,l_last_updated_by;
5636         CLOSE c_qte_csr;
5637 
5638         l_qtev_rec.khr_id := l_khr_id;
5639         l_qtev_rec.qtp_code := l_qtp_code;
5640         l_rule_khr_id := okl_am_util_pvt.get_rule_chr_id (l_qtev_rec);
5641         IF l_qtp_code LIKE 'TER_RECOURSE%' THEN
5642                 l_rgd_code := 'AVTGAL';
5643         ELSE
5644                 l_rgd_code := 'AMTGAL';
5645         END IF;
5646 
5647      OKL_AM_UTIL_PVT.get_rule_record(
5648                                     p_rgd_code         => l_rgd_code,
5649                                     p_rdf_code         => 'AMAPRE',
5650                                     p_chr_id         => l_rule_khr_id,
5651                                     p_cle_id         => NULL,
5652                                     x_rulv_rec         => l_rulv_rec,
5653                                     x_return_status => l_return_status,
5654                                     p_message_yn => FALSE);
5655 
5656    IF (is_debug_statement_on) THEN
5657        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5658        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
5659    END IF;
5660 
5661 
5662      IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
5663               IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
5664                 l_result := CHECK_CALC_OPTIONS(itemtype   => itemtype,
5665                                                itemkey    => itemkey,
5666                                                actid      => actid,
5667                                                funcmode   => funcmode,
5668                                             p_rgd_code => l_rgd_code,
5669                                 p_khr_id   => l_rule_khr_id,
5670                                                p_qte_id   => l_id);
5671 
5672 --rkuttiya 18-SEP-2003  added for bug 2794685
5673                 IF l_result = 'COMPLETE:STOP' THEN
5674 --Set notification body
5675                    wf_engine.SetItemAttrText (
5676                                               itemtype=> itemtype,
5677                   itemkey => itemkey,
5678                   aname   => 'MESSAGE_DOC',
5679                                         avalue  => 'plsql:okl_am_quotes_wf.pop_stop_notification/'||l_id||':'||G_STOP);
5680 
5681 --get the name of requestor
5682 
5683                    okl_am_wf.get_notification_agent(
5684                                                itemtype           => itemtype
5685                                       , itemkey            => itemkey
5686                                       , actid           => actid
5687                                       , funcmode           => funcmode
5688                                              , p_user_id          => l_last_updated_by
5689                                              , x_name             => l_user_name
5690                                       , x_description      => l_name);
5691 
5692 --set the value for item attribute 'REQUESTER'
5693 
5694                    wf_engine.SetItemAttrText ( itemtype    => itemtype,
5695                    itemkey     => itemkey,
5696                    aname       => 'REQUESTER',
5697                                         avalue      => l_user_name);
5698                  END IF;
5699             ELSE
5700                l_result := 'COMPLETE:NO';
5701             end if;
5702 
5703 
5704            ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
5705              resultout := 'COMPLETE:NO';
5706            ELSE
5707              RAISE API_ERROR;
5708           END IF;
5709         resultout := l_result;
5710 
5711         RETURN;
5712     END IF;
5713 
5714    IF (is_debug_procedure_on) THEN
5715        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5716    END IF;
5717 
5718   EXCEPTION
5719 
5720      WHEN API_ERROR THEN
5721 
5722         IF (is_debug_exception_on) THEN
5723             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5724         END IF;
5725 
5726         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_QUOTE_GAIN_LOSS', itemtype, itemkey, actid, funcmode);
5727         RAISE;
5728 
5729      WHEN OTHERS THEN
5730 
5731         IF (is_debug_exception_on) THEN
5732             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5733                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5734         END IF;
5735 
5736         IF c_qte_csr%ISOPEN THEN
5737            CLOSE c_qte_csr;
5738         END IF;
5739 
5740         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_QUOTE_GAIN_LOSS', itemtype, itemkey, actid, funcmode);
5741         RAISE;
5742 
5743   END CHECK_IF_QUOTE_GAIN_LOSS;
5744 
5745   -- Start of comments
5746   --
5747   -- Procedure Name : CHECK_FOR_EXT_APPROVAL
5748   -- Description    : Check for Quote Approvers
5749   -- Business Rules :
5750   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5751   -- Version     : 1.0
5752   --
5753   -- End of comments
5754   PROCEDURE CHECK_FOR_EXT_APPROVAL(
5755                                     itemtype    IN  VARCHAR2,
5756                                     itemkey   IN  VARCHAR2,
5757                                     actid       IN  NUMBER,
5758                                     funcmode IN  VARCHAR2,
5759                                     resultout OUT NOCOPY VARCHAR2) IS
5760 
5761     l_quote_id                      varchar2(100);
5762 
5763  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5764  l_api_version  CONSTANT NUMBER := 1;
5765     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
5766  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
5767  l_msg_data      VARCHAR2(2000);
5768  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
5769  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
5770     l_party_count  NUMBER;
5771 
5772     API_ERROR           EXCEPTION;
5773 -- for debug logging
5774     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_ext_approval';
5775     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5776     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5777     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5778 
5779   BEGIN
5780 
5781    IF (is_debug_procedure_on) THEN
5782        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5783    END IF;
5784 
5785     IF (funcmode = 'RUN') THEN
5786 
5787         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
5788                               itemkey  => itemkey,
5789                             aname    => 'TRANSACTION_ID');
5790 
5791         l_q_party_uv_rec.quote_id := l_quote_id;
5792         l_q_party_uv_rec.qp_role_code := 'APPROVER';
5793 
5794 
5795         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
5796             RAISE API_ERROR;
5797         END IF;
5798 
5799   okl_am_parties_pvt.get_quote_parties (
5800    p_api_version  => l_api_version,
5801    p_init_msg_list  => l_init_msg_list,
5802    x_msg_count      => l_msg_count,
5803    x_msg_data      => l_msg_data,
5804    x_return_status  => l_return_status,
5805    p_q_party_uv_rec => l_q_party_uv_rec,
5806    x_q_party_uv_tbl => l_q_party_uv_tbl,
5807    x_record_count  => l_party_count);
5808 
5809       IF (is_debug_statement_on) THEN
5810        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5811        'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
5812    END IF;
5813 
5814 
5815         IF l_party_count > 0 THEN
5816 
5817             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
5818                     itemkey  => itemkey,
5819                   aname    => 'PARTY_COUNT',
5820                                        avalue   => l_party_count);
5821 
5822 
5823             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
5824                     itemkey  => itemkey,
5825                   aname    => 'PARTY_TYPE',
5826                                        avalue   => 'APPROVER');
5827 
5828 
5829             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
5830                     itemkey  => itemkey,
5831                   aname    => 'PROCESS_CODE',
5832                                        avalue   => 'AMTER');
5833 
5834              resultout := 'COMPLETE:Y';
5835         ELSE
5836              resultout := 'COMPLETE:N';
5837         END IF;
5838 
5839       RETURN ;
5840     END IF;
5841 
5842    IF (is_debug_procedure_on) THEN
5843        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
5844    END IF;
5845 
5846   EXCEPTION
5847 
5848      WHEN API_ERROR THEN
5849         IF (is_debug_exception_on) THEN
5850             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5851         END IF;
5852         IF (is_debug_exception_on) THEN
5853             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
5854         END IF;
5855         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
5856                         itemtype, itemkey, actid, funcmode);
5857      WHEN OTHERS THEN
5858         IF (is_debug_exception_on) THEN
5859             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5860                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
5861         END IF;
5862 
5863         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_EXT_APPROVAL',
5864                         itemtype, itemkey, actid, funcmode);
5865         RAISE;
5866   END CHECK_FOR_EXT_APPROVAL;
5867 
5868   -- Start of comments
5869   --
5870   -- Procedure Name : GET_QUOTE_PARTY_DETAILS
5871   -- Description    : Generic procedure called from OKLAMNQT Workflow
5872   -- Business Rules :
5873   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
5874   -- Version     : 1.0
5875   --
5876   -- End of comments
5877   PROCEDURE GET_QUOTE_PARTY_DETAILS(
5878                                     itemtype    IN  VARCHAR2,
5879                                     itemkey   IN  VARCHAR2,
5880                                     actid       IN  NUMBER,
5881                                     funcmode IN  VARCHAR2,
5882                                     resultout OUT NOCOPY VARCHAR2) IS
5883 
5884     l_quote_id          NUMBER;
5885     l_party_count       NUMBER;
5886     l_party_type        VARCHAR2(30);
5887 
5888     l_return_status     VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5889     l_api_version       CONSTANT NUMBER := 1;
5890     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
5891     l_msg_count         NUMBER  := OKL_API.G_MISS_NUM;
5892     l_msg_data          VARCHAR2(2000);
5893     l_q_party_uv_tbl    okl_am_parties_pvt.q_party_uv_tbl_type;
5894     l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
5895     l_total_party_count NUMBER;
5896     l_current_rec       NUMBER;
5897 
5898     l_recipient_type    VARCHAR2(50);
5899     l_recipient_id      NUMBER;
5900     l_recipient_desc    VARCHAR2(1000);
5901 
5902     l_external_approver VARCHAR2(30000);
5903 
5904     MISSING_DETAILS_ERROR  EXCEPTION;
5905 -- for debug logging
5906     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'get_quote_party_details';
5907     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5908     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5909     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5910 
5911   BEGIN
5912 
5913    IF (is_debug_procedure_on) THEN
5914        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
5915    END IF;
5916 
5917     IF (funcmode = 'RUN') THEN
5918       -- Get the values for dispose_asset before calling the dispose_asset api
5919 
5920         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
5921                               itemkey  => itemkey,
5922                             aname    => 'TRANSACTION_ID');
5923 
5924         l_party_count := WF_ENGINE.GetItemAttrNumber( itemtype => itemtype,
5925                               itemkey  => itemkey,
5926                             aname    => 'PARTY_COUNT');
5927 
5928         l_party_type := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
5929                               itemkey  => itemkey,
5930                             aname    => 'PARTY_TYPE');
5931 
5932         l_q_party_uv_rec.quote_id       := l_quote_id;
5933         l_q_party_uv_rec.qp_role_code   := l_party_type;
5934 
5935         IF l_party_count > 0 THEN
5936 
5937       okl_am_parties_pvt.get_quote_parties (
5938            p_api_version  => l_api_version,
5939            p_init_msg_list  => l_init_msg_list,
5940            x_msg_count      => l_msg_count,
5941            x_msg_data      => l_msg_data,
5942            x_return_status  => l_return_status,
5943            p_q_party_uv_rec => l_q_party_uv_rec,
5944            x_q_party_uv_tbl => l_q_party_uv_tbl,
5945            x_record_count  => l_total_party_count);
5946 
5947    IF (is_debug_statement_on) THEN
5948        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
5949        'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
5950    END IF;
5951 
5952    IF l_q_party_uv_tbl(l_party_count).co_email IS NOT NULL THEN
5953 
5954         wf_engine.SetItemAttrText ( itemtype=> itemtype,
5955             itemkey => itemkey,
5956             aname   => 'EMAIL_ADDRESS',
5957             avalue  => l_q_party_uv_tbl(l_party_count).co_email);
5958 
5959         l_recipient_desc := nvl(l_q_party_uv_tbl(l_party_count).co_contact_name,
5960         l_q_party_uv_tbl(l_party_count).po_party_name);
5961 
5962 --19-jul-2007 ansethur  R12B XML Publisher Starts
5963         l_recipient_id := l_q_party_uv_tbl(l_party_count).po_party_id1;
5964 
5965         IF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_PARTY' THEN
5966               l_recipient_type := 'LESSEE';
5967         ELSIF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_VENDOR' THEN
5968               l_recipient_type := 'VENDOR';
5969         ELSIF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_OPERUNIT' THEN
5970                l_recipient_type := 'LESSEE';
5971         END IF;
5972 --19-jul-2007 ansethur  R12B XML Publisher Ends
5973 
5974   ELSIF l_q_party_uv_tbl(l_party_count).co_contact_id1 IS NOT NULL THEN
5975 
5976         -- Recipient is at contact level
5977         l_recipient_id := l_q_party_uv_tbl(l_party_count).co_contact_id1;
5978         --rkuttiya changed recipient type to LESSEE/VENDOR for XMLP Project
5979         IF l_q_party_uv_tbl(l_party_count).co_contact_object = 'OKX_PARTY' THEN
5980             --l_recipient_type := 'PC';
5981               l_recipient_type := 'LESSEE';
5982         ELSIF l_q_party_uv_tbl(l_party_count).co_contact_object = 'OKX_VENDOR' THEN
5983             --l_recipient_type := 'VC';
5984               l_recipient_type := 'VENDOR';
5985         ELSIF l_q_party_uv_tbl(l_party_count).co_contact_object = 'OKX_OPERUNIT' THEN
5986             --l_recipient_type := 'O';
5987               l_recipient_type := 'LESSEE';
5988         END IF;
5989 
5990         l_recipient_desc := l_q_party_uv_tbl(l_party_count).co_contact_name;
5991 
5992   ELSIF l_q_party_uv_tbl(l_party_count).po_party_id1 IS NOT NULL THEN
5993 
5994         -- Recipient is at po party level
5995         l_recipient_id := l_q_party_uv_tbl(l_party_count).po_party_id1;
5996 
5997         IF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_PARTY' THEN
5998             --l_recipient_type := 'P';
5999               l_recipient_type := 'LESSEE';
6000         ELSIF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_VENDOR' THEN
6001             --l_recipient_type := 'V';
6002               l_recipient_type := 'VENDOR';
6003         ELSIF l_q_party_uv_tbl(l_party_count).po_party_object = 'OKX_OPERUNIT' THEN
6004             --l_recipient_type := 'O';
6005               l_recipient_type := 'LESSEE';
6006         END IF;
6007 
6008         l_recipient_desc := l_q_party_uv_tbl(l_party_count).po_party_name;
6009 
6010   ELSE
6011         OKC_API.SET_MESSAGE (
6012    p_app_name => OKC_API.G_APP_NAME,
6013    p_msg_name => 'NO_RECIPIENT',
6014    p_token1 => 'PARAM',
6015    p_token1_value => l_quote_id);
6016 
6017         RAISE MISSING_DETAILS_ERROR;
6018 
6019   END IF;
6020 
6021   IF l_q_party_uv_tbl(l_party_count).co_email IS NULL THEN
6022    -- Populate remaining Item Attributes for Fulfillment
6023 
6024      IF l_recipient_type IS NOT NULL THEN
6025          wf_engine.SetItemAttrText ( itemtype=> itemtype,
6026                                      itemkey => itemkey,
6027                                      aname   => 'RECIPIENT_TYPE',
6028                                      avalue  => l_recipient_type);
6029      ELSE
6030          OKC_API.SET_MESSAGE (
6031             p_app_name => OKC_API.G_APP_NAME,
6032             p_msg_name => 'NO_RECIPIENT_TYPE',
6033             p_token1 => 'PARAM',
6034             p_token1_value => l_quote_id);
6035 
6036          RAISE MISSING_DETAILS_ERROR;
6037      END IF;
6038 
6039      IF l_recipient_id IS NOT NULL THEN
6040          wf_engine.SetItemAttrText (
6041                   itemtype=> itemtype,
6042                   itemkey => itemkey,
6043                   aname   => 'RECIPIENT_ID',
6044                   avalue  => l_recipient_id);
6045     ELSE
6046          OKC_API.SET_MESSAGE (
6047           p_app_name => OKC_API.G_APP_NAME,
6048           p_msg_name => 'NO_RECIPIENT_ID',
6049           p_token1 => 'PARAM',
6050           p_token1_value => l_quote_id);
6051 
6052          RAISE MISSING_DETAILS_ERROR;
6053     END IF;
6054   END IF;
6055 
6056     IF l_party_type = 'APPROVER' AND l_recipient_desc IS NOT NULL THEN
6057 
6058         l_external_approver := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6059                       itemkey  => itemkey,
6060                     aname    => 'EXTERNAL_APPROVER');
6061 
6062         IF l_external_approver IS NOT NULL THEN
6063             l_external_approver := l_external_approver||'<tr><td>'||l_recipient_desc||'</td></tr>';
6064         ELSE
6065             l_external_approver := '<tr><td>'||l_recipient_desc||'</td></tr>';
6066         END IF;
6067 
6068         wf_engine.SetItemAttrText ( itemtype=> itemtype,
6069             itemkey => itemkey,
6070             aname   => 'EXTERNAL_APPROVER',
6071                         avalue  => l_external_approver);
6072 
6073     END IF;
6074 --19-jul-2007 ansethur  R12B XML Publisher Starts
6075     IF l_recipient_type IS NOT NULL THEN
6076         wf_engine.SetItemAttrText ( itemtype=> itemtype,
6077                                        itemkey => itemkey,
6078                                        aname   => 'RECIPIENT_TYPE',
6079                                        avalue  => l_recipient_type);
6080     ELSE
6081         OKC_API.SET_MESSAGE (
6082                   p_app_name => OKC_API.G_APP_NAME,
6083                   p_msg_name => 'NO_RECIPIENT_TYPE',
6084                   p_token1 => 'PARAM',
6085                   p_token1_value => l_quote_id);
6086 
6087         RAISE MISSING_DETAILS_ERROR;
6088     END IF;
6089 
6090     IF l_recipient_id IS NOT NULL THEN
6091          wf_engine.SetItemAttrNumber ( itemtype=> itemtype,
6092                                        itemkey => itemkey,
6093                                        aname   => 'RECIPIENT_ID',
6094                                        avalue  => l_recipient_id);
6095     ELSE
6096         OKC_API.SET_MESSAGE (
6097                      p_app_name => OKC_API.G_APP_NAME,
6098                      p_msg_name => 'NO_RECIPIENT_ID',
6099                      p_token1 => 'PARAM',
6100                      p_token1_value => l_quote_id);
6101 
6102                      RAISE MISSING_DETAILS_ERROR;
6103     END IF;
6104 --19-jul-2007 ansethur  R12B XML Publisher Ends
6105         wf_engine.SetItemAttrText ( itemtype=> itemtype,
6106                                     itemkey => itemkey,
6107                                     aname   => 'RECIPIENT_DESCRIPTION',
6108                                     avalue  => l_recipient_desc);
6109 
6110         -- Decrement party counter
6111          wf_engine.SetItemAttrNumber ( itemtype=> itemtype,
6112                                        itemkey => itemkey,
6113                                        aname   => 'PARTY_COUNT',
6114                                        avalue  => l_party_count-1);
6115 
6116 -- If there is no email found on the quote party record
6117 -- then return NO_EMAIL, the workflow bypasses the Fulfillment
6118 -- request in this instance.
6119 -- Logic changed for bug ????????
6120         IF l_q_party_uv_tbl(l_party_count).co_email IS NOT NULL THEN
6121             resultout := 'COMPLETE:NEXT';
6122         ELSE
6123             resultout := 'COMPLETE:NO_EMAIL';
6124         END IF;
6125   ELSE
6126          -- MDOKAL, 15-APR-2003 Bug 2862254, Fix for HTML Notification Issue
6127          WF_ENGINE.SetItemAttrText(
6128                             itemtype => itemtype,
6129                 itemkey  => itemkey,
6130                 aname    => 'EXTERNAL_APPROVER_DOC',
6131                           avalue   => 'plsql:okl_am_quotes_wf.pop_external_approver_doc/'||itemkey);
6132 
6133          resultout := 'COMPLETE:DONE';
6134   END IF;
6135  RETURN ;
6136 END IF;
6137 
6138 
6139    IF (is_debug_procedure_on) THEN
6140        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6141    END IF;
6142 
6143     EXCEPTION
6144      WHEN MISSING_DETAILS_ERROR THEN
6145 
6146         IF (is_debug_exception_on) THEN
6147             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED : MISSING_DETAILS_ERROR');
6148         END IF;
6149 
6150         WF_CORE.context('OKL_AM_QUOTES_WF' , 'GET_QUOTE_PARTY_DETAILS',
6151                         itemtype, itemkey, actid, funcmode);
6152 
6153   END GET_QUOTE_PARTY_DETAILS;
6154 
6155   -- Start of comments
6156   --
6157   -- Procedure Name : CHECK_FOR_ADVANCE_NOTICE
6158   -- Description    : Checks for any Advanced Notices
6159   -- Business Rules :
6160   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6161   -- Version     : 1.0
6162   --
6163   -- End of comments
6164   PROCEDURE CHECK_FOR_ADVANCE_NOTICE(
6165                                     itemtype    IN  VARCHAR2,
6166                                     itemkey   IN  VARCHAR2,
6167                                     actid       IN  NUMBER,
6168                                     funcmode IN  VARCHAR2,
6169                                     resultout OUT NOCOPY VARCHAR2) IS
6170 
6171     l_quote_id                      varchar2(100);
6172 
6173  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6174  l_api_version  CONSTANT NUMBER := 1;
6175     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
6176  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
6177  l_msg_data      VARCHAR2(2000);
6178  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
6179  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
6180     l_party_count  NUMBER;
6181     l_delay_days        NUMBER(10,4);
6182 
6183     CURSOR c_delay_days_csr(c_qte_id  NUMBER) IS
6184  SELECT  max(QP_DELAY_DAYS) DELAY_DAYS
6185  FROM   OKL_AM_QUOTE_PARTIES_UV
6186     WHERE  quote_id = c_qte_id
6187  AND    qp_role_code = 'ADVANCE_NOTICE';
6188 
6189     API_ERROR           EXCEPTION;
6190 -- for debug logging
6191     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_advance_notice';
6192     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6193     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6194     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6195   BEGIN
6196 
6197    IF (is_debug_procedure_on) THEN
6198        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6199    END IF;
6200 
6201     IF (funcmode = 'RUN') THEN
6202 
6203         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6204                               itemkey  => itemkey,
6205                             aname    => 'TRANSACTION_ID');
6206 
6207         l_q_party_uv_rec.quote_id := l_quote_id;
6208         l_q_party_uv_rec.qp_role_code := 'ADVANCE_NOTICE';
6209 
6210   okl_am_parties_pvt.get_quote_parties (
6211    p_api_version  => l_api_version,
6212    p_init_msg_list  => l_init_msg_list,
6213    x_msg_count      => l_msg_count,
6214    x_msg_data      => l_msg_data,
6215    x_return_status  => l_return_status,
6216    p_q_party_uv_rec => l_q_party_uv_rec,
6217    x_q_party_uv_tbl => l_q_party_uv_tbl,
6218    x_record_count  => l_party_count);
6219 
6220    IF (is_debug_statement_on) THEN
6221        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6222        'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
6223    END IF;
6224 
6225         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6226             RAISE API_ERROR;
6227         END IF;
6228 
6229         IF l_party_count > 0 THEN
6230 
6231    OPEN c_delay_days_csr(l_quote_id);
6232    FETCH c_delay_days_csr INTO l_delay_days;
6233    CLOSE c_delay_days_csr;
6234 
6235             WF_ENGINE.SetItemAttrNumber( itemtype => itemtype,
6236                     itemkey  => itemkey,
6237                   aname    => 'NOTICE_DELAY',
6238                                        avalue   => l_delay_days);
6239 
6240             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6241                     itemkey  => itemkey,
6242                   aname    => 'PARTY_COUNT',
6243                                        avalue   => l_party_count);
6244 
6245 
6246             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6247                     itemkey  => itemkey,
6248                   aname    => 'PARTY_TYPE',
6249                                        avalue   => 'ADVANCE_NOTICE');
6250 
6251 
6252             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6253                     itemkey  => itemkey,
6254                   aname    => 'PROCESS_CODE',
6255                                        avalue   => 'AMTER');
6256 
6257              resultout := 'COMPLETE:Y';
6258         ELSE
6259              resultout := 'COMPLETE:N';
6260         END IF;
6261 
6262       RETURN ;
6263     END IF;
6264 
6265    IF (is_debug_procedure_on) THEN
6266        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6267    END IF;
6268 
6269   EXCEPTION
6270 
6271      WHEN API_ERROR THEN
6272         IF (is_debug_exception_on) THEN
6273             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6274         END IF;
6275 
6276         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6277                         itemtype, itemkey, actid, funcmode);
6278 
6279      WHEN OTHERS THEN
6280 
6281         IF (is_debug_exception_on) THEN
6282             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6283                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6284         END IF;
6285 
6286 
6287         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_ADVANCE_NOTICE',
6288                         itemtype, itemkey, actid, funcmode);
6289         RAISE;
6290 
6291   END CHECK_FOR_ADVANCE_NOTICE;
6292 
6293   -- Start of comments
6294   --
6295   -- Procedure Name : CHECK_FOR_RECIPIENT
6296   -- Description    : Checks for any RECIPIENT's
6297   -- Business Rules :
6298   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6299   -- Version     : 1.0
6300   --
6301   -- End of comments
6302   PROCEDURE CHECK_FOR_RECIPIENT(
6303                                     itemtype    IN  VARCHAR2,
6304                                     itemkey   IN  VARCHAR2,
6305                                     actid       IN  NUMBER,
6306                                     funcmode IN  VARCHAR2,
6307                                     resultout OUT NOCOPY VARCHAR2) IS
6308 
6309 
6310 
6311     l_quote_id                      varchar2(100);
6312 
6313  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6314  l_api_version  CONSTANT NUMBER := 1;
6315     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
6316  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
6317  l_msg_data      VARCHAR2(2000);
6318  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
6319  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
6320     l_party_count  NUMBER;
6321 
6322     API_ERROR           EXCEPTION;
6323 -- for debug logging
6324     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_recipient';
6325     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6326     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6327     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6328 
6329   BEGIN
6330 
6331    IF (is_debug_procedure_on) THEN
6332        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6333    END IF;
6334 
6335     IF (funcmode = 'RUN') THEN
6336 
6337         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6338                               itemkey  => itemkey,
6339                             aname    => 'TRANSACTION_ID');
6340 
6341         l_q_party_uv_rec.quote_id := l_quote_id;
6342         l_q_party_uv_rec.qp_role_code := 'RECIPIENT';
6343 
6344         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6345             RAISE API_ERROR;
6346         END IF;
6347 
6348   okl_am_parties_pvt.get_quote_parties (
6349    p_api_version  => l_api_version,
6350    p_init_msg_list  => l_init_msg_list,
6351    x_msg_count      => l_msg_count,
6352    x_msg_data      => l_msg_data,
6353    x_return_status  => l_return_status,
6354    p_q_party_uv_rec => l_q_party_uv_rec,
6355    x_q_party_uv_tbl => l_q_party_uv_tbl,
6356    x_record_count  => l_party_count);
6357 
6358    IF (is_debug_statement_on) THEN
6359        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6360        'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
6361    END IF;
6362 
6363         IF l_party_count > 0 THEN
6364 
6365             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6366                     itemkey  => itemkey,
6367                   aname    => 'PARTY_COUNT',
6368                                        avalue   => l_party_count);
6369 
6370 
6371             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6372                     itemkey  => itemkey,
6373                   aname    => 'PARTY_TYPE',
6374                                        avalue   => 'RECIPIENT');
6375 
6376 
6377             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6378                     itemkey  => itemkey,
6379                   aname    => 'PROCESS_CODE',
6380                                        avalue   => 'AMTER');
6381 
6382              resultout := 'COMPLETE:Y';
6383         ELSE
6384              resultout := 'COMPLETE:N';
6385         END IF;
6386 
6387       RETURN ;
6388     END IF;
6389 
6390    IF (is_debug_procedure_on) THEN
6391        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6392    END IF;
6393 
6394   EXCEPTION
6395 
6396      WHEN API_ERROR THEN
6397         IF (is_debug_exception_on) THEN
6398             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6399         END IF;
6400         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6401                         itemtype, itemkey, actid, funcmode);
6402      WHEN OTHERS THEN
6403         IF (is_debug_exception_on) THEN
6404             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6405                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6406         END IF;
6407 
6408         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT',
6409                         itemtype, itemkey, actid, funcmode);
6410         RAISE;
6411 
6412   END CHECK_FOR_RECIPIENT;
6413 
6414   -- Start of comments
6415   --
6416   -- Procedure Name : CHECK_FOR_FYI
6417   -- Description    : Checks for any FYI's
6418   -- Business Rules :
6419   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6420   -- Version     : 1.0
6421   --
6422   -- End of comments
6423   PROCEDURE CHECK_FOR_FYI(
6424                                     itemtype    IN  VARCHAR2,
6425                                     itemkey   IN  VARCHAR2,
6426                                     actid       IN  NUMBER,
6427                                     funcmode IN  VARCHAR2,
6428                                     resultout OUT NOCOPY VARCHAR2) IS
6429 
6430 
6431 
6432     l_quote_id                      varchar2(100);
6433 
6434  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6435  l_api_version  CONSTANT NUMBER := 1;
6436     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
6437  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
6438  l_msg_data      VARCHAR2(2000);
6439  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
6440  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
6441     l_party_count  NUMBER;
6442 
6443     API_ERROR           EXCEPTION;
6444 -- for debug logging
6445     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_fyi';
6446     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6447     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6448     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6449   BEGIN
6450 
6451    IF (is_debug_procedure_on) THEN
6452        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6453    END IF;
6454 
6455     IF (funcmode = 'RUN') THEN
6456 
6457         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6458                               itemkey  => itemkey,
6459                             aname    => 'TRANSACTION_ID');
6460 
6461         l_q_party_uv_rec.quote_id := l_quote_id;
6462         l_q_party_uv_rec.qp_role_code := 'FYI';
6463 
6464         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6465             RAISE API_ERROR;
6466         END IF;
6467 
6468   okl_am_parties_pvt.get_quote_parties (
6469                            p_api_version  => l_api_version,
6470                            p_init_msg_list  => l_init_msg_list,
6471                            x_msg_count      => l_msg_count,
6472                            x_msg_data      => l_msg_data,
6473                            x_return_status  => l_return_status,
6474                            p_q_party_uv_rec => l_q_party_uv_rec,
6475                            x_q_party_uv_tbl => l_q_party_uv_tbl,
6476                            x_record_count  => l_party_count);
6477 
6478 
6479            IF (is_debug_statement_on) THEN
6480                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6481                'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
6482            END IF;
6483 
6484         IF l_party_count > 0 THEN
6485 
6486             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6487                     itemkey  => itemkey,
6488                   aname    => 'PARTY_COUNT',
6489                                        avalue   => l_party_count);
6490 
6491 
6492             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6493                     itemkey  => itemkey,
6494                   aname    => 'PARTY_TYPE',
6495                                        avalue   => 'FYI');
6496 
6497 
6498             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6499                     itemkey  => itemkey,
6500                   aname    => 'PROCESS_CODE',
6501                                        avalue   => 'AMTER');
6502 
6503              resultout := 'COMPLETE:Y';
6504         ELSE
6505              resultout := 'COMPLETE:N';
6506         END IF;
6507 
6508       RETURN ;
6509     END IF;
6510 
6511    IF (is_debug_procedure_on) THEN
6512        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6513    END IF;
6514 
6515   EXCEPTION
6516 
6517      WHEN API_ERROR THEN
6518         IF (is_debug_exception_on) THEN
6519             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6520         END IF;
6521 
6522         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6523                         itemtype, itemkey, actid, funcmode);
6524      WHEN OTHERS THEN
6525         IF (is_debug_exception_on) THEN
6526             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6527                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6528         END IF;
6529         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_FYI',
6530                         itemtype, itemkey, actid, funcmode);
6531         RAISE;
6532 
6533   END CHECK_FOR_FYI;
6534 
6535   -- Start of comments
6536   --
6537   -- Procedure Name : CHECK_FOR_RECIPIENT_ADD
6538   -- Description    : Checks for any additional recipients exists
6539   -- Business Rules :
6540   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6541   -- Version     : 1.0
6542   --
6543   -- End of comments
6544   PROCEDURE CHECK_FOR_RECIPIENT_ADD(
6545                                     itemtype    IN  VARCHAR2,
6546                                     itemkey   IN  VARCHAR2,
6547                                     actid       IN  NUMBER,
6548                                     funcmode IN  VARCHAR2,
6549                                     resultout OUT NOCOPY VARCHAR2) IS
6550 
6551 
6552 
6553     l_quote_id                      varchar2(100);
6554 
6555  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6556  l_api_version  CONSTANT NUMBER := 1;
6557     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
6558  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
6559  l_msg_data      VARCHAR2(2000);
6560  l_q_party_uv_tbl okl_am_parties_pvt.q_party_uv_tbl_type;
6561  l_q_party_uv_rec    okl_am_parties_pvt.q_party_uv_rec_type;
6562     l_party_count  NUMBER;
6563 
6564     API_ERROR           EXCEPTION;
6565 -- for debug logging
6566     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_for_recipient_add';
6567     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6568     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6569     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6570 
6571   BEGIN
6572 
6573    IF (is_debug_procedure_on) THEN
6574        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6575    END IF;
6576 
6577     IF (funcmode = 'RUN') THEN
6578 
6579         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
6580                               itemkey  => itemkey,
6581                             aname    => 'TRANSACTION_ID');
6582 
6583         l_q_party_uv_rec.quote_id := l_quote_id;
6584         l_q_party_uv_rec.qp_role_code := 'RECIPIENT_ADDITIONAL';
6585 
6586         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6587             RAISE API_ERROR;
6588         END IF;
6589 
6590   okl_am_parties_pvt.get_quote_parties (
6591    p_api_version  => l_api_version,
6592    p_init_msg_list  => l_init_msg_list,
6593    x_msg_count      => l_msg_count,
6594    x_msg_data      => l_msg_data,
6595    x_return_status  => l_return_status,
6596    p_q_party_uv_rec => l_q_party_uv_rec,
6597    x_q_party_uv_tbl => l_q_party_uv_tbl,
6598    x_record_count  => l_party_count);
6599 
6600 	   IF (is_debug_statement_on) THEN
6601 	       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6602 	       'after call to okl_am_parties_pvt.get_quote_parties :'||l_return_status);
6603 	   END IF;
6604 
6605         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6606             RAISE API_ERROR;
6607         END IF;
6608 
6609         IF l_party_count > 0 THEN
6610 
6611             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6612                     itemkey  => itemkey,
6613                   aname    => 'PARTY_COUNT',
6614                                        avalue   => l_party_count);
6615 
6616 
6617             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6618                     itemkey  => itemkey,
6619                   aname    => 'PARTY_TYPE',
6620                                        avalue   => 'RECIPIENT_ADDITIONAL');
6621 
6622 
6623             WF_ENGINE.SetItemAttrText( itemtype => itemtype,
6624                     itemkey  => itemkey,
6625                   aname    => 'PROCESS_CODE',
6626                                        avalue   => 'AMTER');
6627 
6628              resultout := 'COMPLETE:Y';
6629         ELSE
6630              resultout := 'COMPLETE:N';
6631         END IF;
6632 
6633       RETURN ;
6634     END IF;
6635 
6636    IF (is_debug_procedure_on) THEN
6637        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6638    END IF;
6639 
6640   EXCEPTION
6641 
6642      WHEN API_ERROR THEN
6643 
6644         IF (is_debug_exception_on) THEN
6645             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6646         END IF;
6647 
6648         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6649                         itemtype, itemkey, actid, funcmode);
6650      WHEN OTHERS THEN
6651 
6652         IF (is_debug_exception_on) THEN
6653             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6654                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6655         END IF;
6656 
6657         WF_CORE.context('OKL_AM_QUOTES_WF' , 'CHECK_FOR_RECIPIENT_ADD',
6658                         itemtype, itemkey, actid, funcmode);
6659         RAISE;
6660 
6661   END CHECK_FOR_RECIPIENT_ADD;
6662 
6663   -- Start of comments
6664   --
6665   -- Function Name : CHECK_CALC_OPTIONS
6666   -- Description    : Called when quote is gain/loss
6667   -- Business Rules :
6668   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6669   -- Version  : 1.1
6670   --History         : rkuttiya  22-SEP-2003  modified for Bug:2794685
6671   --                : RMUNJULU 03-OCT-03 2794685 Changed to get proper results
6672   -- End of comments
6673 
6674  FUNCTION CHECK_CALC_OPTIONS(itemtype IN  VARCHAR2,
6675                             itemkey      IN  VARCHAR2,
6676                             actid        IN  NUMBER,
6677                             funcmode     IN  VARCHAR2,
6678                             p_rgd_code   IN VARCHAR2,
6679                    p_khr_id     IN NUMBER,
6680                             p_qte_id     IN NUMBER )
6681   RETURN VARCHAR2
6682   IS
6683 
6684 --rkuttiya 17-SEP-2003  commented for bug 2794685
6685 /*    CURSOR c_qtl_csr(c_id NUMBER) IS
6686       SELECT *
6687       FROM   OKL_TXL_QUOTE_LINES_B
6688       WHERE  qte_id =c_id;
6689 */
6690     l_id         NUMBER;
6691     l_partial_yn    VARCHAR2(1);
6692     l_khr_id        NUMBER;
6693     l_rule_khr_id   NUMBER;
6694     l_qtp_code      VARCHAR2(30);
6695     l_qtev_rec      okl_trx_quotes_pub.qtev_rec_type;
6696     l_rgd_code      VARCHAR2(30);
6697 
6698     l_quote_total NUMBER := 0;
6699     l_quote_net  NUMBER := 0;
6700     l_tolerance  VARCHAR2(150);
6701     l_seq      NUMBER;
6702 
6703     l_rule_found BOOLEAN := FALSE;
6704   --l_check_gain_yn BOOLEAN := FALSE;
6705     l_line_formula_yn BOOLEAN := FALSE;
6706     l_always_approve_yn BOOLEAN := FALSE;
6707 
6708     l_calc_option VARCHAR2(150);
6709     l_fixed_value NUMBER;
6710     l_formula_name VARCHAR2(150);
6711     l_approval_formula  VARCHAR2(150);
6712 
6713     l_result VARCHAR2(50) := 'COMPLETE:NO';
6714 
6715     l_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
6716     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
6717 
6718 --  rkuttiya 16-SEP-2003  Bug:2794685
6719     l_gain_loss_approval  VARCHAR2(100);
6720     l_tolerance_amount    NUMBER;
6721     l_formula_value       NUMBER;
6722     l_params           OKL_EXECUTE_FORMULA_PUB.ctxt_val_tbl_type;
6723     l_net_gain_loss       NUMBER;
6724 --  rkuttiya end;
6725 
6726     API_ERROR EXCEPTION;
6727 -- for debug logging
6728     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_calc_options';
6729     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
6730     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
6731     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
6732   BEGIN
6733 
6734    IF (is_debug_procedure_on) THEN
6735        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
6736    END IF;
6737 
6738         --rkuttiya  17-SEP-2003    added for Bug:2794685
6739         l_params(1).name  := 'QUOTE_ID';
6740         l_params(1).value := p_qte_id;
6741         --rkuttiya end
6742 
6743      -- ***************************************
6744      -- Check tolerance calculation options for Gain/Loss
6745      -- ***************************************
6746 
6747      OKL_AM_UTIL_PVT.get_rule_record(
6748                                     p_rgd_code     => p_rgd_code,
6749                                     p_rdf_code     => 'AMGALO',
6750                                     p_chr_id     => p_khr_id,
6751                                     p_cle_id     => NULL,
6752                                     x_rulv_rec     => l_rulv_rec,
6753                                     x_return_status => l_return_status,
6754                                     p_message_yn => TRUE);
6755 
6756            IF (is_debug_statement_on) THEN
6757                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
6758                'after call to okl_am_util_pvt.get_rule_record :'||l_return_status);
6759            END IF;
6760 
6761 
6762      IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
6763 
6764                 --rkuttiya 16-SEP-2003 added following code for bug:2794685
6765                 l_calc_option           := l_rulv_rec.rule_information7;
6766                 l_fixed_value           := NVL(TO_NUMBER(l_rulv_rec.rule_information4),0);
6767                 l_formula_name          := l_rulv_rec.rule_information6;
6768                 l_tolerance             := l_rulv_rec.rule_information5;
6769                 l_approval_formula      := l_rulv_rec.rule_information8;
6770         ELSE
6771         RAISE API_ERROR;
6772      END IF;
6773 
6774        --rkuttiya 16-SEP-2003 added following code for bug:2794685
6775        IF l_calc_option = 'NOT_APPLICABLE' THEN -- Tolerance option not applicable
6776 
6777           l_gain_loss_approval := 'COMPLETE:STOP';
6778           G_STOP := 'TOPTION'; -- Tolerance Option is not set
6779           l_tolerance_amount := 0;
6780 
6781           RETURN  l_gain_loss_approval;  -- RMUNJULU 2794685 Added
6782 
6783        ELSIF l_calc_option = 'USE_FIXED_AMOUNT' THEN -- Tolerance option is amount -- RMUNJULU CHANGED FROM AMOUNT
6784 
6785           l_gain_loss_approval := 'COMPLETE:YES';
6786           l_tolerance_amount := l_fixed_value;
6787 
6788        ELSIF l_calc_option = 'USE_FORMULA' THEN -- Tolerance option is formula
6789 
6790           l_gain_loss_approval := 'COMPLETE:YES';
6791 
6792           -- Get tolerance amount from tolerance formula
6793           OKL_AM_UTIL_PVT.get_formula_value (
6794                  p_formula_name           => l_formula_name,
6795                  p_chr_id                 => p_khr_id, -- RMUNJULU Changed
6796                  p_cle_id                 => NULL,
6797                  p_additional_parameters  => l_params, -- RMUNJULU 2794685 Added
6798                  x_formula_value          => l_formula_value,
6799                  x_return_status          => l_return_status);
6800 
6801            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6802             l_gain_loss_approval := 'COMPLETE:STOP';
6803                G_STOP := 'TFORMULAE'; -- Tolerance Formula has returned error
6804 
6805                RETURN  l_gain_loss_approval;    -- RMUNJULU 2794685 Added
6806             ELSE
6807              l_tolerance_amount := l_formula_value;
6808            END IF;
6809         END IF;
6810 
6811        --rkuttiya 17-SEP-2003  added following code for Bug:2794685
6812        -- Check Approval details
6813       IF l_approval_formula IS NULL THEN
6814 
6815          l_gain_loss_approval := 'COMPLETE:STOP';
6816          G_STOP := 'AFORMULA'; -- No Approval Processing Formula set
6817 
6818           RETURN  l_gain_loss_approval;  -- RMUNJULU 2794685 Added
6819 
6820       ELSE
6821 
6822          l_gain_loss_approval := 'COMPLETE:YES';
6823 
6824          -- Get Approval Processing Formula value : this will be the net gain loss for the quote
6825          OKL_AM_UTIL_PVT.get_formula_value (
6826                         p_formula_name           => l_approval_formula,
6827                         p_chr_id                 => p_khr_id, -- RMUNJULU Changed
6828                         p_cle_id                 => NULL,
6829                         p_additional_parameters  => l_params,
6830                         x_formula_value          => l_formula_value,
6831                         x_return_status          => l_return_status);
6832 
6833            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6834           l_gain_loss_approval := 'COMPLETE:STOP';
6835              G_STOP := 'AFORMULAE'; -- Approval Processing Formula returned error
6836 
6837              RETURN  l_gain_loss_approval;  -- RMUNJULU 2794685 Added
6838            ELSE
6839              l_net_gain_loss := l_formula_value;
6840            END IF;
6841       END IF;
6842 
6843       --Comparing the net Gain Loss with the tolerance amount
6844       IF l_gain_loss_approval = 'COMPLETE:YES' THEN
6845 
6846          -- If Loss or gain less than tolerance then approval required
6847          IF l_net_gain_loss < l_tolerance_amount THEN -- RMUNJULU Changed
6848 
6849             l_gain_loss_approval := 'COMPLETE:YES'; -- Gain Loss Approval is needed
6850 
6851             wf_engine.SetItemAttrNumber(
6852                        itemtype => itemtype,
6853            itemkey  => itemkey,
6854            aname    => 'QUOTE_GL',
6855                        avalue   => (l_net_gain_loss));
6856          ELSE
6857             l_gain_loss_approval := 'COMPLETE:NO';   -- Gain Loss Approval is NOT needed
6858          END IF;
6859       END IF;
6860 
6861       RETURN  l_gain_loss_approval;
6862 
6863 --rkuttiya 16-SEP-2003  commented the following code for Bug: 2794685
6864 /*      l_calc_option := l_rulv_rec.rule_information1;
6865       l_fixed_value := NVL (To_Number (l_rulv_rec.rule_information2), 0);
6866       l_formula_name := l_rulv_rec.rule_information3;
6867       l_tolerance := NVL (To_Number (l_rulv_rec.rule_information4), 0);
6868 */
6869 
6870 
6871 --rkuttiya 16-SEP-2003  commented the following code for Bug: 2794685
6872 
6873 /*        IF    l_calc_option = 'NOT_APPLICABLE' THEN
6874       l_always_approve_yn := TRUE;
6875 
6876         ELSIF l_calc_option = 'USE_FIXED_AMOUNT' THEN
6877       l_quote_net := l_fixed_value;
6878 
6879         ELSIF l_calc_option = 'USE_FORMULA' THEN
6880       l_line_formula_yn := TRUE;
6881 
6882      ELSE
6883   -- Invalid combination of values for RULE rule in GROUP group
6884       okl_am_util_pvt.set_message(
6885                                 p_app_name => 'OKL'
6886                                ,p_msg_name => 'OKL_AM_INVALID_RULE_FORMULA'
6887                                ,p_msg_level => OKL_AM_UTIL_PVT.G_DEBUG_LEVEL
6888                                ,p_token1 => 'GROUP'
6889                                ,p_token1_value => l_rgd_code
6890                                ,p_token2 => 'RULE'
6891                                ,p_token2_value => 'AMGALO');
6892 
6893       RAISE API_ERROR;
6894      END IF;
6895 */
6896 
6897 
6898 --rkuttiya 16-SEP-2003  commented the following code for Bug: 2794685
6899 
6900 /*
6901 
6902  -- *****************************
6903  -- Calculate taxable quote total
6904  -- *****************************
6905 
6906      IF NOT l_always_approve_yn THEN
6907 
6908             FOR l_rec in c_qtl_csr(l_id) LOOP
6909 
6910           IF NVL (l_rec.taxed_yn, 'N') <> 'Y' THEN
6911               l_quote_total := l_quote_total + NVL(l_rec.amount,0);
6912           END IF;
6913          END LOOP;
6914 
6915      END IF;
6916 
6917  -- ***********************************
6918  -- Calculate net quote using a formula
6919  -- ***********************************
6920 
6921      IF l_line_formula_yn THEN
6922 
6923             FOR l_rec in c_qtl_csr(l_id) LOOP
6924 
6925           l_formula_value := 0;
6926                 okl_am_util_pvt.get_formula_value (
6927                                p_formula_name => l_formula_name,
6928                                    p_chr_id         => l_khr_id,
6929                                    p_cle_id         => l_rec.kle_id,
6930                                    x_formula_value => l_formula_value,
6931                                    x_return_status => l_return_status);
6932 
6933       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
6934           RAISE API_ERROR;
6935       ELSE
6936           l_quote_net := l_quote_net + l_formula_value;
6937       END IF;
6938 
6939      END LOOP;
6940 
6941  END IF;
6942 
6943  -- *********************************
6944  -- Compare quote total and net quote
6945  -- *********************************
6946 
6947  IF (l_quote_total - l_quote_net < l_tolerance) OR (l_always_approve_yn) THEN
6948 
6949         wf_engine.SetItemAttrNumber( itemtype => itemtype,
6950                   itemkey  => itemkey,
6951                 aname    => 'QUOTE_GL',
6952                                      avalue   => (l_quote_total - l_quote_net));
6953         l_result := 'COMPLETE:Y';
6954     ELSE
6955         l_result := 'COMPLETE:N';
6956  END IF;
6957 */
6958 
6959 
6960    IF (is_debug_procedure_on) THEN
6961        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
6962    END IF;
6963 
6964     EXCEPTION
6965      WHEN API_ERROR THEN
6966 
6967         IF (is_debug_exception_on) THEN
6968             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
6969         END IF;
6970 
6971         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_CALC_OPTIONS', itemtype, itemkey, actid, funcmode);
6972         RAISE;
6973 
6974      WHEN OTHERS THEN
6975 
6976         IF (is_debug_exception_on) THEN
6977             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
6978                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
6979         END IF;
6980 
6981         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_CALC_OPTIONS', itemtype, itemkey, actid, funcmode);
6982         RAISE;
6983 
6984     END CHECK_CALC_OPTIONS;
6985 
6986 
6987   -- Start of comments
6988   --
6989   -- Procedure Name : validate_manual_quote_req
6990   -- Description    : Validates quote id on entry to Workflow
6991   --                  and gets merge field for notification message.
6992   --                : MDOKAL 20-MAR-2003
6993   --                : Modified procedure, no longer obtains notification
6994   --                  message details.
6995   -- Business Rules :
6996   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
6997   -- Version     : 1.1
6998   --
6999   -- End of comments
7000   PROCEDURE VALIDATE_MANUAL_QUOTE_REQ( itemtype IN  VARCHAR2,
7001                 itemkey   IN  VARCHAR2,
7002                    actid     IN  NUMBER,
7003                    funcmode IN  VARCHAR2,
7004                 resultout OUT NOCOPY VARCHAR2) IS
7005 
7006 
7007     -- MDOKAL,  20-MAR-2003 BUG 2862254
7008     -- Modified cursor to retrieve only header details as the HTML body is now
7009     -- created in a separate procedure 'pop_oklamnmq_doc', now handled as a
7010     -- PL/SQL Document.
7011 
7012     -- Check quote exists
7013     CURSOR  get_quote_csr  ( p_qte_id   IN NUMBER)
7014     IS
7015     SELECT  trx.QUOTE_NUMBER
7016     ,       khr.short_description contract_name
7017     ,       khr.contract_number
7018     ,       trx.last_updated_by
7019     ,       trx.date_requested
7020     ,       decode(trx.QTP_CODE, 'TER_PURCHASE', 'Y', 'N') PURCHASE_ASSET
7021     ,       nvl(early_termination_yn, 'N') EOT
7022     ,       decode(nvl(partial_yn, 'N'), 'N', 'Y', 'N') COMPLETE_CONTRACT
7023     FROM    OKL_TRX_QUOTES_V trx,
7024             OKC_K_HEADERS_V khr
7025     WHERE   trx.id = p_qte_id
7026     and     trx.QST_CODE = 'DRAFTED'
7027     and     trx.khr_id  = khr.id;
7028 
7029     r_qte_details   get_quote_csr%rowtype;
7030 
7031     l_user_name   WF_USERS.name%type;
7032     l_name        WF_USERS.description%type;
7033 
7034     l_quote_id    NUMBER;
7035   -- for debug logging
7036     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_manual_quote_req';
7037     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7038     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7039     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7040   BEGIN
7041 
7042    IF (is_debug_procedure_on) THEN
7043        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7044    END IF;
7045 
7046     --
7047     -- RUN mode
7048     --
7049     IF (funcmode = 'RUN') THEN
7050 
7051         l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
7052                                itemkey  => itemkey,
7053                             aname    => 'TRANSACTION_ID');
7054 
7055         wf_engine.SetItemAttrText (
7056                                 itemtype=> itemtype,
7057                     itemkey => itemkey,
7058                     aname   => 'MESSAGE_DOC',
7059                               avalue  => 'plsql:okl_am_quotes_wf.pop_oklamnmq_doc/'||l_quote_id);
7060 
7061         OPEN get_quote_csr(l_quote_id);
7062         FETCH get_quote_csr INTO r_qte_details;
7063         CLOSE get_quote_csr;
7064 
7065         okl_am_wf.get_notification_agent(
7066                                 itemtype   => itemtype
7067                            , itemkey     => itemkey
7068                            , actid       => actid
7069                            , funcmode   => funcmode
7070                               , p_user_id     => r_qte_details.last_updated_by
7071                               , x_name     => l_user_name
7072                            , x_description => l_name);
7073 
7074         wf_engine.SetItemAttrText ( itemtype=> itemtype,
7075                     itemkey => itemkey,
7076                     aname   => 'REQUESTER',
7077                              avalue  => l_user_name);
7078 
7079         wf_engine.SetItemAttrText (
7080                                 itemtype=> itemtype,
7081                     itemkey => itemkey,
7082                     aname   => 'QUOTE_NUMBER',
7083                               avalue  => r_qte_details.quote_number);
7084 
7085         wf_engine.SetItemAttrText (
7086                                 itemtype=> itemtype,
7087                     itemkey => itemkey,
7088                     aname   => 'CONTRACT_NUMBER',
7089                               avalue  => r_qte_details.contract_number);
7090 
7091         wf_engine.SetItemAttrText (
7092                                 itemtype=> itemtype,
7093                     itemkey => itemkey,
7094                     aname   => 'CONTRACT_NAME',
7095                               avalue  => r_qte_details.contract_name);
7096 
7097         IF l_user_name IS NOT NULL THEN
7098             resultout := 'COMPLETE:VALID';
7099         ELSE
7100             resultout := 'COMPLETE:INVALID';
7101         END IF;
7102     END IF;
7103     RETURN ;
7104 
7105     --
7106     -- CANCEL mode
7107     --
7108     IF (funcmode = 'CANCEL') THEN
7109       --
7110       resultout := 'COMPLETE:';
7111       RETURN;
7112       --
7113     END IF;
7114 
7115     --
7116     -- TIMEOUT mode
7117     --
7118     IF (funcmode = 'TIMEOUT') THEN
7119       --
7120       resultout := 'COMPLETE:';
7121       RETURN;
7122       --
7123     END IF;
7124 
7125    IF (is_debug_procedure_on) THEN
7126        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7127    END IF;
7128 
7129   EXCEPTION
7130      WHEN OTHERS THEN
7131 
7132         IF (is_debug_exception_on) THEN
7133             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7134                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7135         END IF;
7136 
7137         IF get_quote_csr%ISOPEN THEN
7138            CLOSE get_quote_csr;
7139         END IF;
7140 
7141         WF_CORE.context('OKL_AM_QUOTES_WF' , 'validate_quote_approval',
7142                         itemtype, itemkey, actid, funcmode);
7143         RAISE;
7144 
7145   END VALIDATE_MANUAL_QUOTE_REQ;
7146 
7147   -- Start of comments
7148   --
7149   -- Procedure Name : VALIDATE_ACCEPT_REST_QTE
7150   -- Description    : Validates quote id on entry to Workflow
7151   -- Business Rules :
7152   -- Parameters     : itemtype, itemkey, actid, funcmode, resultout
7153   -- Version     : 1.0
7154   --
7155   -- End of comments
7156   PROCEDURE VALIDATE_ACCEPT_REST_QTE( itemtype IN  VARCHAR2,
7157                 itemkey   IN  VARCHAR2,
7158                    actid     IN  NUMBER,
7159                    funcmode IN  VARCHAR2,
7160                 resultout OUT NOCOPY VARCHAR2) IS
7161 
7162     -- Check quote exists an d is either DRAFTED or REJECTED
7163   -- nikshah -- Bug # 5484903 Fixed,
7164   -- Changed CURSOR get_quote_csr SQL definition
7165     CURSOR  get_quote_csr  ( p_qte_id   IN VARCHAR2)
7166     IS
7167     SELECT  a.last_updated_by, a.quote_number
7168     FROM    OKL_TRX_QUOTES_B a,
7169             okl_quote_parties b
7170     WHERE   a.id = p_qte_id
7171     and     a.qst_code in ('ACCEPTED')
7172     and     b.qte_id (+) = a.id;
7173 
7174     l_last_updated_by               NUMBER;
7175     l_quote_id                      VARCHAR2(200);
7176 
7177     l_user_name   WF_USERS.name%type;
7178     l_name        WF_USERS.description%type;
7179 
7180  l_quote_number  VARCHAR2(100);
7181   -- for debug logging
7182     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_accept_rest_qte';
7183     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7184     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7185     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7186   BEGIN
7187 
7188    IF (is_debug_procedure_on) THEN
7189        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7190    END IF;
7191 
7192     --
7193     -- RUN mode
7194     --
7195     IF (funcmode = 'RUN') THEN
7196 
7197       l_quote_id := WF_ENGINE.GetItemAttrText( itemtype => itemtype,
7198                             itemkey  => itemkey,
7199                           aname   => 'TRANSACTION_ID');
7200 
7201       OPEN  get_quote_csr(l_quote_id);
7202       FETCH get_quote_csr INTO l_last_updated_by, l_quote_number;
7203       CLOSE get_quote_csr;
7204 
7205       okl_am_wf.get_notification_agent(
7206                                 itemtype   => itemtype
7207                            , itemkey     => itemkey
7208                            , actid       => actid
7209                            , funcmode   => funcmode
7210                               , p_user_id     => l_last_updated_by
7211                               , x_name     => l_user_name
7212                            , x_description => l_name);
7213       -- Check that a quote id is returned for the TRANSACTION_ID given.
7214 
7215   IF l_last_updated_by IS NOT NULL AND l_user_name IS NOT NULL THEN
7216 
7217              wf_engine.SetItemAttrText ( itemtype=> itemtype,
7218                     itemkey => itemkey,
7219                     aname   => 'REQUESTER',
7220                              avalue  => l_user_name);
7221 
7222              wf_engine.SetItemAttrText ( itemtype=> itemtype,
7223                     itemkey => itemkey,
7224                     aname   => 'WF_ADMINISTRATOR',
7225                               avalue  => l_user_name);
7226 
7227              wf_engine.SetItemAttrText ( itemtype=> itemtype,
7228                     itemkey => itemkey,
7229                     aname   => 'QUOTE_NUMBER',
7230                              avalue  => l_quote_number);
7231 
7232             resultout := 'COMPLETE:VALID';
7233          ELSE
7234             resultout := 'COMPLETE:INVALID';
7235          END IF;
7236 
7237       RETURN ;
7238     END IF;
7239 
7240     --
7241     -- CANCEL mode
7242     --
7243     IF (funcmode = 'CANCEL') THEN
7244       --
7245       resultout := 'COMPLETE:';
7246       RETURN;
7247       --
7248     END IF;
7249 
7250     --
7251     -- TIMEOUT mode
7252     --
7253     IF (funcmode = 'TIMEOUT') THEN
7254       --
7255       resultout := 'COMPLETE:';
7256       RETURN;
7257       --
7258     END IF;
7259 
7260    IF (is_debug_procedure_on) THEN
7261        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7262    END IF;
7263 
7264   EXCEPTION
7265 
7266      WHEN OTHERS THEN
7267 
7268         IF (is_debug_exception_on) THEN
7269             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7270                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7271         END IF;
7272 
7273         IF get_quote_csr%ISOPEN THEN
7274            CLOSE get_quote_csr;
7275         END IF;
7276 
7277         WF_CORE.context('OKL_AM_QUOTES_WF' , 'VALIDATE_ACCEPT_REST_QTE',
7278                         itemtype, itemkey, actid, funcmode);
7279         RAISE;
7280 
7281   END VALIDATE_ACCEPT_REST_QTE;
7282 
7283 
7284   -- Start of comments
7285   --
7286   -- Procedure Name : set_quote_approved_yn
7287   -- Description :
7288   -- Business Rules :
7289   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7290   -- Version  : 1.0
7291   --
7292   -- End of comments
7293   PROCEDURE set_rest_qte_approved_yn( itemtype   IN VARCHAR2,
7294                                  itemkey    IN VARCHAR2,
7295                       actid  IN NUMBER,
7296                        funcmode IN VARCHAR2,
7297                      resultout OUT NOCOPY VARCHAR2 ) AS
7298 
7299 
7300     l_id            VARCHAR2(100);
7301     l_approved      VARCHAR2(1);
7302 
7303     x_return_status VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
7304     x_msg_count     NUMBER;
7305     x_msg_data      VARCHAR2(2000);
7306     p_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
7307     x_qtev_rec      OKL_QTE_PVT.qtev_rec_type;
7308     p_api_version   NUMBER       := 1;
7309     p_init_msg_list VARCHAR2(1)  := FND_API.G_TRUE;
7310 
7311     API_ERROR       EXCEPTION;
7312 
7313     l_notify_response VARCHAR2(30);
7314 -- for debug logging
7315     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_rest_qte_approved_yn';
7316     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7317     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7318     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7319   BEGIN
7320 
7321    IF (is_debug_procedure_on) THEN
7322        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7323    END IF;
7324 
7325     IF (funcmode = 'RUN') THEN
7326         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
7327                         itemkey => itemkey,
7328                       aname   => 'TRANSACTION_ID');
7329 
7330 
7331         l_approved := wf_engine.GetItemAttrText( itemtype => itemtype,
7332                         itemkey => itemkey,
7333                       aname   => 'APPROVED_YN');
7334 
7335         -- Set the quote status to REJECTED if the approval is declined
7336         -- else set to 'APPROVED'
7337         IF nvl(l_approved, 'Y') = 'N' THEN
7338             p_qtev_rec.QST_CODE := 'REJECTED';
7339         ELSE
7340             p_qtev_rec.QST_CODE := 'APPROVED';
7341             p_qtev_rec.DATE_APPROVED := SYSDATE;
7342         END IF;
7343 
7344         p_qtev_rec.ID := to_number(l_id);
7345 
7346         p_qtev_rec.APPROVED_YN := nvl(l_approved, 'Y');
7347 
7348         okl_qte_pvt.update_row( p_api_version    => p_api_version,
7349                                 p_init_msg_list  => p_init_msg_list,
7350                                 x_return_status  => x_return_status,
7351                                 x_msg_count      => x_msg_count,
7352                                 x_msg_data       => x_msg_data,
7353                                 p_qtev_rec        => p_qtev_rec,
7354                                 x_qtev_rec        => x_qtev_rec);
7355 
7356    IF (is_debug_statement_on) THEN
7357        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
7358        'after call to okl_qte_pvt.update_row :'||x_return_status);
7359    END IF;
7360 
7361   IF x_return_status = OKC_API.G_RET_STS_SUCCESS THEN
7362             IF nvl(l_approved, 'Y') = 'Y' THEN
7363        resultout := 'COMPLETE:SUCCESS';
7364             ELSE
7365        resultout := 'COMPLETE:ERROR';
7366             END IF;
7367   ELSE
7368    RAISE API_ERROR;
7369   END IF;
7370 
7371         RETURN ;
7372     END IF;
7373 
7374     --
7375     -- CANCEL mode
7376     --
7377     IF (funcmode = 'CANCEL') THEN
7378       --
7379       resultout := 'COMPLETE:';
7380       RETURN;
7381       --
7382     END IF;
7383 
7384     --
7385     -- TIMEOUT mode
7386     --
7387     IF (funcmode = 'TIMEOUT') THEN
7388       --
7389       resultout := 'COMPLETE:';
7390       RETURN;
7391       --
7392     END IF;
7393 
7394    IF (is_debug_procedure_on) THEN
7395        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7396    END IF;
7397 
7398   EXCEPTION
7399 
7400      WHEN API_ERROR THEN
7401 
7402         IF (is_debug_exception_on) THEN
7403             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
7404         END IF;
7405 
7406         wf_core.context('OKL_AM_QUOTES_WF' , 'set_rest_qte_approved_yn', itemtype, itemkey, actid, funcmode);
7407         RAISE;
7408 
7409      WHEN OTHERS THEN
7410 
7411 
7412         IF (is_debug_exception_on) THEN
7413             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7414                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7415         END IF;
7416 
7417         wf_core.context('OKL_AM_QUOTES_WF' , 'set_rest_qte_approved_yn', itemtype, itemkey, actid, funcmode);
7418         RAISE;
7419 
7420   END set_rest_qte_approved_yn;
7421 
7422   -- Start of comments
7423   --
7424   -- Procedure Name : check_profile_recipient
7425   -- Description : check if the profile value for OKL_MANUAL_TERMINATION_QUOTE_REP
7426   --                  returns valid recipients.
7427   -- Business Rules :
7428   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7429   -- Version  : 1.0
7430   --
7431   -- End of comments
7432   PROCEDURE check_profile_recipient( itemtype   IN VARCHAR2,
7433                                  itemkey    IN VARCHAR2,
7434                       actid  IN NUMBER,
7435                        funcmode IN VARCHAR2,
7436                      resultout OUT NOCOPY VARCHAR2 ) AS
7437 
7438 
7439     l_id            VARCHAR2(100);
7440     l_performer     VARCHAR2(100);
7441     l_recipients    NUMBER;
7442 
7443     cursor c1_csr (p_value varchar)  is
7444        select count(*)
7445        from WF_USER_ROLES WUR
7446        where WUR.ROLE_NAME = p_value;
7447 
7448 -- for debug logging
7449     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_profile_recipient';
7450     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7451     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7452     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7453   BEGIN
7454 
7455    IF (is_debug_procedure_on) THEN
7456        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7457    END IF;
7458 
7459     IF (funcmode = 'RUN') THEN
7460         l_id := wf_engine.GetItemAttrText( itemtype => itemtype,
7461                         itemkey => itemkey,
7462                       aname   => 'TRANSACTION_ID');
7463 
7464         l_performer := rtrim(ltrim(fnd_profile.value('OKL_MANUAL_TERMINATION_QUOTE_REP')));
7465 
7466         wf_engine.SetItemAttrText( itemtype => itemtype,
7467                   itemkey  => itemkey,
7468                 aname    => 'PERFORMING_AGENT',
7469                                      avalue   => l_performer);
7470 
7471         OPEN c1_csr (l_performer);
7472         FETCH c1_csr INTO l_recipients;
7473         CLOSE c1_csr;
7474 
7475   IF l_recipients > 0 THEN
7476       resultout := 'COMPLETE:VALID';
7477         ELSE
7478       resultout := 'COMPLETE:INVALID';
7479         END IF;
7480 
7481         RETURN ;
7482     END IF;
7483 
7484     --
7485     -- CANCEL mode
7486     --
7487     IF (funcmode = 'CANCEL') THEN
7488       --
7489       resultout := 'COMPLETE:';
7490       RETURN;
7491       --
7492     END IF;
7493 
7494     --
7495     -- TIMEOUT mode
7496     --
7497     IF (funcmode = 'TIMEOUT') THEN
7498       --
7499       resultout := 'COMPLETE:';
7500       RETURN;
7501       --
7502     END IF;
7503 
7504    IF (is_debug_procedure_on) THEN
7505        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7506    END IF;
7507 
7508   EXCEPTION
7509 
7510      WHEN OTHERS THEN
7511 
7512 
7513         IF (is_debug_exception_on) THEN
7514             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7515                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7516         END IF;
7517         IF c1_csr%ISOPEN THEN
7518            CLOSE c1_csr;
7519         END IF;
7520 
7521         wf_core.context('OKL_AM_QUOTES_WF' , 'check_profile_recipient', itemtype, itemkey, actid, funcmode);
7522         RAISE;
7523 
7524   END check_profile_recipient;
7525 
7526 
7527   -- Start of comments
7528   --
7529   -- Procedure Name : pop_oklamnmq_doc
7530   -- Description : MDOKAL, 20-MAR-2003 Bug 2862254
7531   --                  This procedure is invoked dynamically by Workflow API's
7532   --                  in order to populate the message body item attribute
7533   --                  during notification submission.
7534   -- Business Rules :
7535   -- Parameters  : document_id, display_type, document, document_type
7536   -- Version  : 1.0
7537   --
7538   -- End of comments
7539   PROCEDURE pop_oklamnmq_doc (document_id   in varchar2,
7540                               display_type  in varchar2,
7541                               document      in out nocopy varchar2,
7542                               document_type in out nocopy varchar2) IS
7543 
7544 
7545     -- Check quote exists
7546     CURSOR  get_quote_csr  ( p_qte_id   IN NUMBER)
7547     IS
7548     SELECT  trx.QUOTE_NUMBER
7549     ,       khr.short_description contract_name
7550     ,       khr.contract_number
7551     ,       trx.last_updated_by
7552     ,       trx.date_requested
7553     ,       decode(trx.QTP_CODE, 'TER_PURCHASE', 'Y', 'N') PURCHASE_ASSET
7554     ,       nvl(early_termination_yn, 'N') EOT
7555     ,       decode(nvl(partial_yn, 'N'), 'N', 'Y', 'N') COMPLETE_CONTRACT
7556     ,       kle.ITEM_DESCRIPTION ASSET_NUMBER
7557     ,       txl.ASSET_QUANTITY ASSET_QUANTITY
7558     ,       txl.QUOTE_QUANTITY QUOTE_QUANTITY
7559     FROM    OKL_TRX_QUOTES_V trx,
7560             OKL_TXL_QUOTE_LINES_V txl,
7561             OKC_K_HEADERS_V khr,
7562             OKC_K_LINES_V   kle
7563     WHERE   trx.id = p_qte_id
7564     and     txl.qte_id (+) = trx.id
7565     and     trx.QST_CODE = 'DRAFTED'
7566     and     trx.khr_id  = khr.id
7567     and     txl.kle_id  = kle.id;
7568 
7569     r_qte_details   get_quote_csr%rowtype;
7570 
7571     l_user_name   WF_USERS.name%type;
7572     l_name        WF_USERS.description%type;
7573 
7574     l_quote_id    NUMBER;
7575 
7576     l_message        VARCHAR2(32000);
7577     l_header_done    BOOLEAN := FALSE;
7578 -- for debug logging
7579     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_oklamnmq_doc';
7580     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7581     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7582     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7583   BEGIN
7584 
7585    IF (is_debug_procedure_on) THEN
7586        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7587    END IF;
7588 
7589         l_quote_id := document_id;
7590 
7591         FOR r_qte_details in get_quote_csr(l_quote_id) LOOP
7592 
7593         IF NOT l_header_done THEN
7594 
7595             okl_am_wf.get_notification_agent(
7596                                 itemtype   => 'OKLAMNMQ'
7597                            , itemkey     => 'N/A'
7598                            , actid       => null
7599                            , funcmode   => 'RUN'
7600                               , p_user_id     => r_qte_details.last_updated_by
7601                               , x_name     => l_user_name
7602                            , x_description => l_name);
7603             l_message :=
7604                       '<p>Requestor: '||l_user_name||'</p>'||
7605                       '<p>A termination quote has been requested for Contract No. '||r_qte_details.contract_number||' on '||r_qte_details.date_requested||
7606                       ' with the following parameters:</p> '||
7607                       '<table width="25%">'||
7608                       '<tr><td>End of Term:</td><td>'||r_qte_details.eot||'</td></tr>'||
7609                       '<tr><td>Complete Contract:</td><td>'||r_qte_details.complete_contract||'</td></tr>'||
7610                       '<tr><td>Purchase Asset:</td><td>'||r_qte_details.purchase_asset||'</td></tr>'||
7611                       '</table>';
7612             IF r_qte_details.complete_contract = 'N' THEN
7613 
7614                l_message := l_message||'<p>Asset Details for Partial Contract:</p>'||
7615                       '<table width="50%" border="1">'||
7616                       '<tr>'||
7617                       '<td><b>Asset No.</b></td>'||
7618                       '<td><b>Asset Quantity</b></td>'||
7619                       '<td><b>Quote Quantity</b></td>'||
7620                       '</tr>';
7621             END IF;
7622 
7623             l_header_done := TRUE;
7624         END IF;
7625         IF r_qte_details.complete_contract = 'N' THEN
7626             l_message  :=  l_message||'<tr>'||
7627                                 '<td>'||r_qte_details.asset_number||'</td>'||
7628                                 '<td>'||r_qte_details.asset_quantity||'</td>'||
7629                                 '<td>'||r_qte_details.quote_quantity||'</td>'||
7630                                 '</tr>';
7631         END IF;
7632         END LOOP;
7633         IF r_qte_details.complete_contract = 'N' THEN
7634             l_message  :=  l_message||'</table>';
7635         END IF;
7636 
7637         document := l_message;
7638         document_type := display_type;
7639 
7640    IF (is_debug_procedure_on) THEN
7641        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7642    END IF;
7643 
7644         RETURN;
7645   EXCEPTION
7646      WHEN OTHERS THEN
7647 
7648         IF (is_debug_exception_on) THEN
7649             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7650                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7651         END IF;
7652 
7653         IF get_quote_csr%ISOPEN THEN
7654            CLOSE get_quote_csr;
7655         END IF;
7656 
7657   END pop_oklamnmq_doc;
7658 
7659   -- Start of comments
7660   --
7661   -- Procedure Name : pop_oklamppt_doc
7662   -- Description : MDOKAL, 21-MAR-2003 Bug 2862254
7663   --                  This procedure is invoked dynamically by Workflow API's
7664   --                  in order to populate the message body item attribute
7665   --                  during notification submission. Called from Termication
7666   --                  Quote Acceptance (OKLAMPPT)
7667   -- Business Rules :
7668   -- Parameters  : document_id, display_type, document, document_type
7669   -- Version  : 1.0
7670   --
7671   -- End of comments
7672   PROCEDURE pop_oklamppt_doc (document_id   in varchar2,
7673                               display_type  in varchar2,
7674                               document      in out nocopy varchar2,
7675                               document_type in out nocopy varchar2) IS
7676 
7677     l_message        VARCHAR2(32000);
7678 -- for debug logging
7679     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_oklamppt_doc';
7680     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7681     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7682     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7683   BEGIN
7684 
7685    IF (is_debug_procedure_on) THEN
7686        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7687    END IF;
7688 
7689         l_message := wf_engine.GetItemAttrText (
7690                                 itemtype            => 'OKLAMPPT',
7691                     itemkey             => document_id,
7692                     aname               => 'MESSAGE_DESCRIPTION');
7693 
7694         document := l_message;
7695         document_type := display_type;
7696 
7697    IF (is_debug_procedure_on) THEN
7698        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7699    END IF;
7700 
7701 	RETURN;
7702 
7703   EXCEPTION
7704      WHEN OTHERS THEN
7705 
7706         IF (is_debug_exception_on) THEN
7707             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7708                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7709         END IF;
7710      NULL;
7711 
7712   END pop_oklamppt_doc;
7713 
7714 
7715 
7716   -- Start of comments
7717   --
7718   -- Procedure Name : pop_external_approver_doc
7719   -- Description : MDOKAL, 15-APR-2003 Bug 2902588
7720   --                  This procedure is invoked dynamically by Workflow API's
7721   --                  in order to populate the message body item attribute
7722   --                  during notification submission. Called from Send Quote
7723   --                  (OKLAMNQT)
7724   -- Business Rules :
7725   -- Parameters  : document_id, display_type, document, document_type
7726   -- Version  : 1.0
7727   --
7728   -- End of comments
7729   PROCEDURE pop_external_approver_doc (document_id   in varchar2,
7730                               display_type  in varchar2,
7731                               document      in out nocopy varchar2,
7732                               document_type in out nocopy varchar2) IS
7733 
7734     l_message        VARCHAR2(32000);
7735 -- for debug logging
7736     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_external_approver_doc';
7737     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7738     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7739     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7740   BEGIN
7741 
7742    IF (is_debug_procedure_on) THEN
7743        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7744    END IF;
7745 
7746         l_message := wf_engine.GetItemAttrText (
7747                                 itemtype            => 'OKLAMNQT',
7748                     itemkey             => document_id,
7749                     aname               => 'EXTERNAL_APPROVER');
7750 
7751         document := l_message;
7752         document_type := display_type;
7753 
7754    IF (is_debug_procedure_on) THEN
7755        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7756    END IF;
7757 
7758         RETURN;
7759 
7760   EXCEPTION
7761      WHEN OTHERS THEN
7762 
7763         IF (is_debug_exception_on) THEN
7764             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7765                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7766         END IF;
7767 
7768      NULL;
7769 
7770   END pop_external_approver_doc;
7771 
7772   -- Start of comments
7773   --
7774   -- Procedure Name : update_partial_quote
7775   -- Description : Called from Send Quote (OKLAMNQT)
7776   -- Business Rules :
7777   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7778   -- Version  : 1.0
7779   --
7780   -- End of comments
7781   PROCEDURE update_partial_quote( itemtype   IN VARCHAR2,
7782                                  itemkey    IN VARCHAR2,
7783                       actid  IN NUMBER,
7784                        funcmode IN VARCHAR2,
7785                      resultout OUT NOCOPY VARCHAR2 ) AS
7786 
7787     l_approved      VARCHAR2(1);
7788 
7789 -- for debug logging
7790     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'update_partial_quote';
7791     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7792     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7793     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7794   BEGIN
7795 
7796    IF (is_debug_procedure_on) THEN
7797        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7798    END IF;
7799 
7800     IF (funcmode = 'RUN') THEN
7801 
7802         l_approved := wf_engine.GetItemAttrText( itemtype => itemtype,
7803                         itemkey => itemkey,
7804                       aname   => 'APPROVED_YN');
7805 
7806         IF nvl(l_approved, 'Y') = 'Y' THEN
7807        resultout := 'COMPLETE:APPROVED';
7808         ELSE
7809        resultout := 'COMPLETE:REJECTED';
7810         END IF;
7811 
7812         RETURN ;
7813     END IF;
7814 
7815     --
7816     -- CANCEL mode
7817     --
7818     IF (funcmode = 'CANCEL') THEN
7819       --
7820       resultout := 'COMPLETE:';
7821       RETURN;
7822       --
7823     END IF;
7824 
7825     --
7826     -- TIMEOUT mode
7827     --
7828     IF (funcmode = 'TIMEOUT') THEN
7829       --
7830       resultout := 'COMPLETE:';
7831       RETURN;
7832       --
7833     END IF;
7834 
7835    IF (is_debug_procedure_on) THEN
7836        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7837    END IF;
7838 
7839   EXCEPTION
7840 
7841      WHEN OTHERS THEN
7842 
7843         IF (is_debug_exception_on) THEN
7844             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7845                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7846         END IF;
7847 
7848         wf_core.context('OKL_AM_QUOTES_WF' , 'update_partial_quote', itemtype, itemkey, actid, funcmode);
7849         RAISE;
7850 
7851   END update_partial_quote;
7852 
7853   -- Start of comments
7854   --
7855   -- Procedure Name : update_gain_loss_quote
7856   -- Description : Called from Send Quote (OKLAMNQT)
7857   -- Business Rules :
7858   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7859   -- Version  : 1.0
7860   --
7861   -- End of comments
7862   PROCEDURE update_gain_loss_quote( itemtype   IN VARCHAR2,
7863                                  itemkey    IN VARCHAR2,
7864                       actid  IN NUMBER,
7865                        funcmode IN VARCHAR2,
7866                      resultout OUT NOCOPY VARCHAR2 ) AS
7867 
7868     l_approved      VARCHAR2(1);
7869 -- for debug logging
7870     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'update_gain_loss_quote';
7871     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7872     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7873     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7874 
7875   BEGIN
7876 
7877    IF (is_debug_procedure_on) THEN
7878        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7879    END IF;
7880 
7881     IF (funcmode = 'RUN') THEN
7882 
7883         l_approved := wf_engine.GetItemAttrText( itemtype => itemtype,
7884                         itemkey => itemkey,
7885                       aname   => 'APPROVED_YN');
7886 
7887         IF nvl(l_approved, 'Y') = 'Y' THEN
7888        resultout := 'COMPLETE:APPROVED';
7889         ELSE
7890        resultout := 'COMPLETE:REJECTED';
7891         END IF;
7892 
7893         RETURN ;
7894     END IF;
7895 
7896     --
7897     -- CANCEL mode
7898     --
7899     IF (funcmode = 'CANCEL') THEN
7900       --
7901       resultout := 'COMPLETE:';
7902       RETURN;
7903       --
7904     END IF;
7905 
7906     --
7907     -- TIMEOUT mode
7908     --
7909     IF (funcmode = 'TIMEOUT') THEN
7910       --
7911       resultout := 'COMPLETE:';
7912       RETURN;
7913       --
7914     END IF;
7915 
7916    IF (is_debug_procedure_on) THEN
7917        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
7918    END IF;
7919 
7920   EXCEPTION
7921 
7922      WHEN OTHERS THEN
7923 
7924         IF (is_debug_exception_on) THEN
7925             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
7926                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
7927         END IF;
7928 
7929         wf_core.context('OKL_AM_QUOTES_WF' , 'update_gain_loss_quote', itemtype, itemkey, actid, funcmode);
7930         RAISE;
7931 
7932   END update_gain_loss_quote;
7933 
7934   -- Start of comments
7935   --
7936   -- Procedure Name : chk_securitization
7937   -- Description : Called from Terminate Quote Acceptance (OKLAMPPT)
7938   --                  Bug 3082639
7939   -- Business Rules :
7940   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
7941   -- Version  : 1.0
7942   -- History        : rmunjulu EDAT Added code to pass quote dates to securitization API
7943   --
7944   -- End of comments
7945   PROCEDURE chk_securitization( itemtype   IN VARCHAR2,
7946                                  itemkey    IN VARCHAR2,
7947                       actid  IN NUMBER,
7948                        funcmode IN VARCHAR2,
7949                      resultout OUT NOCOPY VARCHAR2 ) AS
7950 
7951     l_quote_id      VARCHAR2(100);
7952 
7953  l_return_status  VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7954  l_api_version  CONSTANT NUMBER := 1;
7955     l_init_msg_list     VARCHAR2(1) := OKL_API.G_FALSE;
7956  l_msg_count      NUMBER  := OKL_API.G_MISS_NUM;
7957  l_msg_data      VARCHAR2(2000);
7958 
7959     API_ERROR           EXCEPTION;
7960 
7961 
7962     -- rmunjulu EDAT -- get quote dates
7963     CURSOR get_quote_values_csr (p_qte_id IN NUMBER) IS
7964        SELECT qte.date_effective_from,
7965               qte.date_accepted
7966        FROM   OKL_TRX_QUOTES_B  qte
7967        WHERE  qte.id = p_qte_id;
7968 
7969     l_quote_eff_date DATE;
7970     l_quote_accpt_date DATE;
7971   -- for debug logging
7972     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'chk_securitization';
7973     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
7974     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
7975     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
7976 
7977   BEGIN
7978 
7979    IF (is_debug_procedure_on) THEN
7980        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
7981    END IF;
7982 
7983     IF (funcmode = 'RUN') THEN
7984 
7985         l_quote_id := wf_engine.GetItemAttrText( itemtype   => itemtype,
7986                               itemkey => itemkey,
7987                             aname   => 'TRANSACTION_ID');
7988 
7989         -- rmunjulu EDAT Added to get quote dates which are now passed to securitization API
7990         OPEN get_quote_values_csr (l_quote_id);
7991         FETCH get_quote_values_csr INTO l_quote_eff_date, l_quote_accpt_date;
7992         CLOSE get_quote_values_csr;
7993 
7994         -- call the securitization API to check for securitized components
7995         -- on the quote. If found create investor disbursements
7996         OKL_AM_SECURITIZATION_PVT.process_securitized_streams(
7997             p_api_version  => l_api_version,
7998             p_init_msg_list  => l_init_msg_list,
7999             x_return_status  => l_return_status,
8000             x_msg_count   => l_msg_count,
8001             x_msg_data   => l_msg_data,
8002             p_quote_id   => l_quote_id,
8003             p_effective_date    => l_quote_eff_date,   -- rmunjulu EDAT Added
8004             p_transaction_date  => l_quote_accpt_date, -- rmunjulu EDAT Added
8005             p_call_origin       => OKL_SECURITIZATION_PVT.G_TRX_REASON_EARLY_TERMINATION);
8006 
8007    IF (is_debug_statement_on) THEN
8008        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
8009        'after call to OKL_AM_SECURITIZATION_PVT.process_securitized_streams :'||l_return_status);
8010    END IF;
8011 
8012         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8013             RAISE API_ERROR;
8014         END IF;
8015 
8016         RETURN ;
8017     END IF;
8018 
8019     --
8020     -- CANCEL mode
8021     --
8022     IF (funcmode = 'CANCEL') THEN
8023       --
8024       resultout := 'COMPLETE:';
8025       RETURN;
8026       --
8027     END IF;
8028 
8029     --
8030     -- TIMEOUT mode
8031     --
8032     IF (funcmode = 'TIMEOUT') THEN
8033       --
8034       resultout := 'COMPLETE:';
8035       RETURN;
8036       --
8037     END IF;
8038 
8039    IF (is_debug_procedure_on) THEN
8040        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8041    END IF;
8042 
8043   EXCEPTION
8044 
8045      WHEN API_ERROR THEN
8046 
8047         IF (is_debug_exception_on) THEN
8048             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
8049         END IF;
8050 
8051         -- rmunjulu EDAT
8052         IF get_quote_values_csr%ISOPEN THEN
8053            CLOSE get_quote_values_csr;
8054         END IF;
8055 
8056         wf_core.context('OKL_AM_QUOTES_WF' , 'chk_securitization', itemtype, itemkey, actid, funcmode);
8057         RAISE;
8058 
8059      WHEN OTHERS THEN
8060         IF (is_debug_exception_on) THEN
8061             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8062                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8063         END IF;
8064         -- rmunjulu EDAT
8065         IF get_quote_values_csr%ISOPEN THEN
8066            CLOSE get_quote_values_csr;
8067         END IF;
8068 
8069         wf_core.context('OKL_AM_QUOTES_WF' , 'chk_securitization', itemtype, itemkey, actid, funcmode);
8070         RAISE;
8071 
8072   END chk_securitization;
8073 
8074   -- Start of comments
8075   --
8076   -- Procedure Name : update_partial_quote
8077   -- Description : Updates Quote status to Drafted when Check_if_Quote_gain_loss ends in STOP
8078   -- Business Rules :
8079   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
8080   -- Version  : 1.0
8081   -- History            : RKUTTIYA created for Bug: 2794685
8082   -- End of comments
8083 
8084   PROCEDURE update_quote_drafted(itemtype   IN VARCHAR2,
8085                                  itemkey    IN VARCHAR2,
8086                       actid  IN NUMBER,
8087                        funcmode IN VARCHAR2,
8088                      resultout OUT NOCOPY VARCHAR2) AS
8089 
8090     l_transaction_id            VARCHAR2(2000);
8091     l_api_version               NUMBER := 1;
8092     lx_msg_count                NUMBER;
8093     lx_msg_data                 VARCHAR2(2000);
8094     l_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8095     lp_qtev_rec                 OKL_TRX_QUOTES_PUB.qtev_rec_type;
8096     lx_qtev_rec                 OKL_TRX_QUOTES_PUB.qtev_rec_type;
8097     l_quote_status              VARCHAR2(200) := 'DRAFTED';--'OKL_QUOTE_STATUS'
8098 -- for debug logging
8099     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'update_quote_drafted';
8100     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8101     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8102     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
8103   BEGIN
8104 
8105    IF (is_debug_procedure_on) THEN
8106        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8107    END IF;
8108 
8109     --
8110     -- RUN mode
8111     --
8112     IF (funcmode = 'RUN') THEN
8113       --get attr for transaction id which is the quote id for quote WFs
8114       l_transaction_id := WF_ENGINE.GetItemAttrText(
8115                                            itemtype => itemtype,
8116                         itemkey => itemkey,
8117                       aname    => 'TRANSACTION_ID');
8118 
8119       -- set the qtev_rec_type of quote header
8120       lp_qtev_rec.id                    :=    TO_NUMBER(l_transaction_id);
8121       lp_qtev_rec.qst_code              :=    l_quote_status;
8122 
8123       -- Call the update of the quote header api
8124       OKL_TRX_QUOTES_PUB.update_trx_quotes (
8125            p_api_version                  => l_api_version,
8126            p_init_msg_list                => OKL_API.G_FALSE,
8127            x_return_status                => l_return_status,
8128            x_msg_count                    => lx_msg_count,
8129            x_msg_data                     => lx_msg_data,
8130            p_qtev_rec                     => lp_qtev_rec,
8131            x_qtev_rec                     => lx_qtev_rec);
8132 
8133    IF (is_debug_statement_on) THEN
8134        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
8135        'after call to  OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
8136    END IF;
8137 
8138       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8139         RAISE G_EXCEPTION;
8140       ELSE
8141         resultout := 'COMPLETE:';
8142       END IF;
8143       RETURN ;
8144     END IF;
8145 
8146     --
8147     -- CANCEL mode
8148     --
8149     IF (funcmode = 'CANCEL') THEN
8150       --
8151       resultout := 'COMPLETE:';
8152       RETURN;
8153       --
8154     END IF;
8155 
8156     --
8157     -- TIMEOUT mode
8158     --
8159     IF (funcmode = 'TIMEOUT') THEN
8160       --
8161       resultout := 'COMPLETE:';
8162       RETURN;
8163       --
8164     END IF;
8165 
8166    IF (is_debug_procedure_on) THEN
8167        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8168    END IF;
8169 
8170   EXCEPTION
8171      WHEN G_EXCEPTION THEN
8172 
8173         IF (is_debug_exception_on) THEN
8174             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
8175         END IF;
8176 
8177         WF_CORE.context('OKL_AM_QUOTES_WF' , 'update_quote_status',
8178                         itemtype, itemkey, actid, funcmode);
8179         RAISE;
8180      WHEN OTHERS THEN
8181         IF (is_debug_exception_on) THEN
8182             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8183                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8184         END IF;
8185 
8186         WF_CORE.context('OKL_AM_QUOTES_WF' , 'update_quote_status',
8187                         itemtype, itemkey, actid, funcmode);
8188         RAISE;
8189 
8190 
8191    END update_quote_drafted;
8192 
8193   -- Start of comments
8194   --
8195   -- Procedure Name : set_message
8196   -- Desciption     : Sets the message with tokens
8197   --                  Does NOT put the message on the message stack
8198   --                  This set_message is used instead of the standard OKL_API.set_message
8199   --                  because the OKL_API.set_message puts the message on message stack after
8200   --                  which it cannot be retrieved using FND_MESSAGE.get
8201   -- Business Rules :
8202   -- Parameters     :
8203   -- Version  : 1.0
8204   -- History        : RMUNJULU created 4131592
8205   --
8206   -- End of comments
8207   PROCEDURE set_message (
8208  p_app_name  IN VARCHAR2 DEFAULT 'OKL',
8209  p_msg_name  IN VARCHAR2,
8210  p_token1  IN VARCHAR2 DEFAULT NULL,
8211  p_token1_value IN VARCHAR2 DEFAULT NULL,
8212  p_token2  IN VARCHAR2 DEFAULT NULL,
8213  p_token2_value IN VARCHAR2 DEFAULT NULL,
8214  p_token3  IN VARCHAR2 DEFAULT NULL,
8215  p_token3_value IN VARCHAR2 DEFAULT NULL,
8216  p_token4  IN VARCHAR2 DEFAULT NULL,
8217  p_token4_value IN VARCHAR2 DEFAULT NULL,
8218  p_token5  IN VARCHAR2 DEFAULT NULL,
8219  p_token5_value IN VARCHAR2 DEFAULT NULL,
8220  p_token6  IN VARCHAR2 DEFAULT NULL,
8221  p_token6_value IN VARCHAR2 DEFAULT NULL,
8222  p_token7  IN VARCHAR2 DEFAULT NULL,
8223  p_token7_value IN VARCHAR2 DEFAULT NULL,
8224  p_token8  IN VARCHAR2 DEFAULT NULL,
8225  p_token8_value IN VARCHAR2 DEFAULT NULL,
8226  p_token9  IN VARCHAR2 DEFAULT NULL,
8227  p_token9_value IN VARCHAR2 DEFAULT NULL,
8228  p_token10  IN VARCHAR2 DEFAULT NULL,
8229  p_token10_value IN VARCHAR2 DEFAULT NULL ) IS
8230 
8231 -- for debug logging
8232     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_message';
8233     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8234     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8235   BEGIN
8236 
8237    IF (is_debug_procedure_on) THEN
8238        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8239    END IF;
8240 
8241  FND_MESSAGE.set_name( P_APP_NAME, P_MSG_NAME);
8242 
8243  IF (p_token1 IS NOT NULL) AND (p_token1_value IS NOT NULL) THEN
8244   FND_MESSAGE.set_token( TOKEN  => p_token1,
8245                  VALUE  => p_token1_value);
8246  END IF;
8247 
8248  IF (p_token2 IS NOT NULL) AND (p_token2_value IS NOT NULL) THEN
8249   FND_MESSAGE.set_token( TOKEN  => p_token2,
8250                  VALUE  => p_token2_value);
8251  END IF;
8252 
8253  IF (p_token3 IS NOT NULL) AND (p_token3_value IS NOT NULL) THEN
8254   FND_MESSAGE.set_token( TOKEN  => p_token3,
8255                  VALUE  => p_token3_value);
8256  END IF;
8257 
8258  IF (p_token4 IS NOT NULL) AND (p_token4_value IS NOT NULL) THEN
8259   FND_MESSAGE.set_token( TOKEN  => p_token4,
8260                  VALUE  => p_token4_value);
8261  END IF;
8262 
8263  IF (p_token5 IS NOT NULL) AND (p_token5_value IS NOT NULL) THEN
8264   FND_MESSAGE.set_token( TOKEN  => p_token5,
8265                  VALUE  => p_token5_value);
8266  END IF;
8267 
8268  IF (p_token6 IS NOT NULL) AND (p_token6_value IS NOT NULL) THEN
8269   FND_MESSAGE.set_token( TOKEN  => p_token6,
8270                  VALUE  => p_token6_value);
8271  END IF;
8272  IF (p_token7 IS NOT NULL) AND (p_token7_value IS NOT NULL) THEN
8273   FND_MESSAGE.set_token( TOKEN  => p_token7,
8274                  VALUE  => p_token7_value);
8275  END IF;
8276 
8277  IF (p_token8 IS NOT NULL) AND (p_token8_value IS NOT NULL) THEN
8278   FND_MESSAGE.set_token( TOKEN  => p_token8,
8279                  VALUE  => p_token8_value);
8280  END IF;
8281  IF (p_token9 IS NOT NULL) AND (p_token9_value IS NOT NULL) THEN
8282   FND_MESSAGE.set_token( TOKEN  => p_token9,
8283                  VALUE  => p_token9_value);
8284  END IF;
8285 
8286  IF (p_token10 IS NOT NULL) AND (p_token10_value IS NOT NULL) THEN
8287   FND_MESSAGE.set_token( TOKEN  => p_token10,
8288                  VALUE  => p_token10_value);
8289  END IF;
8290 
8291  --FND_MSG_PUB.add;
8292     IF (is_debug_procedure_on) THEN
8293        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8294    END IF;
8295 
8296   END set_message;
8297 
8298   -- Start of comments
8299   --
8300   -- Procedure Name : check_rollover_amount
8301   -- Description : Checks if Rollover Quote and if base amount > 0
8302   -- Business Rules :
8303   -- Parameters  : itemtype, itemkey, actid, funcmode, resultout
8304   -- Version  : 1.0
8305   -- History        : rmunjulu created for Bug: 4131592
8306   -- End of comments
8307   PROCEDURE check_rollover_amount(
8308                                     itemtype    IN  VARCHAR2,
8309                                     itemkey   IN  VARCHAR2,
8310                                     actid       IN  NUMBER,
8311                                     funcmode IN  VARCHAR2,
8312                                     resultout OUT NOCOPY VARCHAR2) IS
8313     -- Get the quote details
8314     CURSOR c_qte_csr(c_id NUMBER) IS
8315     SELECT  khr_id, qtp_code,last_updated_by
8316     FROM    OKL_TRX_QUOTES_B
8317     WHERE   id = c_id;
8318 
8319     -- Get the quote BASE amount
8320     CURSOR c_qtl_csr(c_id NUMBER) IS
8321     SELECT sum(amount) amount
8322     FROM   OKL_TXL_QUOTE_LINES_B
8323     WHERE  qte_id =c_id
8324     AND    qlt_code NOT IN ('AMCFIA','AMYOUB','BILL_ADJST');
8325 
8326     l_return_status     VARCHAR2(1)  := OKL_API.G_RET_STS_SUCCESS;
8327 
8328     l_result VARCHAR2(50) := 'COMPLETE:NO';
8329 
8330     l_last_updated_by    NUMBER;
8331     l_user_name          VARCHAR2(200);
8332     l_name               VARCHAR2(200);
8333     l_amount        NUMBER;
8334     l_id         NUMBER;
8335     l_khr_id        NUMBER;
8336     l_qtp_code      VARCHAR2(30);
8337     l_roll_message_header VARCHAR2(350);
8338 -- for debug logging
8339     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_rollover_amount';
8340     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8341     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8342     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
8343   BEGIN
8344 
8345    IF (is_debug_procedure_on) THEN
8346        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8347    END IF;
8348 
8349     IF (funcmode = 'RUN') THEN
8350 
8351         l_id := wf_engine.GetItemAttrText(
8352                        itemtype => itemtype,
8353         itemkey  => itemkey,
8354         aname    => 'TRANSACTION_ID');
8355 
8356         OPEN c_qte_csr(l_id);
8357         FETCH c_qte_csr INTO l_khr_id, l_qtp_code,l_last_updated_by;
8358         CLOSE c_qte_csr;
8359 
8360         IF l_qtp_code like ('TER_ROLL%') THEN
8361 
8362            OPEN  c_qtl_csr (l_id);
8363            FETCH c_qtl_csr INTO l_amount;
8364            CLOSE c_qtl_csr;
8365 
8366            IF l_amount IS NULL THEN
8367               l_amount := 0;
8368            END IF;
8369 
8370            IF l_amount <= 0 THEN
8371               l_result := 'COMPLETE:STOP';
8372            ELSE
8373               l_result := 'COMPLETE:YES';
8374            END IF;
8375 
8376            IF l_result = 'COMPLETE:STOP' THEN
8377 
8378 -- Rollover Quote Amount Approval.
8379               -- Get the proper message from Seed
8380               set_message(
8381                    p_app_name     => 'OKL',
8382                    p_msg_name     => 'OKL_AM_ROLL_HDR_MSG');
8383 
8384               l_roll_message_header := FND_MESSAGE.get;
8385 
8386               wf_engine.SetItemAttrText (
8387                               itemtype=> itemtype,
8388                   itemkey => itemkey,
8389                   aname   => 'MESSAGE_HEADER',
8390                             avalue  => l_roll_message_header);
8391 
8392               --Set notification body
8393               wf_engine.SetItemAttrText (
8394                               itemtype=> itemtype,
8395                   itemkey => itemkey,
8396                   aname   => 'MESSAGE_DOC',
8397                             avalue  => 'plsql:okl_am_quotes_wf.pop_roll_notification/'||l_id);
8398 
8399               --get the name of requestor
8400               okl_am_wf.get_notification_agent(
8401                            itemtype           => itemtype
8402                          , itemkey            => itemkey
8403                          , actid           => actid
8404                          , funcmode           => funcmode
8405                          , p_user_id          => l_last_updated_by
8406                          , x_name             => l_user_name
8407                          , x_description      => l_name);
8408 
8409               --set the value for item attribute 'REQUESTER'
8410               wf_engine.SetItemAttrText (
8411                                itemtype    => itemtype,
8412                    itemkey     => itemkey,
8413                    aname       => 'REQUESTER',
8414                             avalue      => l_user_name);
8415             END IF;
8416         ELSE
8417               l_result := 'COMPLETE:YES';
8418         END IF;
8419 
8420         resultout := l_result;
8421 
8422         RETURN;
8423     END IF;
8424 
8425    IF (is_debug_procedure_on) THEN
8426        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8427    END IF;
8428 
8429   EXCEPTION
8430 
8431      WHEN OTHERS THEN
8432         IF (is_debug_exception_on) THEN
8433             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8434                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8435         END IF;
8436         IF c_qte_csr%ISOPEN THEN
8437            CLOSE c_qte_csr;
8438         END IF;
8439         IF c_qtl_csr%ISOPEN THEN
8440            CLOSE c_qtl_csr;
8441         END IF;
8442         wf_core.context('OKL_AM_QUOTES_WF' , 'check_rollover_amount', itemtype, itemkey, actid, funcmode);
8443         RAISE;
8444 
8445   END check_rollover_amount;
8446 
8447   -- Start of comments
8448   --
8449   -- Procedure Name : pop_roll_notification
8450   -- Description : Populates the rollover notification message
8451   -- Business Rules :
8452   -- Parameters  : document_id,display_type, document, document_type
8453   -- Version  : 1.0
8454   -- History        : rmunjulu created for Bug: 4131592
8455   -- End of comments
8456   PROCEDURE pop_roll_notification (document_id   IN VARCHAR2,
8457                                    display_type  IN VARCHAR2,
8458                                    document      IN OUT NOCOPY VARCHAR2,
8459                                    document_type IN OUT NOCOPY VARCHAR2) IS
8460 
8461     -- Cursor to obtain quote and contract details
8462     CURSOR  l_quote_csr  ( p_qte_id   IN NUMBER) IS
8463     SELECT  TRX.ID,
8464             TRX.QUOTE_NUMBER,
8465             TRX.KHR_ID,
8466             TRX.QTP_CODE,
8467             KHR.CONTRACT_NUMBER
8468     FROM    OKL_TRX_QUOTES_B TRX,
8469             OKC_K_HEADERS_B KHR
8470     WHERE   TRX.id = p_qte_id
8471     AND     TRX.KHR_ID = KHR.ID;
8472 
8473     -- Cursor to obtain quote amount
8474     CURSOR  l_quote_amt_csr  ( p_qte_id   IN NUMBER) IS
8475     SELECT  nvl(SUM(amount),0) amount
8476     FROM    OKL_TXL_QUOTE_LINES_B TQL
8477     WHERE   TQL.qte_id = p_qte_id
8478     AND     TQL.qlt_code NOT IN ('AMCFIA','AMYOUB','BILL_ADJST');
8479 
8480 
8481     l_quote_rec         l_quote_csr%rowtype;
8482     l_quote_amt_rec     l_quote_amt_csr%rowtype;
8483     l_quote_id          NUMBER;
8484     l_message           VARCHAR2(32000);
8485     l_pos               NUMBER;
8486     l_noti_msg          VARCHAR2(32000);
8487     l_currency_code     VARCHAR2(200);
8488 -- for debug logging
8489     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'pop_roll_notification';
8490     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8491     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8492 
8493   BEGIN
8494 
8495    IF (is_debug_procedure_on) THEN
8496        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8497    END IF;
8498 
8499         --get the parameters from document id
8500         l_quote_id   := TO_NUMBER(document_id);
8501 
8502         --get quote and contract details
8503         OPEN l_quote_csr(l_quote_id);
8504         FETCH l_quote_csr INTO l_quote_rec;
8505         CLOSE l_quote_csr;
8506 
8507         --get quote amount
8508         OPEN l_quote_amt_csr(l_quote_id);
8509         FETCH l_quote_amt_csr INTO l_quote_amt_rec;
8510         CLOSE l_quote_amt_csr;
8511 
8512         -- Get the Currency Code
8513         l_currency_code  := OKL_AM_UTIL_PVT.get_chr_currency(l_quote_rec.khr_id);
8514 
8515 -- The termination quote approval process for Contract Number, Quote Number has resulted in error.
8516 -- The quote base amount is amount which is less than or equal to 0.
8517 -- Please verify and change the quote amounts and re-submit the quote for approval.
8518         -- Get the proper message from Seed
8519         set_message(
8520                    p_app_name     => 'OKL',
8521                    p_msg_name     => 'OKL_AM_ROLL_NOTI_MSG',
8522                    p_token1       => 'CONTRACT_NUMBER',
8523                    p_token1_value => l_quote_rec.contract_number,
8524                    p_token2       => 'QUOTE_NUMBER',
8525                    p_token2_value => l_quote_rec.quote_number,
8526                    p_token3       => 'AMOUNT',
8527                    p_token3_value => l_quote_amt_rec.amount,
8528                    p_token4       => 'CURRENCY',
8529                    p_token4_value => l_currency_code);
8530 
8531         l_noti_msg := FND_MESSAGE.get;
8532 
8533         l_message :=  '<html><body><p>'||l_noti_msg||'</p></body></html>';
8534 
8535         document := l_message;
8536         document_type := display_type;
8537 
8538    IF (is_debug_procedure_on) THEN
8539        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8540    END IF;
8541 
8542         RETURN;
8543   EXCEPTION
8544      WHEN OTHERS THEN
8545 
8546         IF (is_debug_exception_on) THEN
8547             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8548                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8549         END IF;
8550 
8551         IF l_quote_csr%ISOPEN THEN
8552            CLOSE l_quote_csr;
8553         END IF;
8554 
8555         IF l_quote_amt_csr%ISOPEN THEN
8556            CLOSE l_quote_amt_csr;
8557         END IF;
8558 
8559         RETURN;
8560   END pop_roll_notification;
8561 
8562   --rkuttiya 12-Nov-07 added for Sprint 2 of Loans Repossession
8563    PROCEDURE check_if_repo_quote(itemtype IN VARCHAR2,
8564                                 itemkey  IN VARCHAR2,
8565                                 actid    IN NUMBER,
8566                                 funcmode IN VARCHAR2,
8567                                 resultout OUT NOCOPY VARCHAR2) IS
8568 
8569     CURSOR check_repo_csr(p_qte_id IN NUMBER) IS
8570     SELECT repo_quote_indicator_yn
8571     FROM OKL_TRX_QUOTES_B
8572     WHERE id = p_qte_id;
8573 
8574     l_id       NUMBER;
8575     l_repo_yn  VARCHAR2(1);
8576     lx_return_sts VARCHAR2(1);
8577 -- for debug logging
8578     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'check_if_repo_quote';
8579     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8580     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8581     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
8582    BEGIN
8583 
8584    IF (is_debug_procedure_on) THEN
8585        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8586    END IF;
8587 
8588      IF (funcmode = 'RUN') THEN
8589        l_id := wf_engine.GetItemAttrText(itemtype => itemtype,
8590                                          itemkey  => itemkey,
8591                                          aname    => 'TRANSACTION_ID');
8592 
8593 
8594        l_repo_yn := OKL_AM_CREATE_QUOTE_PVT.check_repo_quote(l_id,
8595                                                              lx_return_sts);
8596 
8597        IF lx_return_sts = OKL_API.G_RET_STS_SUCCESS THEN
8598          IF l_repo_yn = 'Y' THEN
8599             resultout := 'COMPLETE:Y';
8600          ELSIF NVL(l_repo_yn,'N') = 'N' THEN
8601             resultout := 'COMPLETE:N';
8602          END IF;
8603        ELSE
8604          RAISE G_EXCEPTION;
8605        END IF;
8606        RETURN;
8607      END IF;
8608 
8609    IF (is_debug_procedure_on) THEN
8610        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8611    END IF;
8612 
8613    EXCEPTION
8614       WHEN G_EXCEPTION THEN
8615         IF (is_debug_exception_on) THEN
8616             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
8617         END IF;
8618         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_REPO_QUOTE', itemtype,
8619                          itemkey, actid, funcmode);
8620        RAISE;
8621       WHEN OTHERS THEN
8622         IF (is_debug_exception_on) THEN
8623             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8624                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8625         END IF;
8626 
8627         wf_core.context('OKL_AM_QUOTES_WF' , 'CHECK_IF_REPO_QUOTE', itemtype,
8628                          itemkey, actid, funcmode);
8629         RAISE;
8630    END CHECK_IF_REPO_QUOTE;
8631 
8632 
8633    PROCEDURE create_repo_asset_return(itemtype IN VARCHAR2,
8634                                     itemkey  IN VARCHAR2,
8635                                     actid    IN NUMBER,
8636                                     funcmode IN VARCHAR2,
8637                                     resultout OUT NOCOPY VARCHAR2) IS
8638    CURSOR c_quote_assets_csr(p_qte_id IN NUMBER) IS
8639    SELECT kle_id, DATE_EFFECTIVE_FROM, CURRENCY_CODE -- 6736148
8640    FROM OKL_AM_ASSET_QUOTES_UV
8641    WHERE id = p_qte_id;
8642 
8643    CURSOR c_asset_return_csr(p_line_id IN NUMBER) IS
8644    SELECT COUNT(kle_id)
8645    FROM OKL_ASSET_RETURNS_B
8646    WHERE kle_id = p_line_id
8647    AND ARS_CODE <> 'CANCELLED';
8648 
8649    CURSOR c_khr_csr(p_qte_id IN NUMBER) IS
8650    SELECT khr_id
8651    FROM OKL_TRX_QUOTES_B
8652    WHERE ID = p_qte_id;
8653 
8654    CURSOR c_system_options(p_org_id IN NUMBER) IS
8655    SELECT B.NAME
8656    FROM   OKL_SYSTEM_PARAMS_ALL A,
8657           OKL_FORMULAE_B B
8658    WHERE  A.ORG_ID = p_org_id
8659    AND    A.FORMULA_ID = B.ID (+);
8660 
8661    l_formula_name OKL_FORMULAE_B.NAME%TYPE;
8662 
8663    l_id           NUMBER;
8664    l_ret_exists   VARCHAR2(1);
8665    l_count        NUMBER;
8666    l_contract_id  NUMBER;
8667    l_org_id       NUMBER;
8668 
8669    l_api_version               NUMBER := 1;
8670    lx_msg_count                NUMBER;
8671    lx_msg_data                 VARCHAR2(2000);
8672    l_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8673    lp_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
8674    lx_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
8675 -- for debug logging
8676     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'create_repo_asset_return';
8677     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
8678     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
8679     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
8680     /* Bug 6712322 start */
8681     l_params	       OKL_EXECUTE_FORMULA_PUB.ctxt_val_tbl_type;
8682     l_asset_return_value NUMBER;
8683     /* Bug 6712322 end */
8684     /* Bug 6736148 start */
8685     l_func_curr_code  GL_LEDGERS_PUBLIC_V.CURRENCY_CODE%TYPE;
8686     lx_contract_currency         okl_k_headers_full_v.currency_code%TYPE;
8687     lx_currency_conversion_type  okl_k_headers_full_v.currency_conversion_type%TYPE;
8688     lx_currency_conversion_rate  okl_k_headers_full_v.currency_conversion_rate%TYPE;
8689     lx_currency_conversion_date  okl_k_headers_full_v.currency_conversion_date%TYPE;
8690     lx_converted_amount          NUMBER;
8691     /* Bug 6736148 end */
8692   BEGIN
8693 
8694    IF (is_debug_procedure_on) THEN
8695        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
8696    END IF;
8697 
8698     l_func_curr_code := okl_am_util_pvt.get_functional_currency;
8699 
8700     IF funcmode = 'RUN' THEN
8701       l_id := wf_engine.GetItemAttrText(itemtype => itemtype,
8702                                          itemkey  => itemkey,
8703                                          aname    => 'TRANSACTION_ID');
8704 
8705       OPEN c_khr_csr(l_id);
8706       FETCH c_khr_csr INTO l_contract_id;
8707       CLOSE c_khr_csr;
8708 
8709       l_org_id := OKL_AM_UTIL_PVT.get_chr_org_id(l_contract_id);
8710 
8711       FOR l_assets IN c_quote_assets_csr(l_id) LOOP
8712         OPEN c_asset_return_csr(l_assets.kle_id);
8713         FETCH c_asset_return_csr INTO l_count;
8714         CLOSE c_asset_return_csr;
8715 
8716         IF l_count > 0 THEN
8717           l_ret_exists := 'Y';
8718         ELSE
8719           l_ret_exists := 'N';
8720         END IF;
8721 
8722         IF l_ret_exists = 'N' THEN
8723           --call the asset return api to create the return
8724 
8725           lp_artv_rec.kle_id := l_assets.kle_id;
8726           lp_artv_rec.art1_code := 'REPOS_REQUEST';
8727           lp_artv_rec.ars_code  := 'SCHEDULED';
8728 
8729           -- Set the contract org id to the application
8730           MO_GLOBAL.set_policy_context ('S', l_org_id);
8731 
8732           /* 6712322 */
8733           l_formula_name := NULL;
8734           OPEN c_system_options(l_org_id);
8735           FETCH c_system_options INTO l_formula_name;
8736           CLOSE c_system_options;
8737 
8738           /* 6712322 Evaluate ASSET_RETURN_VALUE formula and attach */
8739           -- set the operands for formula engine with quote_id
8740           IF (l_formula_name IS NOT NULL AND
8741                l_formula_name <> OKL_API.G_MISS_CHAR) THEN
8742             l_params(1).name := 'quote_id';
8743             l_params(1).value := to_char(l_id);
8744 
8745             /*OKL_EXECUTE_FORMULA_PUB.execute(
8746                       p_api_version   => l_api_version,
8747                       p_init_msg_list => OKL_API.G_FALSE,
8748                       x_return_status => l_return_status,
8749                       x_msg_count     => lx_msg_count,
8750                       x_msg_data      => lx_msg_data,
8751                       p_formula_name  => 'ASSET_RETURN_VALUE',
8752                       p_contract_id   => l_contract_id,
8753                       p_line_id       => l_assets.kle_id,
8754                       x_value         => l_asset_return_value); */
8755 
8756               OKL_AM_UTIL_PVT.get_formula_value (
8757 		        --p_formula_name	  => 'ASSET_RETURN_AMOUNT',
8758 			p_formula_name	          => l_formula_name,
8759 			p_chr_id	          => l_contract_id,
8760 			p_cle_id                  => l_assets.kle_id,
8761     			p_additional_parameters   => l_params,
8762 			x_formula_value           => l_asset_return_value,
8763 			x_return_status	          => l_return_status);
8764 
8765 
8766             IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8767                 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8768             ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8769                 RAISE Okl_Api.G_EXCEPTION_ERROR;
8770             END IF;
8771 
8772             lp_artv_rec.asset_fmv_amount  := l_asset_return_value;
8773 
8774             /* Bug 6736148 start */
8775             IF (l_assets.CURRENCY_CODE <> l_func_curr_code) THEN
8776 
8777 	      IF (is_debug_statement_on) THEN
8778 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'calling okl_accounting_util.convert_to_functional_currency');
8779 	      END IF;
8780 
8781               okl_accounting_util.convert_to_functional_currency(
8782    	            p_khr_id  		       => l_contract_id,
8783    	            p_to_currency   	       => l_func_curr_code,
8784    	            p_transaction_date 	       => l_assets.DATE_EFFECTIVE_FROM,
8785    	            p_amount 		       => l_asset_return_value,
8786                     x_return_status	       => l_return_status,
8787    	            x_contract_currency	       => lx_contract_currency,
8788    		    x_currency_conversion_type => lx_currency_conversion_type,
8789    		    x_currency_conversion_rate => lx_currency_conversion_rate,
8790    		    x_currency_conversion_date => lx_currency_conversion_date,
8791    		    x_converted_amount 	       => lx_converted_amount );
8792 
8793 	      IF (is_debug_statement_on) THEN
8794 		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);
8795 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_contract_currency: ' || lx_contract_currency);
8796 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_currency_conversion_type: ' || lx_currency_conversion_type);
8797 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_currency_conversion_rate: ' || lx_currency_conversion_rate);
8798 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_currency_conversion_date: ' || lx_currency_conversion_date);
8799 		OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name, 'lx_converted_amount: ' || lx_converted_amount);
8800 	      END IF;
8801 
8802               IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8803                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8804               ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
8805                 RAISE OKL_API.G_EXCEPTION_ERROR;
8806               END IF;
8807 
8808               lp_artv_rec.asset_fmv_amount  := lx_converted_amount;
8809 
8810             END IF;
8811             /* Bug 6736148 end */
8812 
8813           END IF;
8814 
8815           OKL_AM_ASSET_RETURN_PVT.create_asset_return(
8816                              p_api_version        =>  l_api_version,
8817                              p_init_msg_list      => OKL_API.G_FALSE,
8818                              x_return_status      => l_return_status,
8819                              x_msg_count          => lx_msg_count,
8820                              x_msg_data           => lx_msg_data,
8821                              p_artv_rec		  => lp_artv_rec,
8822                              x_artv_rec		  => lx_artv_rec,
8823                              p_quote_id           => l_id) ;
8824 
8825            IF (is_debug_statement_on) THEN
8826                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
8827                'after call to OKL_AM_ASSET_RETURN_PVT.create_asset_return :'||l_return_status);
8828            END IF;
8829 
8830           IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8831             RAISE G_EXCEPTION;
8832           ELSE
8833             resultout := 'COMPLETE:';
8834           END IF;
8835         ELSIF l_ret_exists = 'Y' THEN
8836          resultout := 'COMPLETE:';
8837         END IF;
8838       END LOOP;
8839 
8840       RETURN ;
8841     END IF;
8842 
8843     --
8844     -- CANCEL mode
8845     --
8846          IF (funcmode = 'CANCEL') THEN
8847       --
8848       resultout := 'COMPLETE:';
8849       RETURN;
8850       --
8851     END IF;
8852 
8853     --
8854     -- TIMEOUT mode
8855     --
8856     IF (funcmode = 'TIMEOUT') THEN
8857       --
8858       resultout := 'COMPLETE:';
8859       RETURN;
8860       --
8861     END IF;
8862 
8863 
8864    IF (is_debug_procedure_on) THEN
8865        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
8866    END IF;
8867 
8868   EXCEPTION
8869     WHEN G_EXCEPTION THEN
8870 
8871         IF (is_debug_exception_on) THEN
8872             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'USER DEFINED');
8873         END IF;
8874 
8875         IF c_quote_assets_csr%ISOPEN THEN
8876           CLOSE c_quote_assets_csr;
8877         END IF;
8878 
8879         IF c_asset_return_csr%ISOPEN THEN
8880           CLOSE c_asset_return_csr;
8881         END IF;
8882         WF_CORE.context('OKL_AM_QUOTES_WF' , 'create_repo_asset_return',
8883                         itemtype, itemkey, actid, funcmode);
8884         RAISE;
8885 
8886     WHEN OTHERS THEN
8887 
8888         IF (is_debug_exception_on) THEN
8889             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
8890                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
8891         END IF;
8892 
8893         IF c_quote_assets_csr%ISOPEN THEN
8894           CLOSE c_quote_assets_csr;
8895         END IF;
8896 
8897         IF c_asset_return_csr%ISOPEN THEN
8898           CLOSE c_asset_return_csr;
8899         END IF;
8900         WF_CORE.context('OKL_AM_QUOTES_WF' , 'create_repo_asset_return',
8901                         itemtype, itemkey, actid, funcmode);
8902         RAISE;
8903 
8904   END create_repo_asset_return;
8905 
8906 
8907 END OKL_AM_QUOTES_WF;