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