[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;