[Home] [Help]
PACKAGE BODY: APPS.ASO_APR_WF_PVT
Source
1 PACKAGE BODY aso_apr_wf_pvt AS
2 /* $Header: asovwapb.pls 120.9 2007/01/31 19:12:16 skulkarn ship $ */
3 g_user_id NUMBER:= FND_GLOBAL.USER_ID;
4
5 PROCEDURE start_aso_approvals (
6 P_Object_approval_id IN NUMBER,
7 P_itemtype_name IN VARCHAR2,
8 P_sender_name IN VARCHAR2
9 ) IS
10 l_itemkey VARCHAR2 (30);
11 l_itemtype VARCHAR2 (30);
12 l_requestor_display_name VARCHAR2 (240);
13 l_object_approval_id NUMBER;
14
15
16 CURSOR C_get_appr_id IS
17 SELECT min(object_approval_id)
18 FROM aso_apr_obj_approvals
19 WHERE object_id = (SELECT object_id
20 FROM aso_apr_obj_approvals
21 WHERE object_approval_id = P_Object_approval_id)
22 AND approval_status = 'PEND';
23
24 BEGIN
25 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
26 aso_debug_pub.ADD (
27 'Begin ASO_APR_WF_PVT package ',
28 1,
29 'N'
30 );
31 aso_debug_pub.ADD (
32 'Starting Approval Process for approval id ' || P_Object_approval_id,
33 1,
34 'N'
35 );
36 aso_debug_pub.ADD (
37 'Starting Approval Process for sender_name ' || P_sender_name,
38 1,
39 'N'
40 );
41 END IF;
42
43 OPEN C_get_appr_id;
44 FETCH C_get_appr_id INTO l_object_approval_id;
45 CLOSE C_get_appr_id;
46
47 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
48 aso_debug_pub.ADD('l_object_approval_id: '|| l_object_approval_id,1,'N');
49 END IF;
50
51 IF (P_Object_approval_id = l_object_approval_id) THEN
52
53 l_itemtype := P_itemtype_name; --'ASOAPPRV';
54 l_itemkey := TO_CHAR (
55 P_Object_approval_id
56 ) || 'HED';
57 wf_engine.createprocess (
58 itemtype => l_itemtype,
59 itemkey => l_itemkey,
60 process => 'STARTAPPROVALS'
61 );
62 wf_engine.setitemowner (
63 l_itemtype, --'ASOAPPRV',
64 l_itemkey,
65 P_sender_name
66 );
67 wf_engine.setitemuserkey (
68 itemtype => l_itemtype,
69 itemkey => l_itemkey,
70 userkey => l_itemkey
71 );
72 wf_engine.setitemattrtext (
73 itemtype => l_itemtype,
74 itemkey => l_itemkey,
75 aname => 'REQUESTOR_USERNAME',
76 avalue => P_sender_name
77 );
78 wf_engine.setitemattrnumber (
79 itemtype => l_itemtype,
80 itemkey => l_itemkey,
81 aname => 'APPROVALID',
82 avalue => P_Object_approval_id
83 );
84
85 wf_engine.setitemattrtext (
86 itemtype => l_itemtype,
87 itemkey => l_itemkey,
88 aname => 'NEWPROCESSFLAG',
89 avalue =>'Y'
90 );
91
92
93 l_requestor_display_name := wf_directory.getroledisplayname (
94 P_sender_name
95 );
96 wf_engine.setitemattrtext (
97 itemtype => l_itemtype,
98 itemkey => l_itemkey,
99 aname => 'REQUESTOR_DISPLAYNAME',
100 avalue => l_requestor_display_name
101 );
102 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
103 aso_debug_pub.ADD (
104 'Requester DisplayName is :' || l_requestor_display_name,
105 1,
106 'N'
107 );
108 END IF;
109
110 wf_engine.startprocess (
111 itemtype => l_itemtype,
112 itemkey => l_itemkey
113 );
114
115 ELSE -- approval_id and obj_approval_id are not the same
116
117 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
118 aso_debug_pub.ADD('Skipping the create approval workflow',1,'N');
119 aso_debug_pub.ADD('***** NOTE: APPROVAL WORKFLOW PROCESS HAS NOT BEEN STARTED',1,'N');
120 END IF;
121 END IF;
122
123
124
125 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
126 aso_debug_pub.ADD (
127 'End of Start_ASO_Approvals ',
128 1,
129 'N'
130 );
131 END IF;
132 EXCEPTION
133 WHEN OTHERS
134 THEN
135 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
136 aso_debug_pub.ADD (
137 'Exception in Start_ASO_Approvals Proc SqlCode :' || SQLERRM,
138 1,
139 'N'
140 );
141 END IF;
142 wf_core.CONTEXT (
143 'ASO_APPROVE',
144 'Start_ASO_Approvals',
145 P_Object_approval_id,
146 P_sender_name
147 );
148 RAISE;
149 END start_aso_approvals;
150
151 PROCEDURE submit_approval (
152 itemtype IN VARCHAR2,
153 itemkey IN VARCHAR2,
154 actid IN NUMBER,
155 funcmode IN VARCHAR2,
156 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
157 ) IS
158 next_seq NUMBER := -99;
159 l_itemkey VARCHAR2 (30);
160 l_approval_id NUMBER;
161 l_requestor_name VARCHAR2 (240);
162 l_requestor_displayname VARCHAR2 (240);
163 l_forward_user_name VARCHAR2 (240);
164 l_forward_displayname VARCHAR2 (240);
165
166 CURSOR LIST (
167 c_approval_id NUMBER
168 ) IS
169 SELECT approval_det_id, approver_sequence, approver_person_id,
170 approver_user_id
171 FROM aso_apr_approval_details
172 WHERE object_approval_id = c_approval_id
173 AND approver_status = 'NOSUBMIT'
174 ORDER BY approver_sequence;
175 BEGIN
176 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
177 aso_debug_pub.ADD (
178 'Begin Sumbit_Approval Process',
179 1,
180 'N'
181 );
182 END IF;
183
184 IF funcmode = 'RUN'
185 THEN
186 l_approval_id := wf_engine.getitemattrnumber (
187 itemtype,
188 itemkey,
189 'APPROVALID'
190 );
191 l_requestor_name := wf_engine.getitemattrtext (
192 itemtype,
193 itemkey,
194 'REQUESTOR_USERNAME'
195 );
196 l_requestor_displayname :=
197 wf_engine.getitemattrtext (
198 itemtype,
199 itemkey,
200 'REQUESTOR_DISPLAYNAME'
201 );
202
203
204 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
205 aso_debug_pub.ADD (
206 'Object Approval ID is ' || l_approval_id,
207 1,
208 'N'
209 );
210 aso_debug_pub.ADD (
211 'Requester UserName is ' || l_requestor_name,
212 1,
213 'N'
214 );
215 aso_debug_pub.ADD (
216 'Requester DisplayName is :' || l_requestor_displayname,
217 1,
218 'N'
219 );
220 END IF;
221
222 FOR i IN LIST (
223 l_approval_id
224 )
225 LOOP
226 IF (next_seq = -99)
227 THEN
228 next_seq := i.approver_sequence;
229 ELSIF next_seq = i.approver_sequence
230 THEN
231 NULL;
232 ELSE
233 EXIT;
234 END IF;
235
236 l_itemkey := TO_CHAR (
237 i.approval_det_id
238 ) || 'DET';
239
240 IF (i.approver_person_id IS NULL)
241 THEN
242 wf_directory.getrolename (
243 'FND_USR',
244 i.approver_user_id,
245 l_forward_user_name,
246 l_forward_displayname
247 );
248 ELSE
249 wf_directory.getrolename (
250 'PER',
251 i.approver_person_id,
252 l_forward_user_name,
253 l_forward_displayname
254 );
255 END IF;
256
257 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
258 aso_debug_pub.ADD (
259 'Sumbit_Approval: RECEIVER USERNAME : ' || l_forward_user_name,
260 1,
261 'N'
262 );
263 aso_debug_pub.ADD (
264 'Sumbit_Approval: RECEIVER_DISPLAYNAME : ' || l_forward_displayname,
265 1,
266 'N'
267 );
268 aso_debug_pub.ADD (
269 'Sumbit_Approval: Creating Individual_approval Process for Itemkey'
270 || l_itemkey,
271 1,
272 'N'
273 );
274 END IF;
275 wf_engine.createprocess (
276 itemtype => itemtype,
277 itemkey => l_itemkey,
278 process => 'INDIVIDUAL_APPROVAL'
279 );
280 wf_engine.setitemuserkey (
281 itemtype => itemtype,
282 itemkey => l_itemkey,
283 userkey => l_itemkey
284 );
285 wf_engine.setitemattrnumber (
286 itemtype => itemtype,
287 itemkey => l_itemkey,
288 aname => 'APPROVAL_DET_ID',
289 avalue => i.approval_det_id
290 );
291 wf_engine.setitemattrtext (
292 itemtype => itemtype, --'ASOAPPRV',
293 itemkey => l_itemkey,
294 aname => 'REQUESTOR_DISPLAYNAME',
295 avalue => l_requestor_displayname
296 );
297 wf_engine.setitemattrtext (
298 itemtype => itemtype,
299 itemkey => l_itemkey,
300 aname => 'RECEIVER_USERNAME',
301 avalue => l_forward_user_name
302 );
303
304 wf_engine.setitemattrtext (
305 itemtype => itemtype,
306 itemkey => itemkey,
307 aname => 'NEWPROCESSFLAG',
308 avalue =>'Y'
309 );
310
311 l_forward_displayname :=
312 wf_directory.getroledisplayname (
313 l_forward_user_name
314 );
315 wf_engine.setitemattrtext (
316 itemtype => itemtype,
317 itemkey => l_itemkey,
318 aname => 'RECEIVER_DISPLAYNAME',
319 avalue => l_forward_displayname
320 );
321 wf_engine.setitemattrtext (
322 itemtype => itemtype, --'ASOAPPRV',
323 itemkey => l_itemkey,
324 aname => 'REQUESTOR_USERNAME',
325 avalue => l_requestor_name
326 );
327 wf_engine.setitemattrnumber (
328 itemtype => itemtype, --'ASOAPPRV',
329 itemkey => l_itemkey,
330 aname => 'APPROVALID',
331 avalue => l_approval_id
332 );
333 -- Set the mesage name to copy submitter (FYI) message
334
335 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
336 aso_debug_pub.ADD (
337 'Setting the message name to OA_FYI_TO_REQUESTER',
338 1,
339 'N'
340 );
341 END IF;
342 wf_engine.setitemattrtext (
343 itemtype => itemtype, --'ASOAPPRV',
344 itemkey => l_itemkey,
345 aname => 'MESSAGE',
346 avalue => 'OA_FYI_TO_REQUESTER'
347 );
348 -- define the parent child relationship
349
350 wf_engine.setitemparent (
351 itemtype => itemtype,
352 itemkey => l_itemkey,
353 parent_itemtype => itemtype,
354 parent_itemkey => itemkey,
355 parent_context => NULL
356 );
357 wf_engine.startprocess (
358 itemtype => itemtype,
359 itemkey => l_itemkey
360 );
361 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
362 aso_debug_pub.ADD (
363 'Updating the approver status to PEND for object approval id :'
364 || l_approval_id,
365 1,
366 'N'
367 );
368 END IF;
369
370 UPDATE aso_apr_approval_details
371 SET approver_status = 'PEND',
372 date_sent = SYSDATE,
373 last_update_date = SYSDATE,
374 last_updated_by = fnd_global.user_id,
375 last_update_login = fnd_global.user_id
376 WHERE object_approval_id = l_approval_id
377 AND approver_sequence = next_seq;
378 END LOOP;
379
380 resultout := 'COMPLETE' || ':' || wf_engine.eng_null;
381 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
382 aso_debug_pub.ADD (
383 'End Sumbit_Approval Process',
384 1,
385 'N'
386 );
387 END IF;
388 RETURN;
389 END IF;
390
391 IF (funcmode = 'CANCEL')
392 THEN
393 resultout := 'COMPLETE';
394 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
395 aso_debug_pub.ADD (
396 'End of Sumbit_Approval Process',
397 1,
398 'N'
399 );
400 END IF;
401 RETURN;
402 END IF;
403
404 resultout := '';
405 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
406 aso_debug_pub.ADD (
407 'End of Sumbit_Approval Process',
408 1,
409 'N'
410 );
411 END IF;
412 RETURN;
413 EXCEPTION
414 WHEN OTHERS
415 THEN
416 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
417 aso_debug_pub.ADD (
418 'Exception in Submit_Approvals Proc SqlCode :' || SQLERRM,
419 1,
420 'N'
421 );
422 END IF;
423 wf_core.CONTEXT (
424 'ASOAPPRV',
425 'Submit_Approvals',
426 itemtype,
427 itemkey,
428 TO_CHAR (
429 actid
430 ),
431 funcmode
432 );
433 RAISE;
434 END submit_approval;
435
436 PROCEDURE submit_next_batch (
437 itemtype IN VARCHAR2,
438 itemkey IN VARCHAR2,
439 actid IN NUMBER,
440 funcmode IN VARCHAR2,
441 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
442 ) IS
443 l_count NUMBER;
444 l_approval_id NUMBER;
445 l_approval_det_id NUMBER;
446 l_max_seq NUMBER;
447 l_status VARCHAR2 (30);
448 x_msg_count NUMBER;
449 x_msg_data VARCHAR2 (10000);
450 l_new_process_flag VARCHAR2(1);
451
452
453 CURSOR get_pend_sbmt_approvers (
454 c_approval_id NUMBER
455 ) IS
456 SELECT COUNT (
457 *
458 )
459 FROM aso_apr_approval_details
460 WHERE object_approval_id = c_approval_id
461 AND approver_status = 'NOSUBMIT';
462
463 CURSOR get_max_approver_seq (
464 c_approval_id NUMBER
465 ) IS
466 SELECT MAX (
467 approver_sequence
468 )
469 FROM aso_apr_approval_details
470 WHERE object_approval_id = c_approval_id;
471
472 CURSOR get_tout_approvers (
473 c_approval_id NUMBER,
474 c_max_seq NUMBER
475 ) IS
476 SELECT COUNT (
477 *
478 )
479 FROM aso_apr_approval_details
480 WHERE object_approval_id = c_approval_id
481 AND approver_status = 'TOUT'
482 AND approver_sequence = c_max_seq;
483 BEGIN
484 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
485 aso_debug_pub.ADD (
486 'Begin Sumbit_Next_Batch Process',
487 1,
488 'N'
489 );
490 END IF;
491
492 IF funcmode = 'RUN'
493 THEN
494 l_approval_id := wf_engine.getitemattrnumber (
495 itemtype,
496 itemkey,
497 'APPROVALID'
498 );
499 l_approval_det_id := wf_engine.getitemattrnumber (
500 itemtype,
501 itemkey,
502 'APPROVAL_DET_ID'
503 );
504 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
505 aso_debug_pub.ADD (
506 'Approval ID is ' || l_approval_id,
507 1,
508 'N'
509 );
510 aso_debug_pub.ADD (
511 'Approval Detail ID is ' || l_approval_det_id,
512 1,
513 'N'
514 );
515 aso_debug_pub.ADD (
516 'Calling the update approver list procedure ',
517 1,
518 'N'
519 );
520 END IF;
521 -- Update the approver list if any rules have changed
522 aso_apr_wf_pvt.update_approver_list (
523 l_approval_id
524 );
525 OPEN get_pend_sbmt_approvers (
526 l_approval_id
527 );
528 FETCH get_pend_sbmt_approvers INTO l_count;
529 CLOSE get_pend_sbmt_approvers;
530
531 IF l_count > 0
532 THEN
533 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
534 aso_debug_pub.ADD (
535 'Number of approvers who are in pending status are : ' || l_count,
536 1,
537 'N'
538 );
539 END IF;
540 resultout := 'COMPLETE:T';
541 ELSE
542 -- Checking whether Last Approver timed OUT NOCOPY /* file.sql.39 change */ if so treated as rejected
543 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
544 aso_debug_pub.ADD (
545 'NO approvers in pending status',
546 1,
547 'N'
548 );
549 END IF;
550 OPEN get_max_approver_seq (
551 l_approval_id
552 );
553 FETCH get_max_approver_seq INTO l_max_seq;
554 CLOSE get_max_approver_seq;
555 OPEN get_tout_approvers (
556 l_approval_id,
557 l_max_seq
558 );
559 FETCH get_tout_approvers INTO l_count;
560 CLOSE get_tout_approvers;
561 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
562 aso_debug_pub.ADD (
563 'Number of approvers who have timed OUT NOCOPY /* file.sql.39 change */ are : ' || l_count,
564 1,
565 'N'
566 );
567 END IF;
568
569 IF l_count > 0
570 THEN
571 -- Generate new list
572 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
573 aso_debug_pub.ADD (
574 'Calling procedure last approver timeout check ',
575 1,
576 'N'
577 );
578 END IF;
579 aso_apr_wf_pvt.last_approver_timeout_check (
580 l_approval_id
581 );
582 OPEN get_pend_sbmt_approvers (
583 l_approval_id
584 );
585 FETCH get_pend_sbmt_approvers INTO l_count;
586 CLOSE get_pend_sbmt_approvers;
587 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
588 aso_debug_pub.ADD (
589 'Number of approvers who are in pending status are : ' || l_count,
590 1,
591 'N'
592 );
593 END IF;
594
595 IF l_count > 0
596 THEN
597 resultout := 'COMPLETE:T';
598 RETURN;
599 ELSE
600 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
601 aso_debug_pub.ADD (
602 'Seting the status to rejected',
603 1,
604 'N'
605 );
606 END IF;
607 l_status := 'REJ';
608 -- set the message name to that of final rejection message
609
610 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
611 aso_debug_pub.ADD (
612 'Setting message name to OA_REQUEST_REJECTED',
613 1,
614 'N'
615 );
616 END IF;
617 wf_engine.setitemattrtext (
618 itemtype => itemtype,
619 itemkey => itemkey,
620 aname => 'MESSAGE',
621 avalue => 'OA_REQUEST_REJECTED'
622 );
623 END IF;
624 ELSE
625 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
626 aso_debug_pub.ADD (
627 'Seting the status to approved',
628 1,
629 'N'
630 );
631 END IF;
632 l_status := 'APPR';
633 -- set the message name to that of final approval message
634 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
635 aso_debug_pub.ADD (
636 'Setting message name to OA_REQ_APPR_BY_ALL_APPR',
637 1,
638 'N'
639 );
640 END IF;
641 wf_engine.setitemattrtext (
642 itemtype => itemtype,
643 itemkey => itemkey,
644 aname => 'MESSAGE',
645 avalue => 'OA_REQ_APPR_BY_ALL_APPR'
646 );
647 END IF;
648
649 -- Update the approval table to to proper status
650 aso_apr_wf_pvt.update_approval_status (
651 p_update_header_or_detail_flag => 'HEADER',
652 p_object_approval_id => l_approval_id,
653 p_approval_det_id => null,
654 p_status => l_status,
655 note => null);
656
657
658 /* For backward compatibility */
659 BEGIN
660 l_new_process_flag := wf_engine.getitemattrnumber (
661 itemtype,
662 itemkey,
663 'NEWPROCESSFLAG'
664 );
665
666 exception
667 when others then
668 l_new_process_flag := 'N';
669 END;
670
671 IF l_new_process_flag = 'N' THEN
672 -- Calling the procedure to update the quote status
673 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
674 aso_debug_pub.ADD (
675 'Calling update entity procedure ',
676 1,
677 'N'
678 );
679 END IF;
680 aso_apr_wf_pvt.update_entity (
681 itemtype ,
682 itemkey ,
683 actid ,
684 funcmode,
685 resultout
686 );
687 END IF;
688
689 resultout := 'COMPLETE:F';
690 END IF;
691
692 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
693 aso_debug_pub.ADD (
694 'End of Sumbit_Next_Batch Process',
695 1,
696 'N'
697 );
698 END IF;
699 RETURN;
700 END IF;
701
702 IF (funcmode = 'CANCEL')
703 THEN
704 resultout := 'COMPLETE';
705 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
706 aso_debug_pub.ADD (
707 'End of Sumbit_Next_Batch Process',
708 1,
709 'N'
710 );
711 END IF;
712 RETURN;
713 END IF;
714
715 resultout := '';
716 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
717 aso_debug_pub.ADD (
718 'End of Sumbit_Next_Batch Process',
719 1,
720 'N'
721 );
722 END IF;
723 RETURN;
724 EXCEPTION
725 WHEN OTHERS
726 THEN
727 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
728 aso_debug_pub.ADD (
729 'Exception in Submit_next_batch Proc SqlCode :' || SQLERRM,
730 1,
731 'N'
732 );
733 END IF;
734 fnd_msg_pub.count_and_get (
735 p_encoded => 'F',
736 p_count => x_msg_count,
737 p_data => x_msg_data
738 );
739 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
740 aso_debug_pub.ADD (
741 'no. of FND messages :' || x_msg_count,
742 1,
743 'N'
744 );
745 END IF;
746
747 FOR k IN 1 .. x_msg_count
748 LOOP
749 x_msg_data := fnd_msg_pub.get (
750 p_msg_index => k,
751 p_encoded => 'F'
752 );
753 END LOOP;
754
755 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
756 aso_debug_pub.ADD (
757 'Msg Data is' || x_msg_data,
758 1,
759 'N'
760 );
761 END IF;
762 wf_core.CONTEXT (
763 'ASOAPPRV',
764 'SUBMIT_NEXT_BATCH ' || x_msg_data,
765 itemtype,
766 itemkey,
767 TO_CHAR (
768 actid
769 ),
770 funcmode
771 );
772 RAISE;
773 END submit_next_batch;
774
775 PROCEDURE check_rejected (
776 itemtype IN VARCHAR2,
777 itemkey IN VARCHAR2,
778 actid IN NUMBER,
779 funcmode IN VARCHAR2,
780 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
781 ) IS
782 l_count NUMBER;
783 l_approval_id NUMBER;
784 x_msg_count NUMBER;
785 x_msg_data VARCHAR2 (10000);
786 l_new_process_flag VARCHAR2(1);
787
788
789 CURSOR get_rej_approver_count (
790 c_approval_id NUMBER
791 ) IS
792 SELECT COUNT (
793 *
794 )
795 FROM aso_apr_approval_details
796 WHERE object_approval_id = c_approval_id
797 AND approver_status = 'REJ';
798 BEGIN
799 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
800 aso_debug_pub.ADD (
801 'Begin CHECK_REJECTED Procedure ',
802 1,
803 'N'
804 );
805 END IF;
806
807 IF funcmode = 'RUN'
808 THEN
809 l_approval_id := wf_engine.getitemattrnumber (
810 itemtype,
811 itemkey,
812 'APPROVALID'
813 );
814 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
815 aso_debug_pub.ADD (
816 'Approval ID is ' || l_approval_id,
817 1,
818 'N'
819 );
820 END IF;
821 OPEN get_rej_approver_count (
822 l_approval_id
823 );
824 FETCH get_rej_approver_count INTO l_count;
825 CLOSE get_rej_approver_count;
826 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
827 aso_debug_pub.ADD (
828 'Number of approvers who are in rejected status are : ' || l_count,
829 1,
830 'N'
831 );
832 END IF;
833
834 IF l_count > 0
835 THEN
836 -- Calling the procedure to update the quote status
837 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
838 aso_debug_pub.ADD (
839 'Calling update quote procedure with status = REJ and approval id = '
840 || l_approval_id,
841 1,
842 'N'
843 );
844 END IF;
845 -- Set the message name to Final Rejection
846 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
847 aso_debug_pub.ADD (
848 'Setting message name to OA_REQUEST_REJECTED',
849 1,
850 'N'
851 );
852 END IF;
853 wf_engine.setitemattrtext (
854 itemtype => itemtype,
855 itemkey => itemkey,
856 aname => 'MESSAGE',
857 avalue => 'OA_REQUEST_REJECTED'
858 );
859
860
861 aso_apr_wf_pvt.update_approval_status (
862 p_update_header_or_detail_flag => 'HEADER',
863 p_object_approval_id => l_approval_id,
864 p_approval_det_id => null,
865 p_status => 'REJ',
866 note => null);
867
868
869 /* For backward compatibility */
870 BEGIN
871 l_new_process_flag := wf_engine.getitemattrnumber (
872 itemtype,
873 itemkey,
874 'NEWPROCESSFLAG'
875 );
876
877 exception
878 when others then
879 l_new_process_flag := 'N';
880 END;
881
882 IF l_new_process_flag = 'N' THEN
883 -- Calling the procedure to update the quote status
884 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
885 aso_debug_pub.ADD (
886 'Calling update entity procedure ',
887 1,
888 'N'
889 );
890 END IF;
891 aso_apr_wf_pvt.update_entity (
892 itemtype ,
893 itemkey ,
894 actid ,
895 funcmode,
896 resultout
897 );
898 END IF;
899
900 resultout := 'COMPLETE:T';
901 ELSE
902 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
903 aso_debug_pub.ADD (
904 'Setting message name to OA_REQ_APPR_BY_ALL_APPR',
905 1,
906 'N'
907 );
908 END IF;
909 wf_engine.setitemattrtext (
910 itemtype => itemtype,
911 itemkey => itemkey,
912 aname => 'MESSAGE',
913 avalue => 'OA_REQ_APPR_BY_ALL_APPR'
914 );
915 resultout := 'COMPLETE:F';
916 END IF;
917
918 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
919 aso_debug_pub.ADD (
920 'End of CHECK_REJECTED Procedure',
921 1,
922 'N'
923 );
924 END IF;
925 RETURN;
926 END IF;
927
928 IF (funcmode = 'CANCEL')
929 THEN
930 resultout := 'COMPLETE';
931 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
932 aso_debug_pub.ADD (
933 'End of CHECK_REJECTED Procedure',
934 1,
935 'N'
936 );
937 END IF;
938 RETURN;
939 END IF;
940
941 resultout := '';
942 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
943 aso_debug_pub.ADD (
944 'End of CHECK_REJECTED Procedure',
945 1,
946 'N'
947 );
948 END IF;
949 RETURN;
950 EXCEPTION
951 WHEN OTHERS
952 THEN
953 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
954 aso_debug_pub.ADD (
955 'Exception in Check_rejected Procedure SqlCode :' || SQLERRM,
956 1,
957 'N'
958 );
959 END IF;
960 fnd_msg_pub.count_and_get (
961 p_encoded => 'F',
962 p_count => x_msg_count,
963 p_data => x_msg_data
964 );
965 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
966 aso_debug_pub.ADD (
967 'no. of FND messages :' || x_msg_count,
968 1,
969 'N'
970 );
971 END IF;
972
973 FOR k IN 1 .. x_msg_count
974 LOOP
975 x_msg_data := fnd_msg_pub.get (
976 p_msg_index => k,
977 p_encoded => 'F'
978 );
979 END LOOP;
980
981 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
982 aso_debug_pub.ADD (
983 'Msg Data is' || x_msg_data,
984 1,
985 'N'
986 );
987 END IF;
988 wf_core.CONTEXT (
989 'ASOAPPRV',
990 'CHECK_REJECTED ' || x_msg_data,
991 itemtype,
992 itemkey,
993 TO_CHAR (
994 actid
995 ),
996 funcmode
997 );
998 RAISE;
999 END check_rejected;
1000
1001 PROCEDURE approved (
1002 itemtype IN VARCHAR2,
1003 itemkey IN VARCHAR2,
1004 actid IN NUMBER,
1005 funcmode IN VARCHAR2,
1006 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1007 ) IS
1008 l_approval_det_id NUMBER;
1009 l_note VARCHAR2 (4000);
1010 BEGIN
1011 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1012 aso_debug_pub.ADD (
1013 'Begin APPROVED Procedure ',
1014 1,
1015 'N'
1016 );
1017 END IF;
1018
1019 IF funcmode = 'RUN'
1020 THEN
1021 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1022 aso_debug_pub.ADD (
1023 'Seting message name to OA_REQUEST_APPROVED_FYI',
1024 1,
1025 'N'
1026 );
1027 END IF;
1028 wf_engine.setitemattrtext (
1029 itemtype => itemtype,
1030 itemkey => itemkey,
1031 aname => 'MESSAGE',
1032 avalue => 'OA_REQUEST_APPROVED_FYI'
1033 );
1034 l_approval_det_id := wf_engine.getitemattrnumber (
1035 itemtype,
1036 itemkey,
1037 'APPROVAL_DET_ID'
1038 );
1039 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1040 aso_debug_pub.ADD (
1041 'Approval detail ID is : ' || l_approval_det_id,
1042 1,
1043 'N'
1044 );
1045 END IF;
1046 l_note := wf_engine.getitemattrtext (
1047 itemtype,
1048 itemkey,
1049 'NOTE'
1050 );
1051 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1052 aso_debug_pub.ADD (
1053 'Approver comments are: ' || SUBSTR (
1054 l_note,
1055 1,
1056 32
1057 ),
1058 1,
1059 'N'
1060 );
1061 aso_debug_pub.ADD (
1062 'Calling the update table procedure setting approver status to APPR',
1063 1,
1064 'N'
1065 );
1066 END IF;
1067 aso_apr_wf_pvt.update_approval_status (
1068 p_update_header_or_detail_flag => 'DETAIL' ,
1069 p_object_approval_id => null,
1070 p_approval_det_id =>l_approval_det_id,
1071 p_status => 'APPR',
1072 note => l_note);
1073
1074
1075 resultout := 'COMPLETE';
1076 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1077 aso_debug_pub.ADD (
1078 'End of APPROVED Procedure',
1079 1,
1080 'N'
1081 );
1082 END IF;
1083 RETURN;
1084 END IF;
1085
1086 IF (funcmode = 'CANCEL')
1087 THEN
1088 resultout := 'COMPLETE';
1089 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1090 aso_debug_pub.ADD (
1091 'End of APPROVED Procedure',
1092 1,
1093 'N'
1094 );
1095 END IF;
1096 RETURN;
1097 END IF;
1098
1099 resultout := '';
1100 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1101 aso_debug_pub.ADD (
1102 'End of APPROVED Procedure',
1103 1,
1104 'N'
1105 );
1106 END IF;
1107 RETURN;
1108 EXCEPTION
1109 WHEN OTHERS
1110 THEN
1111 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1112 aso_debug_pub.ADD (
1113 'Exception in Approved Procedure SqlCode :' || SQLERRM,
1114 1,
1115 'N'
1116 );
1117 END IF;
1118 wf_core.CONTEXT (
1119 'ASOAPPRV',
1120 'APPROVED',
1121 itemtype,
1122 itemkey,
1123 TO_CHAR (
1124 actid
1125 ),
1126 funcmode
1127 );
1128 RAISE;
1129 END approved;
1130
1131 PROCEDURE rejected (
1132 itemtype IN VARCHAR2,
1133 itemkey IN VARCHAR2,
1134 actid IN NUMBER,
1135 funcmode IN VARCHAR2,
1136 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1137 ) IS
1138 l_approval_det_id NUMBER;
1139 l_note VARCHAR2 (4000);
1140 BEGIN
1141 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1142 aso_debug_pub.ADD (
1143 'Start of REJECTED Procedure',
1144 1,
1145 'N'
1146 );
1147 END IF;
1148
1149 IF funcmode = 'RUN'
1150 THEN
1151 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1152 aso_debug_pub.ADD (
1153 'Seting message name to OA_REQUEST_REJECTED_FYI',
1154 1,
1155 'N'
1156 );
1157 END IF;
1158 wf_engine.setitemattrtext (
1159 itemtype => itemtype,
1160 itemkey => itemkey,
1161 aname => 'MESSAGE',
1162 avalue => 'OA_REQUEST_REJECTED_FYI'
1163 );
1164 l_approval_det_id := wf_engine.getitemattrnumber (
1165 itemtype,
1166 itemkey,
1167 'APPROVAL_DET_ID'
1168 );
1169 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1170 aso_debug_pub.ADD (
1171 'Approval detail ID is : ' || l_approval_det_id,
1172 1,
1173 'N'
1174 );
1175 END IF;
1176 l_note := wf_engine.getitemattrtext (
1177 itemtype,
1178 itemkey,
1179 'NOTE'
1180 );
1181 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1182 aso_debug_pub.ADD (
1183 'Approver comments are: ' || SUBSTR (
1184 l_note,
1185 1,
1186 32
1187 ),
1188 1,
1189 'N'
1190 );
1191 aso_debug_pub.ADD (
1192 'Calling the update table procedure setting approver status to REJ',
1193 1,
1194 'N'
1195 );
1196 END IF;
1197 aso_apr_wf_pvt.update_approval_status (
1198 p_update_header_or_detail_flag => 'DETAIL' ,
1199 p_object_approval_id => null,
1200 p_approval_det_id =>l_approval_det_id,
1201 p_status => 'REJ',
1202 note => l_note);
1203
1204
1205
1206 resultout := 'COMPLETE';
1207 RETURN;
1208 END IF;
1209
1210 IF (funcmode = 'CANCEL')
1211 THEN
1212 resultout := 'COMPLETE';
1213 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1214 aso_debug_pub.ADD (
1215 'End of REJECTED Procedure',
1216 1,
1217 'N'
1218 );
1219 END IF;
1220 RETURN;
1221 END IF;
1222
1223 resultout := '';
1224 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1225 aso_debug_pub.ADD (
1226 'End of REJECTED Procedure',
1227 1,
1228 'N'
1229 );
1230 END IF;
1231 RETURN;
1232 EXCEPTION
1233 WHEN OTHERS
1234 THEN
1235 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1236 aso_debug_pub.ADD (
1237 'Exception in Rejected Procedure SqlCode :' || SQLERRM,
1238 1,
1239 'N'
1240 );
1241 END IF;
1242 wf_core.CONTEXT (
1243 'ASOAPPRV',
1244 'REJECTED',
1245 itemtype,
1246 itemkey,
1247 TO_CHAR (
1248 actid
1249 ),
1250 funcmode
1251 );
1252 RAISE;
1253 END rejected;
1254
1255 PROCEDURE timedout (
1256 itemtype IN VARCHAR2,
1257 itemkey IN VARCHAR2,
1258 actid IN NUMBER,
1259 funcmode IN VARCHAR2,
1260 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1261 ) IS
1262 l_approval_det_id NUMBER;
1263 l_note VARCHAR2 (4000);
1264 l_notification_id NUMBER;
1265 BEGIN
1266 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1267 aso_debug_pub.ADD (
1268 'begin TIMEDOUT Procedure',
1269 1,
1270 'N'
1271 );
1272 END IF;
1273
1274 IF funcmode = 'RUN'
1275 THEN
1276 l_notification_id := wf_engine.getitemattrnumber (
1277 itemtype,
1278 itemkey,
1279 'NOTIFICATION_ID'
1280 );
1281 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1282 aso_debug_pub.ADD (
1283 'Cancelling notification for notification ID : ' || l_notification_id,
1284 1,
1285 'N'
1286 );
1287 END IF;
1288 wf_notification.CANCEL (
1289 nid => l_notification_id,
1290 cancel_comment => 'TIMEOUT'
1291 );
1292 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1293 aso_debug_pub.ADD (
1294 'Seting message name to OA_REQUEST_TIMEDOUT_FYI',
1295 1,
1296 'N'
1297 );
1298 END IF;
1299 wf_engine.setitemattrtext (
1300 itemtype => itemtype,
1301 itemkey => itemkey,
1302 aname => 'MESSAGE',
1303 avalue => 'OA_REQUEST_TIMEDOUT_FYI'
1304 );
1305 l_approval_det_id := wf_engine.getitemattrnumber (
1306 itemtype,
1307 itemkey,
1308 'APPROVAL_DET_ID'
1309 );
1310 l_note := wf_engine.getitemattrtext (
1311 itemtype,
1312 itemkey,
1313 'NOTE'
1314 );
1315 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1316 aso_debug_pub.ADD (
1317 'Approver comments are: ' || SUBSTR (
1318 l_note,
1319 1,
1320 32
1321 ),
1322 1,
1323 'N'
1324 );
1325 aso_debug_pub.ADD (
1326 'Calling the update table procedure setting approver status to TOUT',
1327 1,
1328 'N'
1329 );
1330 END IF;
1331 aso_apr_wf_pvt.update_approval_status (
1332 p_update_header_or_detail_flag => 'DETAIL' ,
1333 p_object_approval_id => null,
1334 p_approval_det_id =>l_approval_det_id,
1335 p_status => 'TOUT',
1336 note => l_note);
1337
1338 resultout := 'COMPLETE';
1339 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1340 aso_debug_pub.ADD (
1341 'End of TIMEDOUT Procedure',
1342 1,
1343 'N'
1344 );
1345 END IF;
1346 RETURN;
1347 END IF;
1348
1349 IF (funcmode = 'CANCEL')
1350 THEN
1351 resultout := 'COMPLETE';
1352 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1353 aso_debug_pub.ADD (
1354 'End of TIMEDOUT Procedure',
1355 1,
1356 'N'
1357 );
1358 END IF;
1359 RETURN;
1360 END IF;
1361
1362 resultout := '';
1363 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1364 aso_debug_pub.ADD (
1365 'End of TIMEDOUT Procedure',
1366 1,
1367 'N'
1368 );
1369 END IF;
1370 RETURN;
1371 EXCEPTION
1372 WHEN OTHERS
1373 THEN
1374 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1375 aso_debug_pub.ADD (
1376 'Exception in Approved Procedure SqlCode :' || SQLERRM,
1377 1,
1378 'N'
1379 );
1380 END IF;
1381 wf_core.CONTEXT (
1382 'ASOAPPRV',
1383 'TIMEDOUT',
1384 itemtype,
1385 itemkey,
1386 TO_CHAR (
1387 actid
1388 ),
1389 funcmode
1390 );
1391 RAISE;
1392 END timedout;
1393
1394 PROCEDURE cancelapproval (
1395 approval_id IN NUMBER,
1396 p_itemtype IN VARCHAR2,
1397 p_user_id IN NUMBER
1398 ) IS
1399 l_approval_id NUMBER;
1400 l_itemkey VARCHAR2 (30);
1401 l_itemtype VARCHAR2 (30);
1402 l_requestor_name VARCHAR2 (240);
1403 l_requestor_displayname VARCHAR2 (240);
1404 l_timeout NUMBER;
1405 l_forward_user_name VARCHAR2 (240);
1406 l_forward_displayname VARCHAR2 (240);
1407 x_msg_data VARCHAR2 (10000);
1408 x_msg_count NUMBER;
1409 l_approval_object VARCHAR2 (4000);
1410 l_cancellor_displayname VARCHAR2 (240);
1411 l_cancellor_username VARCHAR2 (240);
1412
1413 CURSOR LIST (
1414 l_approval_id NUMBER
1415 ) IS
1416 SELECT approval_det_id, approver_sequence, approver_person_id,
1417 approver_user_id
1418 FROM aso_apr_approval_details
1419 WHERE object_approval_id = l_approval_id
1420 AND approver_status = 'PEND'
1421 ORDER BY approver_sequence;
1422
1423 CURSOR get_requestor (
1424 l_approval_id NUMBER
1425 ) IS
1426 SELECT aoa.requester_userid, fu.employee_id
1427 FROM aso_apr_obj_approvals aoa, fnd_user fu
1428 WHERE object_approval_id = l_approval_id
1429 AND aoa.requester_userid = fu.user_id
1430 AND SYSDATE BETWEEN fu.start_date AND NVL (
1431 fu.end_date,
1432 SYSDATE
1433 );
1434 CURSOR get_username(l_user_id NUMBER) IS
1435 SELECT user_name
1436 FROM fnd_user
1437 WHERE user_id = l_user_id;
1438
1439 BEGIN
1440 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1441 aso_debug_pub.ADD (
1442 'Begin CancelApproval Procedure',
1443 1,
1444 'N'
1445 );
1446 aso_debug_pub.ADD (
1447 'Aborting process for approval ID :' || approval_id,
1448 1,
1449 'N'
1450 );
1451 END IF;
1452 -- Updating the approval obj table status
1453 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1454 aso_debug_pub.ADD (
1455 'Updating table aso_apr_obj_approvals, status is CAN and approval id :'
1456 || approval_id,
1457 1,
1458 'N'
1459 );
1460 END IF;
1461
1462 aso_apr_wf_pvt.update_approval_status (
1463 p_update_header_or_detail_flag => 'HEADER' ,
1464 p_object_approval_id => approval_id,
1465 p_approval_det_id =>null,
1466 p_status => 'CAN',
1467 note => null);
1468
1469 wf_engine.abortprocess (
1470 itemtype => p_itemtype, --'ASOAPPRV',
1471 itemkey => TO_CHAR (
1472 approval_id
1473 ) || 'HED',
1474 process => '',
1475 result => 'CANCELLED'
1476 );
1477 l_approval_id := approval_id;
1478 l_itemtype := p_itemtype; --'ASOAPPRV';
1479 l_itemkey := TO_CHAR (
1480 approval_id
1481 ) || 'CAN';
1482
1483 FOR i IN get_requestor (
1484 l_approval_id
1485 )
1486 LOOP
1487 IF i.employee_id IS NOT NULL
1488 THEN
1489 wf_directory.getrolename (
1490 'PER',
1491 i.employee_id,
1492 l_requestor_name,
1493 l_requestor_displayname
1494 );
1495 ELSE
1496 wf_directory.getrolename (
1497 'FND_USR',
1498 i.requester_userid,
1499 l_requestor_name,
1500 l_requestor_displayname
1501 );
1502 END IF;
1503
1504 l_requestor_displayname :=
1505 wf_directory.getroledisplayname (
1506 l_requestor_name
1507 );
1508 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1509 aso_debug_pub.ADD (
1510 'Requester Displayname is :' || l_requestor_displayname,
1511 1,
1512 'N'
1513 );
1514 END IF;
1515 END LOOP;
1516
1517 -- Get the display name of the request cancellor
1518
1519 OPEN get_username(p_user_id);
1520 FETCH get_username INTO l_cancellor_username;
1521 CLOSE get_username;
1522
1523 l_cancellor_displayname :=
1524 wf_directory.getroledisplayname (
1525 l_cancellor_username
1526 );
1527 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1528 aso_debug_pub.ADD (
1529 'Cancellor Displayname is :' || l_cancellor_displayname,
1530 1,
1531 'N'
1532 );
1533 END IF;
1534
1535 FOR i IN LIST (
1536 l_approval_id
1537 )
1538 LOOP
1539 IF (i.approver_person_id IS NULL)
1540 THEN
1541 wf_directory.getrolename (
1542 'FND_USR',
1543 i.approver_user_id,
1544 l_forward_user_name,
1545 l_forward_displayname
1546 );
1547 ELSE
1548 wf_directory.getrolename (
1549 'PER',
1550 i.approver_person_id,
1551 l_forward_user_name,
1552 l_forward_displayname
1553 );
1554 END IF;
1555
1556 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1557 aso_debug_pub.ADD (
1558 'Completing Activity Notify Approve Requisition for approval detail ID :'
1559 || i.approval_det_id,
1560 1,
1561 'N'
1562 );
1563 END IF;
1564
1565 -- fix for bug 3130487
1566 BEGIN
1567 wf_engine.completeactivityinternalname (
1568 p_itemtype, --'ASOAPPRV',
1569 TO_CHAR (
1570 i.approval_det_id
1571 ) || 'DET',
1572 'NOTIFY_APPROVE_REQUISITION',
1573 'CANCELLED'
1574 );
1575
1576 EXCEPTION
1577 WHEN OTHERS THEN
1578 aso_debug_pub.ADD (
1579 SQLERRM,
1580 1,
1581 'N'
1582 );
1583 END;
1584
1585 -- end fix for bug 3130487
1586
1587 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1588 aso_debug_pub.ADD (
1589 'Aborting process for approval detail ID :' || i.approval_det_id,
1590 1,
1591 'N'
1592 );
1593 END IF;
1594 wf_engine.abortprocess (
1595 itemtype => p_itemtype, --'ASOAPPRV',
1596 itemkey => TO_CHAR (
1597 i.approval_det_id
1598 ) || 'DET',
1599 process => '',
1600 result => 'CANCELLED'
1601 );
1602 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1603 aso_debug_pub.ADD (
1604 'Starting process CANCEL_REQUISITION itemtype is '
1605 || l_itemtype
1606 || ' and itemkey is '
1607 || l_itemkey,
1608 1,
1609 'N'
1610 );
1611 END IF;
1612 wf_engine.createprocess (
1613 itemtype => l_itemtype,
1614 itemkey => l_itemkey,
1615 process => 'CANCEL_REQUISITION'
1616 );
1617 wf_engine.setitemuserkey (
1618 itemtype => l_itemtype,
1619 itemkey => l_itemkey,
1620 userkey => l_itemkey
1621 );
1622 wf_engine.setitemattrnumber (
1623 itemtype => l_itemtype,
1624 itemkey => l_itemkey,
1625 aname => 'APPROVAL_DET_ID',
1626 avalue => i.approval_det_id
1627 );
1628 wf_engine.setitemattrtext (
1629 itemtype => l_itemtype, --'ASOAPPRV',
1630 itemkey => l_itemkey,
1631 aname => 'REQUESTOR_DISPLAYNAME',
1632 avalue => l_requestor_displayname
1633 );
1634 wf_engine.setitemattrtext (
1635 itemtype => l_itemtype, --'ASOAPPRV',
1636 itemkey => l_itemkey,
1637 aname => 'REQUESTOR_USERNAME',
1638 avalue => l_requestor_name
1639 );
1640 wf_engine.setitemattrtext (
1641 itemtype => l_itemtype,
1642 itemkey => l_itemkey,
1643 aname => 'RECEIVER_USERNAME',
1644 avalue => l_forward_user_name
1645 );
1646 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1647 aso_debug_pub.ADD (
1648 'Receiver username is ' || l_forward_user_name,
1649 1,
1650 'N'
1651 );
1652 END IF;
1653 l_forward_displayname :=
1654 wf_directory.getroledisplayname (
1655 l_forward_user_name
1656 );
1657 wf_engine.setitemattrtext (
1658 itemtype => l_itemtype,
1659 itemkey => l_itemkey,
1660 aname => 'RECEIVER_DISPLAYNAME',
1661 avalue => l_forward_displayname
1662 );
1663 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1664 aso_debug_pub.ADD (
1665 'Receiver displayname is ' || l_forward_displayname,
1666 1,
1667 'N'
1668 );
1669 END IF;
1670 wf_engine.setitemattrtext (
1671 itemtype => l_itemtype,
1672 itemkey => l_itemkey,
1673 aname => 'REQUEST_CANCELLOR_USERNAME',
1674 avalue => l_cancellor_username
1675 );
1676 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1677 aso_debug_pub.ADD (
1678 'Cancellor username is ' || l_cancellor_username,
1679 1,
1680 'N'
1681 );
1682 END IF;
1683 wf_engine.setitemattrtext (
1684 itemtype => l_itemtype,
1685 itemkey => l_itemkey,
1686 aname => 'REQUEST_CANCELLOR_DISPLAYNAME',
1687 avalue => l_cancellor_displayname
1688 );
1689 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1690 aso_debug_pub.ADD (
1691 'Cancellor displayname is ' || l_cancellor_displayname,
1692 1,
1693 'N'
1694 );
1695 END IF;
1696 wf_engine.setitemattrnumber (
1697 itemtype => l_itemtype, --'ASOAPPRV',
1698 itemkey => l_itemkey,
1699 aname => 'APPROVALID',
1700 avalue => l_approval_id
1701 );
1702
1703 wf_engine.startprocess (
1704 itemtype => l_itemtype,
1705 itemkey => l_itemkey
1706 );
1707 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1708 aso_debug_pub.ADD (
1709 'Updating detail table setting approver status to cancelled where det id :'
1710 || i.approval_det_id,
1711 1,
1712 'N'
1713 );
1714 END IF;
1715
1716 UPDATE aso_apr_approval_details
1717 SET approver_status = 'CAN',
1718 date_sent = SYSDATE,
1719 last_update_date = SYSDATE,
1720 last_updated_by = fnd_global.user_id,
1721 last_update_login = fnd_global.user_id
1722 WHERE approval_det_id = i.approval_det_id;
1723 END LOOP;
1724
1725 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1726 aso_debug_pub.ADD (
1727 'End of CancelApproval Procedure',
1728 1,
1729 'N'
1730 );
1731 END IF;
1732 EXCEPTION
1733 WHEN OTHERS
1734 THEN
1735 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1736 aso_debug_pub.ADD (
1737 'Exception in CancelApproval SqlCode :' || SQLERRM,
1738 1,
1739 'N'
1740 );
1741 END IF;
1742 fnd_msg_pub.count_and_get (
1743 p_encoded => 'F',
1744 p_count => x_msg_count,
1745 p_data => x_msg_data
1746 );
1747 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1748 aso_debug_pub.ADD (
1749 'no. of FND messages :' || x_msg_count,
1750 1,
1751 'N'
1752 );
1753 END IF;
1754
1755 FOR k IN 1 .. x_msg_count
1756 LOOP
1757 x_msg_data := fnd_msg_pub.get (
1758 p_msg_index => k,
1759 p_encoded => 'F'
1760 );
1761 END LOOP;
1762
1763 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1764 aso_debug_pub.ADD (
1765 'Msg Data is' || x_msg_data,
1766 1,
1767 'N'
1768 );
1769 END IF;
1770 wf_core.CONTEXT (
1771 'ASOAPPRV',
1772 'CancelApproval ' || x_msg_data,
1773 approval_id
1774 );
1775 RAISE;
1776 END cancelapproval;
1777
1778 PROCEDURE send_notification (
1779 itemtype IN VARCHAR2,
1780 itemkey IN VARCHAR2,
1781 actid IN NUMBER,
1782 funcmode IN VARCHAR2,
1783 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1784 ) IS
1785 l_requestor_display_name VARCHAR2 (240);
1786 l_message VARCHAR2 (240);
1787 l_notification_id NUMBER := 0;
1788 l_first_colon_pos NUMBER := 0;
1789 l_second_colon_pos NUMBER := 0;
1790 v_new_resultout VARCHAR2 (100);
1791 l_notifenabled VARCHAR2 (3) := 'Y';
1792 l_orgid NUMBER := NULL;
1793 l_approval_id NUMBER;
1794 x_return_status VARCHAR2 (240);
1795 x_msg_count NUMBER;
1796 x_msg_data VARCHAR2 (240);
1797 l_msgenabled VARCHAR2 (3) := 'Y';
1798 l_notifname VARCHAR2 (240);
1799 get_message_error EXCEPTION;
1800 notif_not_enabled_error EXCEPTION;
1801
1802 BEGIN
1803 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1804 aso_debug_pub.ADD (
1805 'Start of SEND NOTIFICATION Procedure',
1806 1,
1807 'N'
1808 );
1809 aso_debug_pub.ADD (
1810 'actid is ' || TO_CHAR (
1811 actid
1812 ),
1813 1,
1814 'N'
1815 );
1816 END IF;
1817
1818 IF funcmode = 'RUN'
1819 THEN
1820 -- Please note that the notification event name is same as message name
1821 l_notifname := wf_engine.getitemattrtext (
1822 itemtype,
1823 itemkey,
1824 'MESSAGE'
1825 );
1826 l_message := l_notifname;
1827 l_notifname := 'ASO_' || l_notifname;
1828 -- Check if the notification is enabled for that event
1829
1830 l_notifenabled := ibe_wf_notif_setup_pvt.check_notif_enabled (
1831 l_notifname
1832 );
1833 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1834 aso_debug_pub.ADD (
1835 'Notification Name: ' || l_notifname || ' Enabled: ' || l_notifenabled,
1836 1,
1837 'N'
1838 );
1839 END IF;
1840
1841 IF l_notifenabled = 'Y'
1842 THEN
1843 -- Get the approval id
1844 l_approval_id := wf_engine.getitemattrnumber (
1845 itemtype,
1846 itemkey,
1847 'APPROVALID'
1848 );
1849 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1850 aso_debug_pub.ADD (
1851 'Approval ID :' || l_approval_id,
1852 1,
1853 'N'
1854 );
1855 END IF;
1856 -- get the org id
1857 /*OPEN get_org_id (
1858 l_approval_id
1859 );
1860 FETCH get_org_id INTO l_orgid;
1861 CLOSE get_org_id; */
1862
1863 l_orgid := wf_engine.getitemattrnumber (
1864 itemtype,
1865 itemkey,
1866 'ORGID'
1867 );
1868
1869 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1870 aso_debug_pub.ADD (
1871 'Org Id is ' || l_orgid,
1872 1,
1873 'N'
1874 );
1875 END IF;
1876 -- Retreive the message name for that event
1877
1878 x_return_status := fnd_api.g_ret_sts_success;
1879
1880 ibe_wf_msg_mapping_pvt.retrieve_msg_mapping (
1881 p_org_id => l_orgid,
1882 p_msite_id => NULL,
1883 p_user_type => NULL,
1884 p_notif_name => l_notifname,
1885 x_enabled_flag => l_msgenabled,
1886 x_wf_message_name => l_message,
1887 x_return_status => x_return_status,
1888 x_msg_data => x_msg_data,
1889 x_msg_count => x_msg_count
1890 );
1891 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1892 aso_debug_pub.ADD (
1893 'Message Name: ' || l_message || ' Enabled: ' || l_msgenabled,
1894 1,
1895 'N'
1896 );
1897 END IF;
1898
1899 -- bug 3295179
1900 IF ( (x_return_status <> fnd_api.g_ret_sts_success) OR (l_message IS NULL) )
1901 --IF ((x_msg_count > 0)
1902 -- OR (l_message IS NULL)
1903 -- )
1904 THEN
1905 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1906 aso_debug_pub.ADD (
1907 'Message count is :' || x_msg_count,
1908 1,
1909 'N'
1910 );
1911 END IF;
1912 RAISE get_message_error;
1913 END IF;
1914
1915 IF l_msgenabled = 'Y'
1916 THEN
1917 -- Set the message name
1918 wf_engine.setitemattrtext (
1919 itemtype => itemtype,
1920 itemkey => itemkey,
1921 aname => 'MESSAGE',
1922 avalue => l_message
1923 );
1924 END IF;
1925 END IF;
1926
1927 IF (l_msgenabled <> 'Y')
1928 OR (l_notifenabled <> 'Y')
1929 THEN
1930 -- if the event is not enabled or message is not enabled
1931 -- if the notification requires a response
1932 IF ((l_message LIKE 'REQUEST_APPROVAL%') OR (l_message LIKE 'OA_REQUEST_APPROVAL%'))
1933 THEN
1934 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1935 aso_debug_pub.ADD (
1936 'Notification not enabled for REQUEST_APPROVAL',
1937 1,
1938 'N'
1939 );
1940 END IF;
1941 RAISE notif_not_enabled_error;
1942 ELSE
1943 -- if the notification is a FYI
1944 -- Check for FYI Message and if so make the attribute as Approval Message
1945 IF ((l_message LIKE 'FYI_TO_REQUESTER%') OR (l_message LIKE 'OA_FYI_TO_REQUESTER%'))
1946 THEN
1947 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1948 aso_debug_pub.ADD (
1949 'Setting the message name to OA_REQUEST_APPROVAL',
1950 1,
1951 'N'
1952 );
1953 END IF;
1954 wf_engine.setitemattrtext (
1955 itemtype => itemtype,
1956 itemkey => itemkey,
1957 aname => 'MESSAGE',
1958 avalue => 'OA_REQUEST_APPROVAL'
1959 );
1960 END IF;
1961
1962 resultout := 'COMPLETE';
1963 RETURN;
1964 END IF;
1965 END IF;
1966
1967 l_message := wf_engine.getitemattrtext (
1968 itemtype,
1969 itemkey,
1970 'MESSAGE'
1971 );
1972 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1973 aso_debug_pub.ADD (
1974 'Message is ' || l_message,
1975 1,
1976 'N'
1977 );
1978 END IF;
1979
1980 IF ((l_message LIKE 'REQUEST_APPROVAL_REMINDER%') OR (l_message LIKE 'OA_REQUEST_APPROVAL_REM%'))
1981 THEN
1982 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1983 aso_debug_pub.ADD (
1984 'As Message is REQUEST_APPROVAL_REMINDER will cancel original approval notif',
1985 1,
1986 'N'
1987 );
1988 END IF;
1989 l_notification_id := wf_engine.getitemattrnumber (
1990 itemtype,
1991 itemkey,
1992 'NOTIFICATION_ID'
1993 );
1994 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1995 aso_debug_pub.ADD (
1996 'Cancelling notification for notification ID :' || l_notification_id,
1997 1,
1998 'N'
1999 );
2000 END IF;
2001 wf_notification.CANCEL (
2002 nid => l_notification_id,
2003 cancel_comment => 'TIMEOUT'
2004 );
2005 END IF;
2006
2007 wf_standard.notify (
2008 itemtype,
2009 itemkey,
2010 actid,
2011 funcmode,
2012 resultout
2013 );
2014 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2015 aso_debug_pub.ADD (
2016 'Calling the standard notify process for Itemtype :'
2017 || itemtype
2018 || ' and itemkey :'
2019 || itemkey,
2020 1,
2021 'N'
2022 );
2023 END IF;
2024 -- Store the Notification id for timeout
2025
2026 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2027 aso_debug_pub.ADD (
2028 'Storing the notification id so as to be used in timeout case ',
2029 1,
2030 'N'
2031 );
2032 END IF;
2033
2034 IF (resultout IS NOT NULL)
2035 THEN
2036 l_first_colon_pos := INSTR (
2037 resultout,
2038 ':',
2039 1,
2040 1
2041 );
2042 l_second_colon_pos := INSTR (
2043 resultout,
2044 ':',
2045 1,
2046 2
2047 );
2048
2049 IF ((l_first_colon_pos <> 0)
2050 AND (l_second_colon_pos <> 0)
2051 )
2052 THEN
2053 l_notification_id := TO_NUMBER (
2054 SUBSTR (
2055 resultout,
2056 l_first_colon_pos + 1,
2057 l_second_colon_pos - l_first_colon_pos - 1
2058 )
2059 );
2060 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2061 aso_debug_pub.ADD (
2062 'Notification id is ' || l_notification_id,
2063 1,
2064 'N'
2065 );
2066 END IF;
2067 wf_engine.setitemattrnumber (
2068 itemtype => itemtype,
2069 itemkey => itemkey,
2070 aname => 'NOTIFICATION_ID',
2071 avalue => l_notification_id
2072 );
2073 END IF;
2074 END IF;
2075
2076 -- Check for FYI Message and if so make the attribute as Approval Message
2077 IF ((l_message LIKE 'FYI_TO_REQUESTER%') or (l_message LIKE 'OA_FYI_TO_REQUESTER%'))
2078 THEN
2079 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2080 aso_debug_pub.ADD (
2081 'Setting the message name to OA_REQUEST_APPROVAL',
2082 1,
2083 'N'
2084 );
2085 END IF;
2086 wf_engine.setitemattrtext (
2087 itemtype => itemtype,
2088 itemkey => itemkey,
2089 aname => 'MESSAGE',
2090 avalue => 'OA_REQUEST_APPROVAL'
2091 );
2092 ELSIF ((l_message LIKE 'REQUEST_APPROVAL%') or (l_message LIKE 'OA_REQUEST_APPROVAL%'))
2093 THEN
2094 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2095 aso_debug_pub.ADD (
2096 'Setting the message name to OA_REQUEST_APPROVAL_REM',
2097 1,
2098 'N'
2099 );
2100 END IF;
2101 wf_engine.setitemattrtext (
2102 itemtype => itemtype,
2103 itemkey => itemkey,
2104 aname => 'MESSAGE',
2105 avalue => 'OA_REQUEST_APPROVAL_REM'
2106 );
2107 END IF;
2108
2109 -- resultout := 'COMPLETE';
2110 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2111 aso_debug_pub.ADD (
2112 'End of SEND NOTIFICATION Procedure ',
2113 1,
2114 'N'
2115 );
2116 END IF;
2117 RETURN;
2118 END IF;
2119
2120 IF (funcmode = 'CANCEL')
2121 THEN
2122 resultout := 'COMPLETE';
2123 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2124 aso_debug_pub.ADD (
2125 'End of SEND NOTIFICATION Procedure ',
2126 1,
2127 'N'
2128 );
2129 END IF;
2130 RETURN;
2131 END IF;
2132
2133 resultout := '';
2134 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2135 aso_debug_pub.ADD (
2136 'End of SEND NOTIFICATION Procedure ',
2137 1,
2138 'N'
2139 );
2140 END IF;
2141 RETURN;
2142 EXCEPTION
2143 WHEN notif_not_enabled_error
2144 THEN
2145 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2146 aso_debug_pub.ADD (
2147 'Exception in SEND_NOTIFICATION Proc SqlCode :' || SQLERRM,
2148 1,
2149 'N'
2150 );
2151 END IF;
2152 wf_core.CONTEXT (
2153 'ASOAPPRV',
2154 'SEND_NOTIFICATION',
2155 'Mandatory Notification Name: ' || l_notifname || ' is not Enabled '
2156 );
2157 RAISE;
2158 WHEN get_message_error
2159 THEN
2160 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2161 aso_debug_pub.ADD (
2162 'Exception in SEND_NOTIFICATION Proc SqlCode :' || SQLERRM,
2163 1,
2164 'N'
2165 );
2166 END IF;
2167 wf_core.CONTEXT (
2168 'ASOAPPRV',
2169 'SEND_NOTIFICATION',
2170 'Error in retreiving Notification Message',
2171 'Message Name: ' || l_message || ' Enabled: ' || l_msgenabled
2172 );
2173 RAISE;
2174 WHEN OTHERS
2175 THEN
2176 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2177 aso_debug_pub.ADD (
2178 'Exception in SEND_NOTIFICATION Proc SqlCode :' || SQLERRM,
2179 1,
2180 'N'
2181 );
2182 END IF;
2183 wf_core.CONTEXT (
2184 'ASOAPPRV',
2185 'SEND_NOTIFICATION',
2186 itemtype,
2187 itemkey,
2188 TO_CHAR (
2189 actid
2190 ),
2191 funcmode
2192 );
2193 RAISE;
2194 END send_notification;
2195
2196 PROCEDURE update_entity (
2197 itemtype IN VARCHAR2,
2198 itemkey IN VARCHAR2,
2199 actid IN NUMBER,
2200 funcmode IN VARCHAR2,
2201 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2202 ) IS
2203 l_contract_approval_level VARCHAR2 (240);
2204 l_quote_header_rec aso_quote_pub.qte_header_rec_type;
2205 l_control_rec aso_quote_pub.control_rec_type;
2206 x_qte_header_rec aso_quote_pub.qte_header_rec_type;
2207 x_qte_line_tbl aso_quote_pub.qte_line_tbl_type;
2208 x_qte_line_dtl_tbl aso_quote_pub.qte_line_dtl_tbl_type;
2209 x_hd_price_attributes_tbl aso_quote_pub.price_attributes_tbl_type;
2210 x_hd_payment_tbl aso_quote_pub.payment_tbl_type;
2211 x_hd_shipment_tbl aso_quote_pub.shipment_tbl_type;
2212 x_hd_freight_charge_tbl aso_quote_pub.freight_charge_tbl_type;
2213 x_hd_tax_detail_tbl aso_quote_pub.tax_detail_tbl_type;
2214 x_line_attr_ext_tbl aso_quote_pub.line_attribs_ext_tbl_type;
2215 x_line_rltship_tbl aso_quote_pub.line_rltship_tbl_type;
2216 x_price_adjustment_tbl aso_quote_pub.price_adj_tbl_type;
2217 x_price_adj_attr_tbl aso_quote_pub.price_adj_attr_tbl_type;
2218 x_price_adj_rltship_tbl aso_quote_pub.price_adj_rltship_tbl_type;
2219 x_ln_price_attributes_tbl aso_quote_pub.price_attributes_tbl_type;
2220 x_ln_payment_tbl aso_quote_pub.payment_tbl_type;
2221 x_ln_shipment_tbl aso_quote_pub.shipment_tbl_type;
2222 x_ln_freight_charge_tbl aso_quote_pub.freight_charge_tbl_type;
2223 x_ln_tax_detail_tbl aso_quote_pub.tax_detail_tbl_type;
2224 x_return_status VARCHAR2 (240);
2225 x_msg_count NUMBER;
2226 x_msg_data VARCHAR2 (240);
2227 l_user_id Number;
2228 l_person_id Number;
2229 l_object_approval_id NUMBER;
2230 l_status varchar2(20);
2231 l_notifname varchar2(240);
2232 CURSOR get_quote_header_id (
2233 c_object_approval_id NUMBER
2234 ) IS
2235 SELECT object_id
2236 FROM aso_apr_obj_approvals
2237 WHERE object_approval_id = c_object_approval_id;
2238
2239 CURSOR check_contract_enabled (
2240 c_quote_header_id NUMBER
2241 ) IS
2242 SELECT contract_approval_level
2243 FROM aso_quote_headers_all
2244 WHERE quote_header_id = c_quote_header_id;
2245
2246 CURSOR get_latest_date (
2247 c_quote_header_id NUMBER
2248 ) IS
2249 SELECT last_update_date,org_id
2250 FROM aso_quote_headers_all
2251 WHERE quote_header_id = c_quote_header_id;
2252
2253 CURSOR get_quote_status_id (
2254 v_status VARCHAR2
2255 ) IS
2256 SELECT quote_status_id
2257 FROM aso_quote_statuses_b
2258 WHERE status_code = v_status;
2259
2260 CURSOR get_last_approver (
2261 c_object_approval_id NUMBER
2262 ) IS
2263 SELECT approver_person_id
2264 FROM aso_apr_approval_details
2265 WHERE object_approval_id = c_object_approval_id
2266 AND approver_sequence = (select max(approver_sequence)
2267 FROM aso_apr_approval_details
2268 WHERE object_approval_id = c_object_approval_id);
2269
2270 CURSOR get_user_id ( c_employee_id NUMBER)
2271 IS
2272 SELECT user_id
2273 FROM fnd_user
2274 WHERE employee_id = c_employee_id;
2275
2276
2277
2278 CURSOR get_rejected_approver (c_object_approval_id NUMBER) IS
2279 SELECT approver_person_id
2280 FROM aso_apr_approval_details
2281 WHERE object_approval_id = c_object_approval_id
2282 AND approver_status = 'REJ';
2283
2284 BEGIN
2285 -- Initialize the quote header record
2286
2287 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2288 aso_debug_pub.ADD (
2289 'Begin Update Entity Procedure ',
2290 1,
2291 'N'
2292 );
2293 END IF;
2294
2295 IF funcmode = 'RUN' THEN
2296
2297 l_object_approval_id := wf_engine.getitemattrnumber (
2298 itemtype,
2299 itemkey,
2300 'APPROVALID'
2301 );
2302
2303 l_notifname := wf_engine.getitemattrtext (
2304 itemtype,
2305 itemkey,
2306 'MESSAGE'
2307 );
2308 IF l_notifname = 'OA_REQUEST_REJECTED' then
2309 l_status := 'REJ';
2310 ELSIF l_notifname = 'OA_REQ_APPR_BY_ALL_APPR' THEN
2311 l_status := 'APPR';
2312 END IF;
2313
2314 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2315 aso_debug_pub.ADD (
2316 'Object approval ID :' || l_object_approval_id,
2317 1,
2318 'N'
2319 );
2320 aso_debug_pub.ADD (
2321 'Status :' || l_status,
2322 1,
2323 'N'
2324 );
2325 END IF;
2326 --g_user_id := fnd_global.user_id;
2327 -- fix for bug 3929409
2328 IF l_status = 'APPR' THEN
2329 OPEN get_last_approver (
2330 l_object_approval_id
2331 );
2332 FETCH get_last_approver INTO l_person_id;
2333 CLOSE get_last_approver;
2334
2335 OPEN get_user_id(l_person_id);
2336 FETCH get_user_id INTO l_user_id;
2337 CLOSE get_user_id;
2338
2339 g_user_id := l_user_id;
2340 ELSIF l_status = 'REJ' THEN
2341 OPEN get_rejected_approver(l_object_approval_id);
2342 FETCH get_rejected_approver into l_person_id;
2343 CLOSE get_rejected_approver;
2344
2345 OPEN get_user_id(l_person_id);
2346 FETCH get_user_id INTO l_user_id;
2347 CLOSE get_user_id;
2348 g_user_id := l_user_id;
2349
2350 ELSE
2351 g_user_id := fnd_global.user_id;
2352
2353 END IF;
2354
2355 FND_GLOBAL.APPS_INITIALIZE(g_user_id,0,0,0);
2356
2357
2358 l_quote_header_rec := aso_quote_pub.g_miss_qte_header_rec;
2359
2360 OPEN get_quote_header_id (
2361 l_object_approval_id
2362 );
2363 FETCH get_quote_header_id INTO l_quote_header_rec.quote_header_id;
2364 CLOSE get_quote_header_id;
2365 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2366 aso_debug_pub.ADD (
2367 'Quote Header ID :' || l_quote_header_rec.quote_header_id,
2368 1,
2369 'N'
2370 );
2371 END IF;
2372 -- Check if contract is enabled for the quote
2373 OPEN check_contract_enabled (
2374 l_quote_header_rec.quote_header_id
2375 );
2376 FETCH check_contract_enabled INTO l_contract_approval_level;
2377 CLOSE check_contract_enabled;
2378
2379 -- setting the quote status id
2380 IF l_status = 'APPR'
2381 THEN
2382 -- if contract is enabled, set status to contract enables
2383 IF l_contract_approval_level IS NOT NULL
2384 THEN
2385 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2386 aso_debug_pub.ADD (
2387 'Setting Quote Status to CONTRACT REQUIRED',
2388 1,
2389 'N'
2390 );
2391 END IF;
2392 OPEN get_quote_status_id (
2393 'CONTRACT REQUIRED'
2394 );
2395 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2396 CLOSE get_quote_status_id;
2397 ELSE
2398 -- otherwise set status to APPROVED
2399 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2400 aso_debug_pub.ADD (
2401 'Setting Quote Status to APPROVED',
2402 1,
2403 'N'
2404 );
2405 END IF;
2406 OPEN get_quote_status_id (
2407 'APPROVED'
2408 );
2409 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2410 CLOSE get_quote_status_id;
2411 END IF;
2412 ELSIF l_status = 'REJ'
2413 THEN
2414 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2415 aso_debug_pub.ADD (
2416 'Setting Quote Status to REJECTED',
2417 1,
2418 'N'
2419 );
2420 END IF;
2421 OPEN get_quote_status_id (
2422 'APPROVAL REJECTED'
2423 );
2424 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2425 CLOSE get_quote_status_id;
2426 ELSIF l_status = 'CAN'
2427 THEN
2428 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2429 aso_debug_pub.ADD (
2430 'Setting Quote Status to APPROVAL CANCELLED ',
2431 1,
2432 'N'
2433 );
2434 END IF;
2435 OPEN get_quote_status_id (
2436 'APPROVAL CANCELED'
2437 );
2438 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2439 CLOSE get_quote_status_id;
2440 ELSIF l_status = 'PEND'
2441 THEN
2442 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2443 aso_debug_pub.ADD (
2444 'Setting Quote Status to APPROVAL PENDING',
2445 1,
2446 'N'
2447 );
2448 END IF;
2449 OPEN get_quote_status_id (
2450 'APPROVAL PENDING'
2451 );
2452 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2453 CLOSE get_quote_status_id;
2454 END IF;
2455
2456 OPEN get_latest_date (
2457 l_quote_header_rec.quote_header_id
2458 );
2459 FETCH get_latest_date INTO l_quote_header_rec.last_update_date, l_quote_header_rec.org_id;
2460 CLOSE get_latest_date;
2461 -- Setting the auto version flag to true
2462 l_control_rec.auto_version_flag := fnd_api.g_true;
2463
2464 -- set the org context , see bug 4731684
2465 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2466 aso_debug_pub.ADD (
2467 'Before calling update quote: Setting the single org context to org_id: '|| l_quote_header_rec.org_id,
2468 1,
2469 'N'
2470 );
2471 END IF;
2472 mo_global.set_policy_context('S', l_quote_header_rec.org_id);
2473
2474
2475 -- Update the quote status by calling the update_quote API
2476
2477 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2478 aso_debug_pub.ADD (
2479 'Calling the update quote API in ASO_UPDATE_QUOTE_PUB package ',
2480 1,
2481 'N'
2482 );
2483 END IF;
2484 aso_quote_pub.update_quote (
2485 p_api_version_number => 1.0,
2486 p_init_msg_list => fnd_api.g_false,
2487 p_commit => fnd_api.g_false,
2488 p_control_rec => l_control_rec,
2489 p_qte_header_rec => l_quote_header_rec,
2490 p_hd_price_attributes_tbl => aso_quote_pub.g_miss_price_attributes_tbl,
2491 p_hd_payment_tbl => aso_quote_pub.g_miss_payment_tbl,
2492 p_hd_shipment_tbl => aso_quote_pub.g_miss_shipment_tbl,
2493 p_hd_freight_charge_tbl => aso_quote_pub.g_miss_freight_charge_tbl,
2494 p_hd_tax_detail_tbl => aso_quote_pub.g_miss_tax_detail_tbl,
2495 p_qte_line_tbl => aso_quote_pub.g_miss_qte_line_tbl,
2496 p_qte_line_dtl_tbl => aso_quote_pub.g_miss_qte_line_dtl_tbl,
2497 p_line_attr_ext_tbl => aso_quote_pub.g_miss_line_attribs_ext_tbl,
2498 p_line_rltship_tbl => aso_quote_pub.g_miss_line_rltship_tbl,
2499 p_price_adjustment_tbl => aso_quote_pub.g_miss_price_adj_tbl,
2500 p_price_adj_attr_tbl => aso_quote_pub.g_miss_price_adj_attr_tbl,
2501 p_price_adj_rltship_tbl => aso_quote_pub.g_miss_price_adj_rltship_tbl,
2502 p_ln_price_attributes_tbl => aso_quote_pub.g_miss_price_attributes_tbl,
2503 p_ln_payment_tbl => aso_quote_pub.g_miss_payment_tbl,
2504 p_ln_shipment_tbl => aso_quote_pub.g_miss_shipment_tbl,
2505 p_ln_freight_charge_tbl => aso_quote_pub.g_miss_freight_charge_tbl,
2506 p_ln_tax_detail_tbl => aso_quote_pub.g_miss_tax_detail_tbl,
2507 x_qte_header_rec => x_qte_header_rec,
2508 x_qte_line_tbl => x_qte_line_tbl,
2509 x_qte_line_dtl_tbl => x_qte_line_dtl_tbl,
2510 x_hd_price_attributes_tbl => x_hd_price_attributes_tbl,
2511 x_hd_payment_tbl => x_hd_payment_tbl,
2512 x_hd_shipment_tbl => x_hd_shipment_tbl,
2513 x_hd_freight_charge_tbl => x_hd_freight_charge_tbl,
2514 x_hd_tax_detail_tbl => x_hd_tax_detail_tbl,
2515 x_line_attr_ext_tbl => x_line_attr_ext_tbl,
2516 x_line_rltship_tbl => x_line_rltship_tbl,
2517 x_price_adjustment_tbl => x_price_adjustment_tbl,
2518 x_price_adj_attr_tbl => x_price_adj_attr_tbl,
2519 x_price_adj_rltship_tbl => x_price_adj_rltship_tbl,
2520 x_ln_price_attributes_tbl => x_ln_price_attributes_tbl,
2521 x_ln_payment_tbl => x_ln_payment_tbl,
2522 x_ln_shipment_tbl => x_ln_shipment_tbl,
2523 x_ln_freight_charge_tbl => x_ln_freight_charge_tbl,
2524 x_ln_tax_detail_tbl => x_ln_tax_detail_tbl,
2525 x_return_status => x_return_status,
2526 x_msg_count => x_msg_count,
2527 x_msg_data => x_msg_data
2528 );
2529
2530 IF x_return_status <> fnd_api.g_ret_sts_success
2531 THEN
2532 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2533 aso_debug_pub.ADD (
2534 'Return Status from update quote API is :' || x_return_status,
2535 1,
2536 'N'
2537 );
2538 END IF;
2539
2540
2541 /*bug 3500380 */
2542 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2543 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2544 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
2545 RAISE FND_API.G_EXC_ERROR;
2546 END IF;
2547 --RAISE update_quote_exception;
2548
2549
2550 END IF;
2551
2552 -- set the org context , see bug 4731684
2553 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2554 aso_debug_pub.ADD (
2555 'After calling update quote Setting the org context to multi-org org_id:null',
2556 1,
2557 'N'
2558 );
2559 END IF;
2560
2561 mo_global.set_policy_context('M',null);
2562
2563
2564 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2565 aso_debug_pub.ADD (
2566 'End update entity procedure ',
2567 1,
2568 'N'
2569 );
2570 END IF;
2571
2572 resultout := 'COMPLETE:T';
2573 END IF;
2574 EXCEPTION
2575
2576 /*bug 3500380 */
2577 WHEN FND_API.G_EXC_ERROR THEN
2578 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2579 aso_debug_pub.ADD (
2580 'Exception in update entity ',
2581 1,
2582 'N'
2583 );
2584 END IF;
2585 wf_core.CONTEXT (
2586 'ASOAPPRV',
2587 'update_entity',
2588 itemtype,
2589 itemkey,
2590 TO_CHAR(actid),
2591 funcmode);
2592 RAISE;
2593
2594 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2595 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2596 aso_debug_pub.ADD (
2597 'Exception in update entity ',
2598 1,
2599 'N'
2600 );
2601 END IF;
2602 wf_core.CONTEXT (
2603 'ASOAPPRV',
2604 'update_entity',
2605 itemtype,
2606 itemkey,
2607 TO_CHAR(actid),
2608 funcmode);
2609 RAISE;
2610
2611 WHEN OTHERS THEN
2612 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2613 aso_debug_pub.ADD (
2614 'Exception in update entity ',
2615 1,
2616 'N'
2617 );
2618 END IF;
2619 wf_core.CONTEXT (
2620 'ASOAPPRV',
2621 'update_entity',
2622 itemtype,
2623 itemkey,
2624 TO_CHAR(actid),
2625 funcmode);
2626 RAISE;
2627
2628 END update_entity;
2629
2630 PROCEDURE update_approver_list (
2631 p_object_approval_id IN NUMBER
2632 ) IS
2633 l_approvers_changed_flag VARCHAR2 (1) := 'N';
2634 l_last_approved_approver NUMBER := 0;
2635 x_approvers_list aso_apr_pub.approvers_list_tbl_type;
2636 x_rules_list aso_apr_pub.rules_list_tbl_type;
2637 l_return_status VARCHAR2 (20);
2638 l_msg_count NUMBER;
2639 l_msg_data VARCHAR2 (2000);
2640 l_object_id NUMBER;
2641 l_object_type VARCHAR2 (240);
2642 l_application_id NUMBER;
2643 l_approver_status VARCHAR2 (30);
2644 l_approval_det_id NUMBER;
2645 l_approver_person_id NUMBER;
2646 l_approver_user_id NUMBER;
2647 l_approver_count NUMBER;
2648 j INTEGER;
2649 p_rule_id NUMBER;
2650 get_all_approvers_failed EXCEPTION;
2651 l_oam_rule_id NUMBER;
2652 l_rule_count NUMBER;
2653 l_rules_changed_flag VARCHAR2 (1) := 'N';
2654
2655 TYPE existing_approvers_tbl_type IS TABLE OF aso_apr_approval_details%ROWTYPE
2656 INDEX BY BINARY_INTEGER;
2657
2658 l_new_approvers_tbl existing_approvers_tbl_type;
2659 l_employee_id NUMBER;
2660
2661 CURSOR get_object_id (
2662 c_object_approval_id NUMBER
2663 ) IS
2664 SELECT DISTINCT object_id, object_type, application_id
2665 FROM aso_apr_obj_approvals
2666 WHERE object_approval_id = c_object_approval_id;
2667
2668 CURSOR get_existing_approvers (
2669 c_object_approval_id NUMBER
2670 ) IS
2671 SELECT approval_det_id, approver_person_id, approver_user_id,
2672 approver_status
2673 FROM aso_apr_approval_details
2674 WHERE object_approval_id = c_object_approval_id
2675 ORDER BY approver_sequence;
2676
2677 CURSOR get_approver_count (
2678 c_object_approval_id NUMBER
2679 ) IS
2680 SELECT COUNT (
2681 *
2682 )
2683 FROM aso_apr_approval_details
2684 WHERE object_approval_id = c_object_approval_id;
2685
2686 CURSOR get_old_approvers (
2687 c_object_approval_id NUMBER,
2688 c_approval_det_id NUMBER
2689 ) IS
2690 SELECT *
2691 FROM aso_apr_approval_details
2692 WHERE object_approval_id = c_object_approval_id
2693 AND approval_det_id = c_approval_det_id;
2694
2695 CURSOR get_existing_rules (
2696 c_object_approval_id NUMBER
2697 ) IS
2698 SELECT oam_rule_id
2699 FROM aso_apr_rules
2700 WHERE object_approval_id = c_object_approval_id
2701 ORDER BY rule_id;
2702
2703 CURSOR get_rule_count (
2704 c_object_approval_id NUMBER
2705 ) IS
2706 SELECT COUNT (
2707 *
2708 )
2709 FROM aso_apr_rules
2710 WHERE object_approval_id = c_object_approval_id;
2711
2712 cursor get_employee_id(l_user_id NUMBER) IS
2713 select employee_id
2714 from fnd_user
2715 where user_id = l_user_id;
2716
2717
2718 BEGIN
2719 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2720 aso_debug_pub.ADD (
2721 'Begin update approver list procedure ',
2722 1,
2723 'N'
2724 );
2725 END IF;
2726 g_user_id := fnd_global.user_id;
2727 -- get the latest list of approvers
2728 OPEN get_object_id (
2729 p_object_approval_id
2730 );
2731 FETCH get_object_id INTO l_object_id, l_object_type, l_application_id;
2732 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2733 aso_debug_pub.ADD (
2734 'Object ID :' || l_object_id,
2735 1,
2736 'N'
2737 );
2738 aso_debug_pub.ADD (
2739 'Object Type :' || l_object_type,
2740 1,
2741 'N'
2742 );
2743 aso_debug_pub.ADD (
2744 'application id :' || l_application_id,
2745 1,
2746 'N'
2747 );
2748 END IF;
2749 -- calling the get all approvers to get the latest list of approvers
2750 -- please note that we are passing the clear transaction flag as false
2751 -- this is to ensure that get all approvers does not clear transactions
2752
2753 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2754 aso_debug_pub.ADD (
2755 'Calling get_all_approvers',
2756 1,
2757 'N'
2758 );
2759 END IF;
2760 aso_apr_int.get_all_approvers (
2761 1.0,
2762 fnd_api.g_false,
2763 fnd_api.g_false,
2764 l_object_id,
2765 l_object_type,
2766 l_application_id, ---p_application_id,
2767 fnd_api.g_false, --- p_clear_transaction_flag
2768 l_return_status,
2769 l_msg_count,
2770 l_msg_data,
2771 x_approvers_list,
2772 x_rules_list
2773 );
2774 CLOSE get_object_id;
2775
2776 -- Checking to find OUT NOCOPY /* file.sql.39 change */ if call to get_all_approvers was successfull
2777 IF l_return_status <> fnd_api.g_ret_sts_success
2778 THEN
2779 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2780 aso_debug_pub.ADD (
2781 'Status returned from get_all_approvers procedure :' || l_return_status,
2782 1,
2783 'N'
2784 );
2785 END IF;
2786 -- RAISE get_all_approvers_failed;
2787 RETURN;
2788 END IF;
2789
2790 -- fix for bug 4590633
2791
2792 for i in 1..x_approvers_list.count loop
2793
2794 IF ((x_approvers_list(i).approver_person_id is null) or (x_approvers_list(i).approver_person_id = fnd_api.g_miss_num) and
2795 (x_approvers_list(i).approver_user_id is not null) and (x_approvers_list(i).approver_user_id <> fnd_api.g_miss_num)) then
2796
2797 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2798 aso_debug_pub.ADD ('Person_id is null from AME Hence deriving it from user_id',1,'N');
2799 END IF;
2800
2801 open get_employee_id(x_approvers_list(i).approver_user_id);
2802 fetch get_employee_id into x_approvers_list(i).approver_person_id;
2803 close get_employee_id;
2804
2805 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2806 aso_debug_pub.ADD ('Derived person_id is: '||to_char(x_approvers_list(i).approver_person_id),1,'N');
2807 END IF;
2808
2809 END IF;
2810 end loop;
2811
2812 -- end of fix for bug 4590633
2813
2814 --- comparing the count between old and new list
2815 OPEN get_approver_count (
2816 p_object_approval_id
2817 );
2818 FETCH get_approver_count INTO l_approver_count;
2819 CLOSE get_approver_count;
2820
2821 IF l_approver_count <> x_approvers_list.COUNT
2822 THEN
2823 l_approvers_changed_flag := 'Y';
2824 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2825 aso_debug_pub.ADD (
2826 'The approvers list has changed ',
2827 1,
2828 'N'
2829 );
2830 END IF;
2831 ELSE
2832 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2833 aso_debug_pub.ADD (
2834 'Comparing the old list from table and the latest list ',
2835 1,
2836 'N'
2837 );
2838 END IF;
2839 -- first loop to find OUT NOCOPY /* file.sql.39 change */ if the data has changed
2840 OPEN get_existing_approvers (
2841 p_object_approval_id
2842 );
2843
2844 FOR i IN 1 .. x_approvers_list.COUNT
2845 LOOP
2846 FETCH get_existing_approvers INTO l_approval_det_id,
2847 l_approver_person_id,
2848 l_approver_user_id,
2849 l_approver_status;
2850 EXIT WHEN get_existing_approvers%NOTFOUND;
2851
2852 -- Make sure that if miss num is passed back from ame api, then it is
2853 -- converted into a null
2854
2855 IF x_approvers_list (
2856 i
2857 ).approver_person_id = fnd_api.g_miss_num
2858 THEN
2859 x_approvers_list (
2860 i
2861 ).approver_person_id := NULL;
2862 END IF;
2863
2864 IF x_approvers_list (
2865 i
2866 ).approver_user_id = fnd_api.g_miss_num
2867 THEN
2868 x_approvers_list (
2869 i
2870 ).approver_user_id := NULL;
2871 END IF;
2872
2873 IF ((l_approver_person_id <> x_approvers_list (
2874 i
2875 ).approver_person_id
2876 )
2877 OR (l_approver_user_id <> x_approvers_list (
2878 i
2879 ).approver_user_id
2880 )
2881 )
2882 THEN
2883 l_approvers_changed_flag := 'Y';
2884 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2885 aso_debug_pub.ADD (
2886 'The approvers list has changed ',
2887 1,
2888 'N'
2889 );
2890 END IF;
2891 EXIT;
2892 ELSE
2893 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2894 aso_debug_pub.ADD (
2895 'The approvers list has not changed ',
2896 1,
2897 'N'
2898 );
2899 END IF;
2900 l_approvers_changed_flag := 'N';
2901 END IF;
2902 END LOOP;
2903
2904 CLOSE get_existing_approvers;
2905 END IF;
2906
2907 -- if the data has changed
2908
2909 IF l_approvers_changed_flag = 'Y'
2910 THEN
2911 -- copying latest list into the new data structure ( x to y)
2912
2913 FOR i IN 1 .. x_approvers_list.COUNT
2914 LOOP
2915 l_new_approvers_tbl (
2916 i
2917 ).approver_user_id :=
2918 x_approvers_list (
2919 i
2920 ).approver_user_id;
2921 l_new_approvers_tbl (
2922 i
2923 ).approver_person_id :=
2924 x_approvers_list (
2925 i
2926 ).approver_person_id;
2927 l_new_approvers_tbl (
2928 i
2929 ).approver_sequence := i;
2930 -- Initialize the manadatory columns
2931 l_new_approvers_tbl (
2932 i
2933 ).creation_date := SYSDATE;
2934 l_new_approvers_tbl (
2935 i
2936 ).last_update_date := SYSDATE;
2937 l_new_approvers_tbl (
2938 i
2939 ).object_approval_id := p_object_approval_id;
2940 END LOOP;
2941
2942 -- comparing new data structure and existing approvers in database and if person or user id matches, copying
2943 -- existing approvers into the new data structure ( comparing Y and E and copying E to Y )
2944
2945 FOR i IN get_existing_approvers (
2946 p_object_approval_id
2947 )
2948 LOOP
2949 FOR k IN 1 .. l_new_approvers_tbl.COUNT
2950 LOOP
2951 IF ((i.approver_person_id = l_new_approvers_tbl (
2952 k
2953 ).approver_person_id
2954 )
2955 OR (i.approver_user_id = l_new_approvers_tbl (
2956 k
2957 ).approver_user_id
2958 )
2959 )
2960 THEN
2961 OPEN get_old_approvers (
2962 p_object_approval_id,
2963 i.approval_det_id
2964 );
2965 FETCH get_old_approvers INTO l_new_approvers_tbl (
2966 k
2967 );
2968 CLOSE get_old_approvers;
2969 END IF;
2970 END LOOP;
2971 END LOOP;
2972
2973 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2974 aso_debug_pub.ADD (
2975 'Deleting approvers from detail table where object_approval_id :'
2976 || p_object_approval_id,
2977 1,
2978 'N'
2979 );
2980 END IF;
2981
2982 DELETE FROM aso_apr_approval_details
2983 WHERE object_approval_id = p_object_approval_id;
2984
2985 l_approver_status := NULL;
2986 -- third loop to insert the data
2987
2988 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2989 aso_debug_pub.ADD (
2990 'New Approver count is ' || TO_CHAR (
2991 l_new_approvers_tbl.COUNT
2992 ),
2993 1,
2994 'N'
2995 );
2996 END IF;
2997 -- traversing the data structure from bottom up
2998 j := l_new_approvers_tbl.COUNT;
2999
3000 WHILE j <> 0
3001 LOOP
3002 -- if new list has more records than the old list , update the new approvers with pend status
3003 IF l_new_approvers_tbl (
3004 j
3005 ).approver_status IS NULL
3006 THEN
3007 l_new_approvers_tbl (
3008 j
3009 ).approver_status := 'NOSUBMIT';
3010 END IF;
3011
3012 -- because of the new list if the last approver is skipped, make him pending
3013 IF ((l_new_approvers_tbl (
3014 j
3015 ).approver_status = 'SKIP'
3016 )
3017 AND (j = l_new_approvers_tbl.COUNT)
3018 )
3019 THEN
3020 l_new_approvers_tbl (
3021 j
3022 ).approver_status := 'NOSUBMIT';
3023 END IF;
3024
3025 -- Mark the highest authority who approved in the old list
3026
3027 IF ((l_new_approvers_tbl (
3028 j
3029 ).approver_status IN ('APPR', 'SKIP')
3030 )
3031 AND (l_last_approved_approver = 0)
3032 )
3033 THEN
3034 l_last_approved_approver := j;
3035 END IF;
3036
3037 -- Make the approvers who are below the old highest authority as skipped
3038 IF ((j < l_last_approved_approver)
3039 AND (l_new_approvers_tbl (
3040 j
3041 ).approver_status = 'NOSUBMIT'
3042 )
3043 )
3044 THEN
3045 l_new_approvers_tbl (
3046 j
3047 ).approver_status := 'SKIP';
3048 END IF;
3049
3050 aso_apr_approvals_pkg.detail_insert_row (
3051 l_new_approvers_tbl (
3052 j
3053 ).approval_det_id,
3054 l_new_approvers_tbl (
3055 j
3056 ).object_approval_id,
3057 l_new_approvers_tbl (
3058 j
3059 ).approver_person_id ---p_APPROVER_PERSON_ID
3060 ,
3061 l_new_approvers_tbl (
3062 j
3063 ).approver_user_id ---p_APPROVER_USER_ID
3064 ,
3065 j -- P_APPROVER_SEQUENCE
3066 ,
3067 l_new_approvers_tbl (
3068 j
3069 ).approver_status --p_APPROVER_STATUS
3070 ,
3071 l_new_approvers_tbl (
3072 j
3073 ).approver_comments -- p_APPROVER_COMMENTS
3074 ,
3075 l_new_approvers_tbl (
3076 j
3077 ).date_sent --p_DATE_SENT
3078 ,
3079 l_new_approvers_tbl (
3080 j
3081 ).date_received -- p_DATE_RECEIVED
3082 ,
3083 l_new_approvers_tbl (
3084 j
3085 ).creation_date -- p_CREATION_DATE
3086 ,
3087 SYSDATE -- p_LAST_UPDATE_DATE
3088 ,
3089 l_new_approvers_tbl (
3090 j
3091 ).created_by -- P_CREATED_BY
3092 ,
3093 g_user_id -- P_UPDATED_BY
3094 ,
3095 fnd_global.conc_login_id -- p_LAST_UPDATE_LOGIN
3096 ,
3097 l_new_approvers_tbl (
3098 j
3099 ).attribute1 -- p_ATTRIBUTE1
3100 ,
3101 l_new_approvers_tbl (
3102 j
3103 ).attribute2 -- p_ATTRIBUTE2
3104 ,
3105 l_new_approvers_tbl (
3106 j
3107 ).attribute3 -- p_ATTRIBUTE3
3108 ,
3109 l_new_approvers_tbl (
3110 j
3111 ).attribute4 -- p_ATTRIBUTE4
3112 ,
3113 l_new_approvers_tbl (
3114 j
3115 ).attribute5 -- p_ATTRIBUTE5
3116 ,
3117 l_new_approvers_tbl (
3118 j
3119 ).attribute6 -- p_ATTRIBUTE6
3120 ,
3121 l_new_approvers_tbl (
3122 j
3123 ).attribute7 -- p_ATTRIBUTE7
3124 ,
3125 l_new_approvers_tbl (
3126 j
3127 ).attribute8 -- p_ATTRIBUTE8
3128 ,
3129 l_new_approvers_tbl (
3130 j
3131 ).attribute9 -- p_ATTRIBUTE9
3132 ,
3133 l_new_approvers_tbl (
3134 j
3135 ).attribute10 -- p_ATTRIBUTE10
3136 ,
3137 l_new_approvers_tbl (
3138 j
3139 ).attribute11 -- p_ATTRIBUTE11
3140 ,
3141 l_new_approvers_tbl (
3142 j
3143 ).attribute12 -- p_ATTRIBUTE12
3144 ,
3145 l_new_approvers_tbl (
3146 j
3147 ).attribute13 -- p_ATTRIBUTE13
3148 ,
3149 l_new_approvers_tbl (
3150 j
3151 ).attribute14 -- p_ATTRIBUTE14
3152 ,
3153 l_new_approvers_tbl (
3154 j
3155 ).attribute15 -- p_ATTRIBUTE15
3156 ,
3157 l_new_approvers_tbl (
3158 j
3159 ).attribute16 -- p_ATTRIBUTE16
3160 ,
3161 l_new_approvers_tbl (
3162 j
3163 ).attribute17 -- p_ATTRIBUTE17
3164 ,
3165 l_new_approvers_tbl (
3166 j
3167 ).attribute18 -- p_ATTRIBUTE18
3168 ,
3169 l_new_approvers_tbl (
3170 j
3171 ).attribute19 -- p_ATTRIBUTE19
3172 ,
3173 l_new_approvers_tbl (
3174 j
3175 ).attribute20 -- p_ATTRIBUTE20
3176 ,
3177 l_new_approvers_tbl (
3178 j
3179 ).CONTEXT -- p_CONTEXT
3180 ,
3181 l_new_approvers_tbl (
3182 j
3183 ).security_group_id -- p_SECURITY_GROUP_ID
3184 ,
3185 l_new_approvers_tbl (
3186 j
3187 ).object_version_number -- p_OBJECT_VERSION_NUMBER
3188 );
3189 j := j - 1;
3190 END LOOP;
3191 END IF;
3192
3193 -- Loop to find OUT NOCOPY /* file.sql.39 change */ if the rules have changed
3194
3195 OPEN get_rule_count (
3196 p_object_approval_id
3197 );
3198 FETCH get_rule_count INTO l_rule_count;
3199 CLOSE get_rule_count;
3200
3201 IF l_rule_count <> x_rules_list.COUNT
3202 THEN
3203 l_rules_changed_flag := 'Y';
3204 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3205 aso_debug_pub.ADD (
3206 'The rules have changed ',
3207 1,
3208 'N'
3209 );
3210 END IF;
3211 ELSE
3212 OPEN get_existing_rules (
3213 p_object_approval_id
3214 );
3215
3216 FOR i IN 1 .. x_rules_list.COUNT
3217 LOOP
3218 FETCH get_existing_rules INTO l_oam_rule_id;
3219 EXIT WHEN get_existing_rules%NOTFOUND;
3220
3221 -- Make sure that if miss num is passed back from ame api, then it is
3222 -- converted into a null
3223
3224 IF x_rules_list (
3225 i
3226 ).rule_id = fnd_api.g_miss_num
3227 THEN
3228 x_rules_list (
3229 i
3230 ).rule_id := NULL;
3231 END IF;
3232
3233 IF (l_oam_rule_id <> x_rules_list (
3234 i
3235 ).rule_id
3236 )
3237 THEN
3238 l_rules_changed_flag := 'Y';
3239 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3240 aso_debug_pub.ADD (
3241 'The rules have changed ',
3242 1,
3243 'N'
3244 );
3245 END IF;
3246 EXIT;
3247 ELSE
3248 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3249 aso_debug_pub.ADD (
3250 'The rules have not changed ',
3251 1,
3252 'N'
3253 );
3254 END IF;
3255 l_rules_changed_flag := 'N';
3256 END IF;
3257 END LOOP;
3258
3259 CLOSE get_existing_rules;
3260 END IF;
3261
3262 -- refresh the rules if they are changed
3263
3264 IF l_rules_changed_flag = 'Y'
3265 THEN
3266 -- delete the existing rules
3267 DELETE FROM aso_apr_rules
3268 WHERE object_approval_id = p_object_approval_id;
3269
3270 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3271 aso_debug_pub.ADD (
3272 'Inserting rows into the rule table ',
3273 1,
3274 'N'
3275 );
3276 END IF;
3277
3278 FOR i IN 1 .. x_rules_list.COUNT
3279 LOOP
3280 aso_apr_approvals_pkg.rule_insert_row (
3281 p_rule_id,
3282 x_rules_list (
3283 i
3284 ).rule_id,
3285 x_rules_list (
3286 i
3287 ).rule_action_id,
3288 SYSDATE --p_CREATION_DATE
3289 ,
3290 g_user_id -- P_CREATED_BY
3291 ,
3292 SYSDATE -- p_LAST_UPDATE_DATE
3293 ,
3294 g_user_id -- P_UPDATED_BY
3295 ,
3296 fnd_global.conc_login_id -- p_LAST_UPDATE_LOGIN
3297 ,
3298 p_object_approval_id,
3299 NULL -- p_ATTRIBUTE1
3300 ,
3301 NULL -- p_ATTRIBUTE2
3302 ,
3303 NULL -- p_ATTRIBUTE3
3304 ,
3305 NULL -- p_ATTRIBUTE4
3306 ,
3307 NULL -- p_ATTRIBUTE5
3308 ,
3309 NULL -- p_ATTRIBUTE6
3310 ,
3311 NULL -- p_ATTRIBUTE7
3312 ,
3313 NULL -- p_ATTRIBUTE8
3314 ,
3315 NULL -- p_ATTRIBUTE9
3316 ,
3317 NULL -- p_ATTRIBUTE10
3318 ,
3319 NULL -- p_ATTRIBUTE11
3320 ,
3321 NULL -- p_ATTRIBUTE12
3322 ,
3323 NULL -- p_ATTRIBUTE13
3324 ,
3325 NULL -- p_ATTRIBUTE14
3326 ,
3327 NULL -- p_ATTRIBUTE15
3328 ,
3329 NULL -- p_Attribute16
3330 ,
3331 NULL -- p_Attribute17
3332 ,
3333 NULL -- p_Attribute18
3334 ,
3335 NULL -- p_Attribute19
3336 ,
3337 NULL -- p_Attribute20
3338 ,
3339 NULL -- p_CONTEXT
3340 ,
3341 NULL -- p_SECURITY_GROUP_ID
3342 ,
3343 NULL -- p_OBJECT_VERSION_NUMBER
3344 );
3345 END LOOP;
3346 END IF;
3347 -- commit the work
3348 COMMIT WORK;
3349 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3350 aso_debug_pub.ADD (
3351 'End update_approver_list procedure ',
3352 1,
3353 'N'
3354 );
3355 END IF;
3356 EXCEPTION
3357 WHEN get_all_approvers_failed
3358 THEN
3359 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3360 aso_debug_pub.ADD (
3361 'Call to get_all_approvers failed in update_approver_list ',
3362 1,
3363 'N'
3364 );
3365 END IF;
3366 fnd_msg_pub.count_and_get (
3367 p_encoded => 'F',
3368 p_count => l_msg_count,
3369 p_data => l_msg_data
3370 );
3371 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3372 aso_debug_pub.ADD (
3373 'no. of FND messages :' || l_msg_count,
3374 1,
3375 'N'
3376 );
3377 END IF;
3378
3379 FOR k IN 1 .. l_msg_count
3380 LOOP
3381 l_msg_data := fnd_msg_pub.get (
3382 p_msg_index => k,
3383 p_encoded => 'F'
3384 );
3385 END LOOP;
3386
3387 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3388 aso_debug_pub.ADD (
3389 'Msg Data is' || l_msg_data,
3390 1,
3391 'N'
3392 );
3393 END IF;
3394 wf_core.CONTEXT (
3395 'ASOAPPRV',
3396 'Update_approver_list',
3397 'msg data ' || l_msg_data
3398 );
3399 RAISE;
3400 WHEN OTHERS
3401 THEN
3402 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3403 aso_debug_pub.ADD (
3404 'When others exception in update approver list procedure ',
3405 1,
3406 'N'
3407 );
3408 END IF;
3409 wf_core.CONTEXT (
3410 'ASOAPPRV',
3411 'Update_approver_list',
3412 SUBSTR (
3413 SQLERRM,
3414 1,
3415 250
3416 )
3417 );
3418 RAISE;
3419 END update_approver_list;
3420
3421 PROCEDURE last_approver_timeout_check (
3422 p_object_approval_id IN NUMBER
3423 ) IS
3424 new_approver_record ame_util.approverrecord;
3425 l_approver_sequence NUMBER;
3426 l_approval_det_id NUMBER;
3427 l_object_id NUMBER;
3428 l_object_type VARCHAR2 (240);
3429 l_application_id NUMBER;
3430
3431 CURSOR get_approvers (
3432 c_object_approval_id NUMBER
3433 ) IS
3434 SELECT approval_det_id
3435 FROM aso_apr_approval_details
3436 WHERE object_approval_id = c_object_approval_id;
3437
3438 CURSOR get_approver_sequence (
3439 c_object_approval_id NUMBER
3440 ) IS
3441 SELECT MAX (
3442 approver_sequence
3443 ) + 1
3444 FROM aso_apr_approval_details
3445 WHERE object_approval_id = c_object_approval_id;
3446
3447 CURSOR get_application_id (
3448 c_object_approval_id NUMBER
3449 ) IS
3450 SELECT DISTINCT object_id, object_type, application_id
3451 FROM aso_apr_obj_approvals aoa
3452 WHERE object_approval_id = c_object_approval_id;
3453 BEGIN
3454 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3455 aso_debug_pub.ADD (
3456 'Begin the last_approver_timeout_check prcoedure ',
3457 1,
3458 'N'
3459 );
3460 END IF;
3461 g_user_id := fnd_global.user_id;
3462 OPEN get_application_id (
3463 p_object_approval_id
3464 );
3465 FETCH get_application_id INTO l_object_id, l_object_type, l_application_id;
3466 CLOSE get_application_id;
3467 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3468 aso_debug_pub.ADD (
3469 'Object ID :' || l_object_id,
3470 1,
3471 'N'
3472 );
3473 aso_debug_pub.ADD (
3474 'Object Type :' || l_object_type,
3475 1,
3476 'N'
3477 );
3478 aso_debug_pub.ADD (
3479 'application id :' || l_application_id,
3480 1,
3481 'N'
3482 );
3483 aso_debug_pub.ADD (
3484 'Calling the AME clearall approvals API',
3485 1,
3486 'N'
3487 );
3488 END IF;
3489 ame_api.clearallapprovals (
3490 applicationidin => l_application_id,
3491 transactionidin => l_object_id,
3492 transactiontypein => l_object_type
3493 );
3494
3495 FOR i IN get_approvers (
3496 p_object_approval_id
3497 )
3498 LOOP
3499 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3500 aso_debug_pub.ADD (
3501 'calling the AME get next approver API ',
3502 1,
3503 'N'
3504 );
3505 END IF;
3506 ame_api.getnextapprover (
3507 applicationidin => l_application_id,
3508 transactionidin => l_object_id,
3509 transactiontypein => l_object_type,
3510 nextapproverout => new_approver_record
3511 );
3512 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3513 aso_debug_pub.ADD (
3514 'New Approver Person ID :' || new_approver_record.person_id,
3515 1,
3516 'N'
3517 );
3518 aso_debug_pub.ADD (
3519 'Setting approval status to no response for previous approvers ',
3520 1,
3521 'N'
3522 );
3523 END IF;
3524 new_approver_record.approval_status := ame_util.noresponsestatus;
3525 ame_api.updateapprovalstatus (
3526 applicationidin => l_application_id,
3527 transactionidin => l_object_id,
3528 transactiontypein => l_object_type,
3529 approverin => new_approver_record
3530 );
3531 END LOOP;
3532
3533 -- after getting all the approvers, try to get the next approver
3534
3535 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3536 aso_debug_pub.ADD (
3537 'calling the AME get next approver API ',
3538 1,
3539 'N'
3540 );
3541 END IF;
3542 ame_api.getnextapprover (
3543 applicationidin => l_application_id,
3544 transactionidin => l_object_id,
3545 transactiontypein => l_object_type,
3546 nextapproverout => new_approver_record
3547 );
3548 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3549 aso_debug_pub.ADD (
3550 'New Approver Person ID :' || new_approver_record.person_id,
3551 1,
3552 'N'
3553 );
3554 END IF;
3555
3556 IF (((new_approver_record.person_id IS NOT NULL)
3557 AND (new_approver_record.person_id <> fnd_api.g_miss_num)
3558 )
3559 OR ((new_approver_record.user_id IS NOT NULL)
3560 AND (new_approver_record.user_id <> fnd_api.g_miss_num)
3561 )
3562 )
3563 THEN
3564 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3565 aso_debug_pub.ADD (
3566 'Additional Approver found ',
3567 1,
3568 'N'
3569 );
3570 END IF;
3571 OPEN get_approver_sequence (
3572 p_object_approval_id
3573 );
3574 FETCH get_approver_sequence INTO l_approver_sequence;
3575 CLOSE get_approver_sequence;
3576 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3577 aso_debug_pub.ADD (
3578 'Inserting the new approver into the detail table ',
3579 1,
3580 'N'
3581 );
3582 END IF;
3583 aso_apr_approvals_pkg.detail_insert_row (
3584 l_approval_det_id,
3585 p_object_approval_id,
3586 new_approver_record.person_id --p_APPROVER_PERSON_ID
3587 ,
3588 new_approver_record.user_id --p_APPROVER_USER_ID
3589 ,
3590 l_approver_sequence -- P_APPROVER_SEQUENCE
3591 ,
3592 'NOSUBMIT' --p_APPROVER_STATUS
3593 ,
3594 NULL -- p_APPROVER_COMMENTS
3595 ,
3596 NULL --p_DATE_SENT
3597 ,
3598 NULL -- p_DATE_RECEIVED
3599 ,
3600 SYSDATE -- p_CREATION_DATE
3601 ,
3602 SYSDATE -- p_LAST_UPDATE_DATE
3603 ,
3604 g_user_id -- P_CREATED_BY
3605 ,
3606 g_user_id -- P_UPDATED_BY
3607 ,
3608 fnd_global.conc_login_id -- p_LAST_UPDATE_LOGIN
3609 ,
3610 NULL -- p_ATTRIBUTE1
3611 ,
3612 NULL -- p_ATTRIBUTE2
3613 ,
3614 NULL -- p_ATTRIBUTE3
3615 ,
3616 NULL -- p_ATTRIBUTE4
3617 ,
3618 NULL -- p_ATTRIBUTE5
3619 ,
3620 NULL -- p_ATTRIBUTE6
3621 ,
3622 NULL -- p_ATTRIBUTE7
3623 ,
3624 NULL -- p_ATTRIBUTE8
3625 ,
3626 NULL -- p_ATTRIBUTE9
3627 ,
3628 NULL -- p_ATTRIBUTE10
3629 ,
3630 NULL -- p_ATTRIBUTE11
3631 ,
3632 NULL -- p_ATTRIBUTE12
3633 ,
3634 NULL -- p_ATTRIBUTE13
3635 ,
3636 NULL -- p_ATTRIBUTE14
3637 ,
3638 NULL -- p_ATTRIBUTE15
3639 ,
3640 NULL -- p_Attribute16
3641 ,
3642 NULL -- p_Attribute17
3643 ,
3644 NULL -- p_Attribute18
3645 ,
3646 NULL -- p_Attribute19
3647 ,
3648 NULL -- p_Attribute20
3649 ,
3650 NULL -- p_CONTEXT
3651 ,
3652 NULL -- p_SECURITY_GROUP_ID
3653 ,
3654 NULL -- p_OBJECT_VERSION_NUMBER
3655 );
3656 ELSE
3657 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3658 aso_debug_pub.ADD (
3659 'No Additional Approvers found ',
3660 1,
3661 'N'
3662 );
3663 END IF;
3664 RETURN;
3665 END IF;
3666
3667 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3668 aso_debug_pub.ADD (
3669 'End of last_approver_timeout_check procedure ',
3670 1,
3671 'N'
3672 );
3673 END IF;
3674 EXCEPTION
3675 WHEN OTHERS
3676 THEN
3677 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3678 aso_debug_pub.ADD (
3679 'Exception in Last_Approver_Timeout_Check ',
3680 1,
3681 'N'
3682 );
3683 END IF;
3684 RETURN;
3685 END last_approver_timeout_check;
3686
3687 PROCEDURE send_cancel_notification (
3688 itemtype IN VARCHAR2,
3689 itemkey IN VARCHAR2,
3690 actid IN NUMBER,
3691 funcmode IN VARCHAR2,
3692 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
3693 ) IS
3694 l_message VARCHAR2 (240);
3695 l_notifenabled VARCHAR2 (3) := 'Y';
3696 l_orgid NUMBER := NULL;
3697 l_approval_id NUMBER;
3698 x_return_status VARCHAR2 (240);
3699 x_msg_count NUMBER;
3700 x_msg_data VARCHAR2 (240);
3701 l_msgenabled VARCHAR2 (3) := 'Y';
3702 l_notifname VARCHAR2 (240);
3703 get_message_error EXCEPTION;
3704
3705 BEGIN
3706 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3707 aso_debug_pub.ADD (
3708 'Begin SEND_CANCEL_NOTIFICATION Procedure',
3709 1,
3710 'N'
3711 );
3712 aso_debug_pub.ADD (
3713 'actid is ' || TO_CHAR (
3714 actid
3715 ),
3716 1,
3717 'N'
3718 );
3719 END IF;
3720
3721 IF funcmode = 'RUN'
3722 THEN
3723 l_message := wf_engine.getitemattrtext (
3724 itemtype,
3725 itemkey,
3726 'MESSAGE'
3727 );
3728 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3729 aso_debug_pub.ADD (
3730 'Message is ' || l_message,
3731 1,
3732 'N'
3733 );
3734 END IF;
3735
3736 -- Check for FYI Cancel Message and if so make the attribute as Cancel Message to approver
3737 IF ((l_message LIKE 'REQUEST_CANCELLED_FYI%') or (l_message LIKE 'OA_REQUEST_CANCELLED_FYI%'))
3738 THEN
3739 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3740 aso_debug_pub.ADD (
3741 'Setting message to OA_REQUEST_CANCEL_FYI_TO_APPR',
3742 1,
3743 'N'
3744 );
3745 END IF;
3746 l_message := 'OA_REQ_CANCEL_FYI_TO_APPR';
3747 ELSE
3748 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3749 aso_debug_pub.ADD (
3750 'Setting message to OA_REQUEST_CANCELLED_FYI',
3751 1,
3752 'N'
3753 );
3754 END IF;
3755 l_message := 'OA_REQUEST_CANCELLED_FYI';
3756 END IF;
3757
3758 wf_engine.setitemattrtext (
3759 itemtype => itemtype,
3760 itemkey => itemkey,
3761 aname => 'MESSAGE',
3762 avalue => l_message
3763 );
3764 -- Please note that the notification event name is same as message name
3765
3766 l_notifname := wf_engine.getitemattrtext (
3767 itemtype,
3768 itemkey,
3769 'MESSAGE'
3770 );
3771 l_notifname := 'ASO_' || l_notifname;
3772 l_notifenabled := ibe_wf_notif_setup_pvt.check_notif_enabled (
3773 l_notifname
3774 );
3775 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3776 aso_debug_pub.ADD (
3777 'Notification Name: ' || l_notifname || ' Enabled: ' || l_notifenabled,
3778 1,
3779 'N'
3780 );
3781 END IF;
3782
3783 IF l_notifenabled = 'Y'
3784 THEN
3785 -- Get the approval id
3786 l_approval_id := wf_engine.getitemattrnumber (
3787 itemtype,
3788 itemkey,
3789 'APPROVALID'
3790 );
3791 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3792 aso_debug_pub.ADD (
3793 'Approval Id is ' || l_approval_id,
3794 1,
3795 'N'
3796 );
3797 END IF;
3798 -- get the org id
3799 /*OPEN get_org_id (
3800 l_approval_id
3801 );
3802 FETCH get_org_id INTO l_orgid;
3803 CLOSE get_org_id; */
3804 l_orgid := wf_engine.getitemattrnumber (
3805 itemtype,
3806 itemkey,
3807 'ORGID'
3808 );
3809
3810 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3811 aso_debug_pub.ADD (
3812 'Org Id is ' || l_orgid,
3813 1,
3814 'N'
3815 );
3816 END IF;
3817 -- Retreive the message name for that event
3818 x_return_status := fnd_api.g_ret_sts_success;
3819
3820 ibe_wf_msg_mapping_pvt.retrieve_msg_mapping (
3821 p_org_id => l_orgid,
3822 p_msite_id => NULL,
3823 p_user_type => 'ALL',
3824 p_notif_name => l_notifname,
3825 x_enabled_flag => l_msgenabled,
3826 x_wf_message_name => l_message,
3827 x_return_status => x_return_status,
3828 x_msg_data => x_msg_data,
3829 x_msg_count => x_msg_count
3830 );
3831
3832 -- Check if the call to MSG mapping API was succssfull
3833 -- bug 3295179
3834 IF x_return_status <> fnd_api.g_ret_sts_success
3835 --IF x_msg_count > 0
3836 THEN
3837 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3838 aso_debug_pub.ADD (
3839 'Message count from MSG mapping API :' || x_msg_count,
3840 1,
3841 'N'
3842 );
3843 END IF;
3844 RAISE get_message_error;
3845 END IF;
3846 ELSE
3847 -- If the notification is not enabled
3848 resultout := 'COMPLETE';
3849 END IF;
3850
3851 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3852 aso_debug_pub.ADD (
3853 'Calling the standard notify process ',
3854 1,
3855 'N'
3856 );
3857 END IF;
3858 wf_standard.notify (
3859 itemtype,
3860 itemkey,
3861 actid,
3862 funcmode,
3863 resultout
3864 );
3865 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3866 aso_debug_pub.ADD (
3867 'End SEND_CANCEL_NOTIFICATION Procedure',
3868 1,
3869 'N'
3870 );
3871 END IF;
3872 RETURN;
3873 END IF;
3874
3875 IF (funcmode = 'CANCEL')
3876 THEN
3877 resultout := 'COMPLETE';
3878 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3879 aso_debug_pub.ADD (
3880 'End of SEND_CANCEL_NOTIFICATION Procedure',
3881 1,
3882 'N'
3883 );
3884 END IF;
3885 RETURN;
3886 END IF;
3887
3888 resultout := '';
3889 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3890 aso_debug_pub.ADD (
3891 'End of SEND_CANCEL_NOTIFICATION Procedure',
3892 1,
3893 'N'
3894 );
3895 END IF;
3896 RETURN;
3897 EXCEPTION
3898 WHEN get_message_error
3899 THEN
3900 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3901 aso_debug_pub.ADD (
3902 'Exception in SEND_NOTIFICATION Proc SqlCode :' || SQLERRM,
3903 1,
3904 'N'
3905 );
3906 END IF;
3907 wf_core.CONTEXT (
3908 'ASOAPPRV',
3909 'SEND_CANCEL_NOTIFICATION',
3910 'Error in retreiving Notification Message',
3911 'Message Name: ' || l_message || ' Enabled: ' || l_msgenabled
3912 );
3913 RAISE;
3914 WHEN OTHERS
3915 THEN
3916 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3917 aso_debug_pub.ADD (
3918 'Exception in SEND_CANCEL_NOTIFICATION Process SqlCode :' || SQLERRM,
3919 1,
3920 'N'
3921 );
3922 END IF;
3923 wf_core.CONTEXT (
3924 'ASOAPPRV',
3925 'SEND_CANCEL_NOTIFICATION',
3926 itemtype,
3927 itemkey,
3928 TO_CHAR (
3929 actid
3930 ),
3931 funcmode
3932 );
3933 RAISE;
3934 END send_cancel_notification;
3935
3936 PROCEDURE approver_details_doc (
3937 document_id IN VARCHAR2,
3938 display_type IN VARCHAR2,
3939 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
3940 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
3941 ) IS
3942 itemtype VARCHAR2 (30);
3943 itemkey VARCHAR2 (30);
3944 l_approval_id NUMBER;
3945 l_approver_user_name VARCHAR2 (240);
3946 l_approver_display_name VARCHAR2 (240);
3947 l_approver_status VARCHAR2 (10);
3948 l_approver_comments VARCHAR2 (4000);
3949 l_attribute_tbl aso_attribute_label_tbl_type;
3950
3951 CURSOR approver_details (
3952 c_object_approval_id NUMBER
3953 ) IS
3954 SELECT approver_user_id, approver_person_id, fl.meaning, approver_comments
3955 FROM aso_apr_approval_details apd, aso_lookups fl
3956 WHERE apd.approver_status = fl.lookup_code
3957 AND object_approval_id = c_object_approval_id
3958 AND fl.lookup_type = 'ASO_APPROVER_STATUS'
3959 ORDER BY approver_sequence;
3960 BEGIN
3961 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3962 aso_debug_pub.ADD (
3963 'Begin APPROVER_DETAILS_DOC procedure ',
3964 1,
3965 'N'
3966 );
3967 END IF;
3968 itemtype := NVL (
3969 SUBSTR (
3970 document_id,
3971 1,
3972 INSTR (
3973 document_id,
3974 ':'
3975 ) - 1
3976 ),
3977 'ASOAPPRV'
3978 );
3979 itemkey := SUBSTR (
3980 document_id,
3981 INSTR (
3982 document_id,
3983 ':'
3984 ) + 1
3985 ) || 'HED';
3986 l_approval_id := wf_engine.getitemattrnumber (
3987 itemtype => itemtype,
3988 itemkey => itemkey,
3989 aname => 'APPROVALID'
3990 );
3991 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3992 aso_debug_pub.ADD (
3993 'ItemType is:' || itemtype,
3994 1,
3995 'N'
3996 );
3997 aso_debug_pub.ADD (
3998 'ItemKey is :' || itemkey,
3999 1,
4000 'N'
4001 );
4002 aso_debug_pub.ADD (
4003 'Approval ID :' || l_approval_id,
4004 1,
4005 'N'
4006 );
4007 END IF;
4008 -- get the attribute label
4009 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4010 aso_debug_pub.ADD (
4011 'Calling the get_attribute_label procedure',
4012 1,
4013 'N'
4014 );
4015 END IF;
4016 get_attribute_label (
4017 l_approval_id,
4018 l_attribute_tbl
4019 );
4020
4021 -- Create an html text buffer
4022 IF (display_type = 'text/html')
4023 THEN
4024 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4025 aso_debug_pub.ADD (
4026 'Display type is text/html',
4027 1,
4028 'N'
4029 );
4030 END IF;
4031 document := document
4032 || '<span class=sectionHeader1>'
4033 || l_attribute_tbl (
4034 11
4035 )
4036 || '</span>';
4037 document :=
4038 document
4039 || '<table class=OraBGAccentDark width="75%" cellpadding="1", cellspacing="1" border="0">';
4040 document :=
4041 document
4042 || '<tr> <td class="tableSmallHeaderCell" align="center">'
4043 || l_attribute_tbl (
4044 12
4045 )
4046 || '</td>';
4047 document := document
4048 || '<td class="tableSmallHeaderCell" align="center">'
4049 || l_attribute_tbl (
4050 13
4051 )
4052 || '</td>';
4053 document := document || '</tr>';
4054
4055 FOR i IN approver_details (
4056 l_approval_id
4057 )
4058 LOOP
4059 l_approver_display_name :=
4060 aso_apr_int.get_approver_name (
4061 i.approver_user_id,
4062 i.approver_person_id
4063 );
4064 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4065 aso_debug_pub.ADD (
4066 'Approver Name is ' || l_approver_display_name,
4067 1,
4068 'N'
4069 );
4070 END IF;
4071 document := document || '<tr>';
4072 document := document
4073 || '<td class="tableDataCell">'
4074 || l_approver_display_name
4075 || '</td>';
4076 document := document
4077 || '<td class="tableDataCell">'
4078 || i.meaning
4079 || '</td>';
4080 document := document || '</tr>';
4081 END LOOP;
4082
4083 document := document || '</table>';
4084 document_type := 'text/html';
4085 END IF;
4086
4087 -- Create a plain text buffer
4088
4089 IF (display_type = 'text/plain')
4090 THEN
4091 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4092 aso_debug_pub.ADD (
4093 'Display type is text/plain',
4094 1,
4095 'N'
4096 );
4097 END IF;
4098 document := document || fnd_global.local_chr (
4099 10
4100 );
4101 document := document || l_attribute_tbl (
4102 11
4103 );
4104 document := document || fnd_global.local_chr (
4105 10
4106 );
4107
4108 FOR i IN approver_details (
4109 l_approval_id
4110 )
4111 LOOP
4112 -- get the approver name
4113 l_approver_display_name :=
4114 aso_apr_int.get_approver_name (
4115 i.approver_user_id,
4116 i.approver_person_id
4117 );
4118 document := document || fnd_global.local_chr (
4119 10
4120 );
4121 document := document || l_attribute_tbl (
4122 12
4123 );
4124 document := document || ': ';
4125 document := document || l_approver_display_name;
4126 document := document || fnd_global.local_chr (
4127 10
4128 );
4129 document := document || l_attribute_tbl (
4130 13
4131 );
4132 document := document || ': ';
4133 document := document || i.meaning;
4134 END LOOP;
4135
4136 document_type := 'text/plain';
4137 END IF;
4138
4139 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4140 aso_debug_pub.ADD (
4141 'End APPROVER_DETAILS_DOC procedure ',
4142 1,
4143 'N'
4144 );
4145 END IF;
4146 EXCEPTION
4147 WHEN OTHERS
4148 THEN
4149 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4150 aso_debug_pub.ADD (
4151 'Exception in APPROVER_DETAILS_DOC SqlCode :' || SQLERRM,
4152 1,
4153 'N'
4154 );
4155 END IF;
4156 wf_core.CONTEXT (
4157 'ASOAPPRV',
4158 'APPROVER_DETAILS_DOC',
4159 itemtype,
4160 itemkey
4161 );
4162 RAISE;
4163 END approver_details_doc;
4164
4165 PROCEDURE quote_summary_doc (
4166 document_id IN VARCHAR2,
4167 display_type IN VARCHAR2,
4168 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
4169 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
4170 ) IS
4171 itemtype VARCHAR2 (30);
4172 itemkey VARCHAR2 (30);
4173 l_approval_id NUMBER;
4174 l_quote_name VARCHAR2 (240);
4175 l_quote_version VARCHAR2 (240);
4176 l_quote_number VARCHAR2 (240);
4177 l_quote_price VARCHAR2 (240);
4178 l_customer_name VARCHAR2 (240);
4179 l_account_number VARCHAR2 (240);
4180 l_contact_name VARCHAR2 (240);
4181 l_opportunity_name VARCHAR2 (240);
4182 l_expiration_date DATE;
4183 l_attribute_tbl aso_attribute_label_tbl_type;
4184 -- hyang performance fix, bug 2860045
4185 l_quote_header_id NUMBER;
4186 l_party_type VARCHAR2(240);
4187 CURSOR get_object_details (
4188 c_approval_id NUMBER
4189 ) IS
4190 SELECT quote_header_id, quote_name, quote_number, quote_expiration_date
4191 FROM aso_quote_headers_all qha, aso_apr_obj_approvals aoa
4192 WHERE qha.quote_header_id = aoa.object_id
4193 AND aoa.object_approval_id = c_approval_id;
4194
4195 CURSOR get_customer_name (
4196 c_quote_header_id NUMBER
4197 ) IS
4198 SELECT hp.party_name
4199 FROM aso_quote_headers_all qha,
4200 hz_parties hp
4201 WHERE qha.cust_party_id = hp.party_id
4202 AND qha.quote_header_id = c_quote_header_id;
4203
4204 -- bug 3934660 (put outer join)
4205 CURSOR get_account_number (
4206 c_quote_header_id NUMBER
4207 ) IS
4208 SELECT hca.account_number
4209 FROM hz_cust_accounts hca,
4210 aso_quote_headers_all qha
4211 WHERE qha.cust_account_id = hca.cust_account_id(+)
4212 AND qha.quote_header_id = c_quote_header_id;
4213
4214 CURSOR get_opportunity_name (
4215 c_approval_id NUMBER
4216 ) IS
4217 SELECT ala.description
4218 FROM as_leads_all ala,
4219 aso_quote_related_objects qro,
4220 aso_apr_obj_approvals aoa
4221 WHERE ala.lead_id = qro.object_id
4222 AND qro.relationship_type_code = 'OPP_QUOTE'
4223 AND qro.quote_object_id = aoa.object_id
4224 AND aoa.object_approval_id = c_approval_id;
4225
4226 -- bug 3934660
4227
4228 CURSOR get_party_type (c_approval_id NUMBER) IS
4229 SELECT P.PARTY_TYPE
4230 FROM hz_parties p, aso_quote_headers_all qh,aso_apr_obj_approvals aoa
4231 WHERE p.party_id = qh.party_id
4232 AND qh.quote_header_id = aoa.object_id
4233 AND aoa.object_approval_id = c_approval_id;
4234
4235 -- note that UI shows both contact and employees in drop down list,hence
4236 -- query uses both contact and employee
4237 CURSOR get_contact_name (
4238 c_approval_id NUMBER
4239 ) IS
4240 SELECT party_name
4241 FROM hz_parties p, hz_relationships r, aso_quote_headers_all qh,aso_apr_obj_approvals aoa
4242 WHERE p.party_id = r.object_id
4243 AND r.party_id = qh.party_id
4244 AND r.subject_id = qh.cust_party_id
4245 AND r.object_type = 'PERSON'
4246 AND r.relationship_code IN ('CONTACT','EMPLOYER_OF')
4247 AND qh.quote_header_id = aoa.object_id
4248 AND aoa.object_approval_id = c_approval_id;
4249
4250 BEGIN
4251 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4252 aso_debug_pub.ADD (
4253 'Begin QUOTE_SUMMARY_DOC procedure ',
4254 1,
4255 'N'
4256 );
4257 END IF;
4258 itemtype := NVL (
4259 SUBSTR (
4260 document_id,
4261 1,
4262 INSTR (
4263 document_id,
4264 ':'
4265 ) - 1
4266 ),
4267 'ASOAPPRV'
4268 );
4269 itemkey := SUBSTR (
4270 document_id,
4271 INSTR (
4272 document_id,
4273 ':'
4274 ) + 1
4275 ) || 'HED';
4276 l_approval_id := wf_engine.getitemattrnumber (
4277 itemtype => itemtype,
4278 itemkey => itemkey,
4279 aname => 'APPROVALID'
4280 );
4281 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4282 aso_debug_pub.ADD (
4283 'ItemType is:' || itemtype,
4284 1,
4285 'N'
4286 );
4287 aso_debug_pub.ADD (
4288 'ItemKey is :' || itemkey,
4289 1,
4290 'N'
4291 );
4292 aso_debug_pub.ADD (
4293 'Approval ID :' || l_approval_id,
4294 1,
4295 'N'
4296 );
4297 END IF;
4298 -- get the quote name, quote number and expiration date
4299 -- hyang performance fix bug 2860045, added l_quote_header_id
4300 OPEN get_object_details (
4301 l_approval_id
4302 );
4303 FETCH get_object_details INTO l_quote_header_id, l_quote_name, l_quote_number, l_expiration_date;
4304 CLOSE get_object_details;
4305 -- get the customer name and account number
4306 OPEN get_customer_name (
4307 l_quote_header_id
4308 );
4309 FETCH get_customer_name INTO l_customer_name;
4310 CLOSE get_customer_name;
4311 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4312 aso_debug_pub.ADD (
4313 'Customer Name is ' || l_customer_name,
4314 1,
4315 'N'
4316 );
4317 END IF;
4318 OPEN get_account_number (
4319 l_quote_header_id
4320 );
4321 FETCH get_account_number INTO l_account_number;
4322 CLOSE get_account_number;
4323 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4324 aso_debug_pub.ADD (
4325 'Customer Account Number is ' || l_account_number,
4326 1,
4327 'N'
4328 );
4329 END IF;
4330
4331 -- get the opportunity name for the quote
4332 OPEN get_opportunity_name (
4333 l_approval_id
4334 );
4335 FETCH get_opportunity_name INTO l_opportunity_name;
4336 CLOSE get_opportunity_name;
4337 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4338 aso_debug_pub.ADD (
4339 'Opportunity Name :' || l_opportunity_name,
4340 1,
4341 'N'
4342 );
4343 END IF;
4344 -- get the contact name for the quote
4345
4346 OPEN get_party_type(l_approval_id);
4347 FETCH get_party_type INTO l_party_type;
4348 CLOSE get_party_type;
4349
4350 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
4351 OPEN get_contact_name (
4352 l_approval_id
4353 );
4354 FETCH get_contact_name INTO l_contact_name;
4355 CLOSE get_contact_name;
4356 END IF;
4357 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4358 aso_debug_pub.ADD (
4359 'Contact Name :' || l_contact_name,
4360 1,
4361 'N'
4362 );
4363 END IF;
4364 -- get the attribute labels
4365
4366 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4367 aso_debug_pub.ADD (
4368 'Calling the get_attribute_label proceure ',
4369 1,
4370 'N'
4371 );
4372 END IF;
4373 get_attribute_label (
4374 l_approval_id,
4375 l_attribute_tbl
4376 );
4377
4378 -- Create an html text buffer
4379 IF (display_type = 'text/html')
4380 THEN
4381 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4382 aso_debug_pub.ADD (
4383 'Display type is text/html',
4384 1,
4385 'N'
4386 );
4387 END IF;
4388 document := document
4389 || '<span class=sectionHeader1>'
4390 || l_attribute_tbl (
4391 2
4392 )
4393 || '</span>';
4394 document :=
4395 document
4396 || '<table cellspacing=1 cellpadding=1 width="75%" border=0>';
4397 document := document
4398 || '<tr> <td class="prompt" align="right" nowrap>';
4399 document := document || l_attribute_tbl (
4400 3
4401 ) || '</td>';
4402 document := document
4403 || '<td class=datareadonly>'
4404 || l_quote_name
4405 || '</td>';
4406 document := document || '<td class="prompt" align="right" nowrap>';
4407 document := document || l_attribute_tbl (
4408 4
4409 ) || '</td>';
4410 document := document
4411 || '<td class=datareadonly>'
4412 || l_quote_number
4413 || '</td></tr>';
4414 document := document || '<tr>';
4415 document := document || '<td class="prompt" align="right" nowrap> ';
4416 document := document || l_attribute_tbl (
4417 5
4418 ) || '</td>';
4419 document := document
4420 || '<td class=datareadonly>'
4421 || l_customer_name
4422 || '</td>';
4423 document := document
4424 || '<td class="prompt" align="right" nowrap>'
4425 || l_attribute_tbl (
4426 6
4427 )
4428 || '</td>';
4429 document := document
4430 || '<td class=datareadonly>'
4431 || l_account_number
4432 || ' </td></tr>';
4433 document := document
4434 || '<tr> <td class="prompt" align="right" nowrap>'
4435 || l_attribute_tbl (
4436 7
4437 )
4438 || '</td>';
4439 document := document
4440 || '<td class=datareadonly>'
4441 || l_contact_name
4442 || '</td>';
4443 document := document
4444 || '<td class="prompt" align="right" nowrap>'
4445 || l_attribute_tbl (
4446 8
4447 )
4448 || '</td>';
4449 document := document
4450 || '<td class=datareadonly>'
4451 || l_opportunity_name
4452 || '</td></tr>';
4453 document := document
4454 || '<tr><td class="prompt" align="right" nowrap> ';
4455 document := document || l_attribute_tbl (
4456 9
4457 ) || '</td>';
4458 document := document
4459 || '<td class=datareadonly>'
4460 || l_expiration_date
4461 || '</td>';
4462 document := document || '<td>' || fnd_global.local_chr (
4463 38
4464 ) || 'nbsp';
4465 document := document
4466 || '</td><td>'
4467 || fnd_global.local_chr (
4468 38
4469 )
4470 || 'nbsp;</td>';
4471 document := document || '</tr> </table>';
4472 document_type := 'text/html';
4473 END IF;
4474
4475 -- Create a plain text buffer
4476
4477 IF (display_type = 'text/plain')
4478 THEN
4479 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4480 aso_debug_pub.ADD (
4481 'Display type is text/plain',
4482 1,
4483 'N'
4484 );
4485 END IF;
4486 document := document || fnd_global.local_chr (
4487 10
4488 );
4489 document := document || l_attribute_tbl (
4490 3
4491 );
4492 document := document || ': ';
4493 document := document || l_quote_name;
4494 document := document || fnd_global.local_chr (
4495 10
4496 );
4497 document := document || l_attribute_tbl (
4498 4
4499 );
4500 document := document || ': ';
4501 document := document || l_quote_number;
4502 document := document || fnd_global.local_chr (
4503 10
4504 );
4505 document := document || l_attribute_tbl (
4506 5
4507 );
4508 document := document || ': ';
4509 document := document || l_customer_name;
4510 document := document || fnd_global.local_chr (
4511 10
4512 );
4513 document := document || l_attribute_tbl (
4514 6
4515 );
4516 document := document || ': ';
4517 document := document || l_account_number;
4518 document := document || fnd_global.local_chr (
4519 10
4520 );
4521 document := document || l_attribute_tbl (
4522 7
4523 );
4524 document := document || ': ';
4525 document := document || l_contact_name;
4526 document := document || fnd_global.local_chr (
4527 10
4528 );
4529 document := document || l_attribute_tbl (
4530 8
4531 );
4532 document := document || ': ';
4533 document := document || l_opportunity_name;
4534 document := document || fnd_global.local_chr (
4535 10
4536 );
4537 document := document || l_attribute_tbl (
4538 9
4539 );
4540 document := document || ': ';
4541 document := document || l_expiration_date;
4542 document_type := 'text/plain';
4543 END IF;
4544
4545 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4546 aso_debug_pub.ADD (
4547 'End QUOTE_SUMMARY_DOC procedure ',
4548 1,
4549 'N'
4550 );
4551 END IF;
4552 EXCEPTION
4553 WHEN OTHERS
4554 THEN
4555 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4556 aso_debug_pub.ADD (
4557 'Exception in QUOTE_SUMMARY_DOC SqlCode :' || SQLERRM,
4558 1,
4559 'N'
4560 );
4561 END IF;
4562 wf_core.CONTEXT (
4563 'ASOAPPRV',
4564 'QUOTE_SUMMARY_DOC',
4565 itemtype,
4566 itemkey
4567 );
4568 RAISE;
4569 END quote_summary_doc;
4570
4571 PROCEDURE requester_comments_doc (
4572 document_id IN VARCHAR2,
4573 display_type IN VARCHAR2,
4574 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
4575 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
4576 ) IS
4577 itemtype VARCHAR2 (30);
4578 itemkey VARCHAR2 (30);
4579 l_approval_id NUMBER;
4580 l_requester_comments VARCHAR2 (2000);
4581 l_requester_userid NUMBER;
4582 l_attribute_tbl aso_attribute_label_tbl_type;
4583
4584 CURSOR get_requester_details (
4585 c_approval_id NUMBER
4586 ) IS
4587 SELECT requester_comments
4588 FROM aso_apr_obj_approvals
4589 WHERE object_approval_id = c_approval_id;
4590 BEGIN
4591 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4592 aso_debug_pub.ADD (
4593 'Begin REQUESTER_COMMENTS_DOC procedure ',
4594 1,
4595 'N'
4596 );
4597 END IF;
4598 itemtype := NVL (
4599 SUBSTR (
4600 document_id,
4601 1,
4602 INSTR (
4603 document_id,
4604 ':'
4605 ) - 1
4606 ),
4607 'ASOAPPRV'
4608 );
4609 itemkey := SUBSTR (
4610 document_id,
4611 INSTR (
4612 document_id,
4613 ':'
4614 ) + 1
4615 ) || 'HED';
4616 l_approval_id := wf_engine.getitemattrnumber (
4617 itemtype => itemtype,
4618 itemkey => itemkey,
4619 aname => 'APPROVALID'
4620 );
4621 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4622 aso_debug_pub.ADD (
4623 'ItemType is:' || itemtype,
4624 1,
4625 'N'
4626 );
4627 aso_debug_pub.ADD (
4628 'ItemKey is :' || itemkey,
4629 1,
4630 'N'
4631 );
4632 aso_debug_pub.ADD (
4633 'Approval ID :' || l_approval_id,
4634 1,
4635 'N'
4636 );
4637 END IF;
4638 -- get the attribute labels
4639
4640 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4641 aso_debug_pub.ADD (
4642 'Calling the get_attribute_label procedure ',
4643 1,
4644 'N'
4645 );
4646 END IF;
4647 get_attribute_label (
4648 l_approval_id,
4649 l_attribute_tbl
4650 );
4651
4652 -- Create an html text buffer
4653 IF (display_type = 'text/html')
4654 THEN
4655 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4656 aso_debug_pub.ADD (
4657 'Display type is text/html',
4658 1,
4659 'N'
4660 );
4661 END IF;
4662 OPEN get_requester_details (
4663 l_approval_id
4664 );
4665 FETCH get_requester_details INTO l_requester_comments;
4666 CLOSE get_requester_details;
4667 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4668 aso_debug_pub.ADD (
4669 'Creating a text/html document ',
4670 1,
4671 'N'
4672 );
4673 END IF;
4674 document := document
4675 || '<span class=sectionHeader1>'
4676 || l_attribute_tbl (
4677 10
4678 )
4679 || '</span>';
4680 document :=
4681 document
4682 || '<table cellspacing=1 cellpadding=1 width="75%" border=0>';
4683 document := document || '<tr>';
4684 document := document || '<td>' || l_requester_comments || '</td>';
4685 document := document || '</tr></table>';
4686 document_type := 'text/html';
4687 END IF;
4688
4689 -- Create a plain text buffer
4690
4691 IF (display_type = 'text/plain')
4692 THEN
4693 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4694 aso_debug_pub.ADD (
4695 'Display type is text/plain',
4696 1,
4697 'N'
4698 );
4699 END IF;
4700 document := document || fnd_global.local_chr (
4701 10
4702 );
4703 document := document || l_attribute_tbl (
4704 10
4705 );
4706 document := document || fnd_global.local_chr (
4707 10
4708 );
4709
4710 FOR i IN get_requester_details (
4711 l_approval_id
4712 )
4713 LOOP
4714 document := document || i.requester_comments;
4715 END LOOP;
4716
4717 document := document || fnd_global.local_chr (
4718 10
4719 );
4720 document_type := 'text/plain';
4721 END IF;
4722
4723 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4724 aso_debug_pub.ADD (
4725 'End REQUESTER_COMMENTS_DOC procedure ',
4726 1,
4727 'N'
4728 );
4729 END IF;
4730 EXCEPTION
4731 WHEN OTHERS
4732 THEN
4733 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4734 aso_debug_pub.ADD (
4735 'Exception in REQUESTER_COMMENTS_DOC SqlCode :' || SQLERRM,
4736 1,
4737 'N'
4738 );
4739 END IF;
4740 wf_core.CONTEXT (
4741 'ASOAPPRV',
4742 'REQUESTER_COMMENTS_DOC',
4743 itemtype,
4744 itemkey
4745 );
4746 RAISE;
4747 END requester_comments_doc;
4748
4749 PROCEDURE rule_details_doc (
4750 document_id IN VARCHAR2,
4751 display_type IN VARCHAR2,
4752 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
4753 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
4754 ) IS
4755 itemtype VARCHAR2 (30);
4756 itemkey VARCHAR2 (30);
4757 l_approval_id NUMBER;
4758 l_rule_description VARCHAR2 (240);
4759 l_approval_level VARCHAR2 (240);
4760 l_attribute_tbl aso_attribute_label_tbl_type;
4761 l_ruletypeout VARCHAR2 (240);
4762 l_conditionidsout ame_util.idlist;
4763 l_approvaltypenameout VARCHAR2 (240);
4764 l_approvaltypedescriptionout VARCHAR2 (240);
4765
4766 CURSOR get_rule_details (
4767 c_approval_id NUMBER
4768 ) IS
4769 SELECT oam_rule_id
4770 FROM aso_apr_rules
4771 WHERE object_approval_id = c_approval_id;
4772 BEGIN
4773 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4774 aso_debug_pub.ADD (
4775 'Begin RULE_DETAILS_DOC procedure ',
4776 1,
4777 'N'
4778 );
4779 END IF;
4780 itemtype := NVL (
4781 SUBSTR (
4782 document_id,
4783 1,
4784 INSTR (
4785 document_id,
4786 ':'
4787 ) - 1
4788 ),
4789 'ASOAPPRV'
4790 );
4791 itemkey := SUBSTR (
4792 document_id,
4793 INSTR (
4794 document_id,
4795 ':'
4796 ) + 1
4797 ) || 'HED';
4798 l_approval_id := wf_engine.getitemattrnumber (
4799 itemtype => itemtype,
4800 itemkey => itemkey,
4801 aname => 'APPROVALID'
4802 );
4803 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4804 aso_debug_pub.ADD (
4805 'ItemType is:' || itemtype,
4806 1,
4807 'N'
4808 );
4809 aso_debug_pub.ADD (
4810 'ItemKey is :' || itemkey,
4811 1,
4812 'N'
4813 );
4814 aso_debug_pub.ADD (
4815 'Approval ID :' || l_approval_id,
4816 1,
4817 'N'
4818 );
4819 END IF;
4820 -- get the attribute label
4821
4822 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4823 aso_debug_pub.ADD (
4824 'Calling the get_attribute_label procedure ',
4825 1,
4826 'N'
4827 );
4828 END IF;
4829 get_attribute_label (
4830 l_approval_id,
4831 l_attribute_tbl
4832 );
4833
4834 -- Create an html text buffer
4835 IF (display_type = 'text/html')
4836 THEN
4837 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4838 aso_debug_pub.ADD (
4839 'Display type is text/html',
4840 1,
4841 'N'
4842 );
4843 END IF;
4844 document := document
4845 || '<span class=sectionHeader1>'
4846 || l_attribute_tbl (
4847 14
4848 )
4849 || '</span>';
4850 document :=
4851 document
4852 || '<table class=OraBGAccentDark cellspacing=1 cellpadding=1 width="75%" border=0>';
4853 document :=
4854 document
4855 || '<tr> <td class="tableSmallHeaderCell" align="center">'
4856 || l_attribute_tbl (
4857 15
4858 )
4859 || '</td>';
4860 document := document
4861 || '<td class="tableSmallHeaderCell" align="center">'
4862 || l_attribute_tbl (
4863 16
4864 )
4865 || '</td></tr>';
4866
4867 FOR i IN get_rule_details (
4868 l_approval_id
4869 )
4870 LOOP
4871 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4872 aso_debug_pub.ADD (
4873 'Calling AME get applicable rules procedure',
4874 1,
4875 'N'
4876 );
4877 END IF;
4878 ame_api.getruledetails1 (
4879 ruleidin => i.oam_rule_id,
4880 ruletypeout => l_ruletypeout,
4881 ruledescriptionout => l_rule_description,
4882 conditionidsout => l_conditionidsout,
4883 approvaltypenameout => l_approvaltypenameout,
4884 approvaltypedescriptionout => l_approvaltypedescriptionout,
4885 approvaldescriptionout => l_approval_level
4886 );
4887 document := document
4888 || '<tr> <td class="tableDataCell">'
4889 || l_rule_description
4890 || '</td>';
4891 document := document
4892 || '<td class="tableDataCell">'
4893 || l_approval_level
4894 || '</td></tr>';
4895 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4896 aso_debug_pub.ADD (
4897 'Rule Description is ' || l_rule_description,
4898 1,
4899 'N'
4900 );
4901 aso_debug_pub.ADD (
4902 'Approval level is ' || l_approval_level,
4903 1,
4904 'N'
4905 );
4906 END IF;
4907 END LOOP;
4908
4909 document := document || '</table>';
4910 document_type := 'text/html';
4911 END IF;
4912
4913 -- Create a plain text buffer
4914
4915 IF (display_type = 'text/plain')
4916 THEN
4917 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4918 aso_debug_pub.ADD (
4919 'Display type is text/plain',
4920 1,
4921 'N'
4922 );
4923 END IF;
4924 document := document || fnd_global.local_chr (
4925 10
4926 );
4927 document := document || l_attribute_tbl (
4928 14
4929 );
4930 document := document || fnd_global.local_chr (
4931 10
4932 );
4933
4934 FOR i IN get_rule_details (
4935 l_approval_id
4936 )
4937 LOOP
4938 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4939 aso_debug_pub.ADD (
4940 'Calling AME get applicable rules procedure',
4941 1,
4942 'N'
4943 );
4944 END IF;
4945 ame_api.getruledetails1 (
4946 ruleidin => i.oam_rule_id,
4947 ruletypeout => l_ruletypeout,
4948 ruledescriptionout => l_rule_description,
4949 conditionidsout => l_conditionidsout,
4950 approvaltypenameout => l_approvaltypenameout,
4951 approvaltypedescriptionout => l_approvaltypedescriptionout,
4952 approvaldescriptionout => l_approval_level
4953 );
4954 document := document || l_attribute_tbl (
4955 15
4956 );
4957 document := document || ': ';
4958 document := document || l_rule_description;
4959 document := document || fnd_global.local_chr (
4960 10
4961 );
4962 document := document || l_attribute_tbl (
4963 16
4964 );
4965 document := document || ': ';
4966 document := document || l_approval_level;
4967 END LOOP;
4968
4969 document_type := 'text/plain';
4970 END IF;
4971
4972 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4973 aso_debug_pub.ADD (
4974 'End RULE_DETAILS_DOC procedure ',
4975 1,
4976 'N'
4977 );
4978 END IF;
4979 EXCEPTION
4980 WHEN OTHERS
4981 THEN
4982 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4983 aso_debug_pub.ADD (
4984 'Exception in RULE_DETAILS_DOC SqlCode :' || SQLERRM,
4985 1,
4986 'N'
4987 );
4988 END IF;
4989 wf_core.CONTEXT (
4990 'ASOAPPRV',
4991 'RULE_DETAILS_DOC',
4992 itemtype,
4993 itemkey
4994 );
4995 RAISE;
4996 END rule_details_doc;
4997
4998 PROCEDURE quote_detail_url (
4999 document_id IN VARCHAR2,
5000 display_type IN VARCHAR2,
5001 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
5002 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
5003 ) IS
5004 itemtype VARCHAR2 (30);
5005 itemkey VARCHAR2 (30);
5006 l_approval_id NUMBER;
5007 -- hyang performance fix bug 2860045
5008 l_quote_header_id NUMBER;
5009 l_jsp_name VARCHAR2 (2000);
5010 l_url VARCHAR2 (2000);
5011 l_attribute_tbl aso_attribute_label_tbl_type;
5012 l_quote_number NUMBER;
5013 l_party_number VARCHAR2(30);
5014 l_cust_account_id NUMBER;
5015 l_party_type VARCHAR2 (50);
5016 l_org_id NUMBER;
5017 l_notification_id NUMBER;
5018
5019 -- hyang performance fix bug 2860045
5020 CURSOR get_object_details (
5021 c_approval_id NUMBER
5022 ) IS
5023 SELECT quote_header_id, quote_number,qha.org_id
5024 FROM aso_quote_headers_all qha, aso_apr_obj_approvals aoa
5025 WHERE qha.quote_header_id = aoa.object_id
5026 AND aoa.object_approval_id = c_approval_id;
5027
5028 -- bug 3934660 replace qha.party_id with cust_party_id
5029
5030 CURSOR get_quote_details (
5031 c_quote_header_id NUMBER
5032 ) IS
5033 SELECT hca.cust_account_id, hp.party_type
5034 FROM aso_quote_headers_all qha,
5035 hz_parties hp,
5036 hz_cust_accounts hca
5037 WHERE qha.quote_header_id = c_quote_header_id
5038 AND nvl(qha.cust_account_id,0 ) = hca.cust_account_id (+)
5039 AND qha.cust_party_id = hp.party_id;
5040
5041 BEGIN
5042 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5043 aso_debug_pub.ADD (
5044 'Begin QUOTE_DETAIL_URL procedure ',
5045 1,
5046 'N'
5047 );
5048 END IF;
5049 itemtype := NVL (
5050 SUBSTR (
5051 document_id,
5052 1,
5053 INSTR (
5054 document_id,
5055 ':'
5056 ) - 1
5057 ),
5058 'ASOAPPRV'
5059 );
5060 itemkey := SUBSTR (
5061 document_id,
5062 INSTR (
5063 document_id,
5064 ':'
5065 ) + 1
5066 ) || 'HED';
5067 l_approval_id := wf_engine.getitemattrnumber (
5068 itemtype => itemtype,
5069 itemkey => itemkey,
5070 aname => 'APPROVALID'
5071 );
5072 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5073 aso_debug_pub.ADD (
5074 'ItemType is:' || itemtype,
5075 1,
5076 'N'
5077 );
5078 aso_debug_pub.ADD (
5079 'ItemKey is :' || itemkey,
5080 1,
5081 'N'
5082 );
5083 aso_debug_pub.ADD (
5084 'Approval ID :' || l_approval_id,
5085 1,
5086 'N'
5087 );
5088 END IF;
5089 -- get the quote header id
5090 -- hyang performance fix, added l_quote_header_id, bug 2860045
5091 OPEN get_object_details (
5092 l_approval_id
5093 );
5094 FETCH get_object_details INTO l_quote_header_id, l_quote_number,l_org_id;
5095 CLOSE get_object_details;
5096 OPEN get_quote_details (
5097 l_quote_header_id
5098 );
5099 FETCH get_quote_details INTO l_cust_account_id,
5100 l_party_type;
5101 CLOSE get_quote_details;
5102
5103 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5104 aso_debug_pub.ADD (
5105 'Quote header ID is ' || l_quote_header_id,
5106 1,
5107 'N'
5108 );
5109 END IF;
5110 -- get the server address
5111 l_url := fnd_web_config.jsp_agent (
5112 );
5113 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5114 aso_debug_pub.ADD (
5115 'URL ID is ' || l_url,
5116 1,
5117 'N'
5118 );
5119 END IF;
5120 -- get the jsp name
5121
5122 l_jsp_name := 'qotSZzpAppsLink.jsp?';
5123 l_jsp_name := l_jsp_name || 'qotFrmMainFile=qotSZzdContainer.jsp';
5124 l_jsp_name := l_jsp_name
5125 || fnd_global.local_chr (
5126 38
5127 )
5128 || 'qotFrmDspFile=qotSCocOverview.jsp';
5129 l_jsp_name := l_jsp_name
5130 || fnd_global.local_chr (
5131 38
5132 )
5133 || 'qotFrmRefFile=qotSCocOverview.jsp';
5134 l_jsp_name := l_jsp_name
5135 || fnd_global.local_chr (
5136 38
5137 )
5138 || 'qotDetCode=QUOTE';
5139 l_jsp_name := l_jsp_name
5140 || fnd_global.local_chr (
5141 38
5142 )
5143 || 'qotPtyType='
5144 || l_party_type;
5145 l_jsp_name := l_jsp_name
5146 || fnd_global.local_chr (
5147 38
5148 )
5149 || 'qotHdrId='
5150 || l_quote_header_id;
5151 l_jsp_name := l_jsp_name
5152 || fnd_global.local_chr (
5153 38
5154 )
5155 || 'qotHdrAcctId='
5156 || l_cust_account_id;
5157 l_jsp_name := l_jsp_name
5158 || fnd_global.local_chr (
5159 38
5160 )
5161 || 'qotHdrNbr='
5162 || l_quote_number;
5163 l_jsp_name := l_jsp_name
5164 || fnd_global.local_chr (
5165 38
5166 )
5167 || 'qotReqSetCookie=Y';
5168 l_jsp_name := l_jsp_name
5169 || fnd_global.local_chr (
5170 38
5171 )
5172 || 'qotFromApvlLink=Y';
5173
5174 -- bug 3178070
5175 l_jsp_name := l_jsp_name
5176 || fnd_global.local_chr (
5177 38
5178 )
5179 || 'qotApvOrgId='
5180 || l_org_id;
5181
5182 l_jsp_name := l_jsp_name
5183 || fnd_global.local_chr (
5184 38
5185 )
5186 || 'qotApvNotifId=NID';
5187
5188
5189
5190
5191 -- get the attribute label
5192 get_attribute_label (
5193 l_approval_id,
5194 l_attribute_tbl
5195 );
5196
5197 -- Create an html text buffer
5198 IF (display_type = 'text/html')
5199 THEN
5200 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5201 aso_debug_pub.ADD (
5202 'Display type is text/html',
5203 1,
5204 'N'
5205 );
5206 END IF;
5207 document := '<a href = "'
5208 || l_url
5209 || l_jsp_name
5210 || '">'
5211 || l_attribute_tbl (
5212 1
5213 )
5214 || '</a>';
5215 document_type := 'text/html';
5216 END IF;
5217
5218 -- Create a plain text buffer
5219
5220 IF (display_type = 'text/plain')
5221 THEN
5222 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5223 aso_debug_pub.ADD (
5224 'Display type is text/plain',
5225 1,
5226 'N'
5227 );
5228 END IF;
5229 NULL;
5230 document_type := 'text/plain';
5231 END IF;
5232
5233 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5234 aso_debug_pub.ADD (
5235 'End QUOTE_DETAIL_URL procedure ',
5236 1,
5237 'N'
5238 );
5239 END IF;
5240 EXCEPTION
5241 WHEN OTHERS
5242 THEN
5243 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5244 aso_debug_pub.ADD (
5245 'Exception in QUOTE_DETAIL_URL SqlCode :' || SQLERRM,
5246 1,
5247 'N'
5248 );
5249 END IF;
5250 wf_core.CONTEXT (
5251 'ASOAPPRV',
5252 'QUOTE_DETAIL_URL',
5253 itemtype,
5254 itemkey
5255 );
5256 RAISE;
5257 END quote_detail_url;
5258
5259 PROCEDURE get_attribute_label (
5260 p_approval_id IN NUMBER,
5261 p_attribute_tbl OUT NOCOPY /* file.sql.39 change */ aso_attribute_label_tbl_type
5262 ) IS
5263 l_application_id NUMBER;
5264
5265 CURSOR get_application_id (
5266 c_approval_id NUMBER
5267 ) IS
5268 SELECT application_id
5269 FROM aso_apr_obj_approvals
5270 WHERE object_approval_id = c_approval_id;
5271
5272 -- hyang, bug 2860045, performance fix.
5273 CURSOR get_label (
5274 c_application_id NUMBER
5275 ) IS
5276 SELECT attribute_label_long
5277 FROM ak_region_items ara, ak_attributes_tl aat
5278 WHERE region_code = 'ASO_APR_NOTIFICATION'
5279 and region_application_id = c_application_id
5280 AND AAT.ATTRIBUTE_APPLICATION_ID = ARA.ATTRIBUTE_APPLICATION_ID
5281 AND AAT.ATTRIBUTE_CODE = ARA.ATTRIBUTE_CODE
5282 AND AAT.LANGUAGE = USERENV('LANG')
5283 ORDER by display_sequence;
5284 BEGIN
5285 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5286 aso_debug_pub.ADD (
5287 'begin GET_ATTRIBUTE_LABEL procedure ',
5288 1,
5289 'N'
5290 );
5291 END IF;
5292 -- get the application id
5293 OPEN get_application_id (
5294 p_approval_id
5295 );
5296 FETCH get_application_id INTO l_application_id;
5297 CLOSE get_application_id;
5298 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5299 aso_debug_pub.ADD (
5300 'Application ID is ' || l_application_id,
5301 1,
5302 'N'
5303 );
5304 END IF;
5305 p_attribute_tbl := aso_attribute_label_tbl_type (
5306 );
5307
5308 -- fetch the labels and populate the PL/SQL table
5309
5310 FOR i IN get_label (
5311 697
5312 )
5313 LOOP
5314 p_attribute_tbl.EXTEND;
5315 p_attribute_tbl (
5316 p_attribute_tbl.COUNT
5317 ) := i.attribute_label_long;
5318 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5319 aso_debug_pub.ADD (
5320 'Label is ' || p_attribute_tbl (
5321 p_attribute_tbl.COUNT
5322 ),
5323 1,
5324 'N'
5325 );
5326 END IF;
5327 END LOOP;
5328
5329 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5330 aso_debug_pub.ADD (
5331 'Count of labels is ' || p_attribute_tbl.COUNT,
5332 1,
5333 'N'
5334 );
5335 aso_debug_pub.ADD (
5336 'End GET_ATTRIBUTE_LABEL procedure ',
5337 1,
5338 'N'
5339 );
5340 END IF;
5341 EXCEPTION
5342 WHEN OTHERS
5343 THEN
5344 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5345 aso_debug_pub.ADD (
5346 'Exception in GET_ATTRIBUTE_LABEL SqlCode :' || SQLERRM,
5347 1,
5348 'N'
5349 );
5350 END IF;
5351 wf_core.CONTEXT (
5352 'ASOAPPRV',
5353 'GET_ATTRIBUTE_LABEL',
5354 SQLERRM
5355 );
5356 RAISE;
5357 END get_attribute_label;
5358
5359
5360 FUNCTION GetRunFuncURL
5361 ( p_function_name IN VARCHAR2
5362 , p_resp_appl_id IN NUMBER DEFAULT NULL
5363 , p_resp_id IN NUMBER DEFAULT NULL
5364 , p_security_group_id IN NUMBER DEFAULT NULL
5365 , p_parameters IN VARCHAR2 DEFAULT NULL
5366 ) RETURN VARCHAR2
5367 IS
5368
5369 l_function_id NUMBER ;
5370 l_resp_appl_id NUMBER := p_resp_appl_id;
5371 l_resp_id NUMBER := p_resp_id ;
5372 l_security_group_id NUMBER := p_security_group_id;
5373
5374 BEGIN
5375
5376 l_function_id := fnd_function.get_function_id(p_function_name) ;
5377
5378
5379 IF p_resp_appl_id IS NULL THEN
5380 l_resp_appl_id := -1 ;
5381 END IF ;
5382
5383
5384 IF p_resp_id IS NULL THEN
5385 l_resp_id := -1 ;
5386 END IF ;
5387
5388 IF p_security_group_id IS NULL THEN
5389 l_security_group_id := -1 ;
5390 END IF ;
5391
5392 -- Call Fnd API
5393 RETURN fnd_run_function.get_run_function_url
5394 ( p_function_id => l_function_id
5395 , p_resp_appl_id => l_resp_appl_id
5396 , p_resp_id => l_resp_id
5397 , p_security_group_id => l_security_group_id
5398 , p_parameters => p_parameters ) ;
5399
5400
5401 END GetRunFuncURL ;
5402
5403
5404 PROCEDURE set_attributes (
5405 itemtype IN VARCHAR2,
5406 itemkey IN VARCHAR2,
5407 actid IN NUMBER,
5408 funcmode IN VARCHAR2,
5409 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
5410 ) IS
5411
5412 l_approval_object VARCHAR2 (4000);
5413 l_approval_id NUMBER;
5414 l_org_id NUMBER;
5415 l_ampsign VARCHAR2(1) := fnd_global.local_chr(38);
5416 l_url VARCHAR2(32000);
5417
5418
5419 CURSOR OBJECT (
5420 c_approval_id NUMBER
5421 ) IS
5422 SELECT quote_name, quote_number,org_id,quote_header_id
5423 FROM aso_quote_headers_all qha, aso_apr_obj_approvals aoa
5424 WHERE qha.quote_header_id = aoa.object_id
5425 AND aoa.object_approval_id = c_approval_id;
5426
5427 BEGIN
5428 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5429 aso_debug_pub.ADD (
5430 'Begin set attribute Process',
5431 1,
5432 'N'
5433 );
5434 END IF;
5435
5436 IF funcmode = 'RUN'
5437 THEN
5438 l_approval_id := wf_engine.getitemattrnumber (
5439 itemtype,
5440 itemkey,
5441 'APPROVALID'
5442 );
5443
5444 FOR i IN OBJECT (
5445 l_approval_id
5446 )
5447 LOOP
5448 l_approval_object := i.quote_name;
5449 l_org_id := i.org_id;
5450
5451 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5452 aso_debug_pub.ADD (
5453 'Quote name :' || l_approval_object,
5454 1,
5455 'N'
5456 );
5457 END IF;
5458 wf_engine.setitemattrtext (
5459 itemtype => itemtype,
5460 itemkey => itemkey,
5461 aname => 'APPROVAL_OBJECT',
5462 avalue => l_approval_object
5463 );
5464
5465 wf_engine.setitemattrnumber (
5466 itemtype => itemtype,
5467 itemkey => itemkey,
5468 aname => 'ORGID',
5469 avalue => l_org_id
5470 );
5471
5472 wf_engine.setitemattrnumber (
5473 itemtype => itemtype,
5474 itemkey => itemkey,
5475 aname => 'QTEHDRID',
5476 avalue => i.quote_header_id
5477 );
5478
5479 wf_engine.setitemattrnumber (
5480 itemtype => itemtype,
5481 itemkey => itemkey,
5482 aname => 'QTENUMBER',
5483 avalue => i.quote_number
5484 );
5485
5486
5487 -- bug 5350149
5488 l_url := aso_apr_wf_pvt.GetRunFuncURL(
5489 p_function_name => 'QOT_OAUI_QUOTE_DETAILS',
5490 p_resp_appl_id => FND_GLOBAL.RESP_APPL_ID,
5491 p_resp_id => FND_GLOBAL.RESP_ID,
5492 p_parameters => l_ampsign||l_ampsign||'QotIntgEvtSrc=ApvlNotif'||l_ampsign||'QotIntgEvt=Event.QuoteDet'||l_ampsign||'QotIntgEvtVal='
5493 ||i.quote_header_id||l_ampsign||'QotIntgEvtVal1='||i.quote_number||l_ampsign||'addBreadCrumb=Y') ;
5494
5495
5496 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5497 aso_debug_pub.ADD ('RESP_APPL_ID: ' || FND_GLOBAL.RESP_APPL_ID,1,'N');
5498 aso_debug_pub.ADD ('RESP_ID: ' || FND_GLOBAL.RESP_ID,1,'N');
5499 aso_debug_pub.ADD ('l_url: '||substr(l_url,1,240),1,'N');
5500 END IF;
5501
5502
5503 wf_engine.setitemattrtext (
5504 itemtype => itemtype,
5505 itemkey => itemkey,
5506 aname => 'OAQTEDETAILLNK',
5507 avalue => l_url
5508 );
5509
5510 END LOOP;
5511 resultout := 'COMPLETE';
5512 END IF;
5513 EXCEPTION
5514 WHEN OTHERS
5515 THEN
5516 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5517 aso_debug_pub.ADD (
5518 'Exception in Set Attributes SqlCode :' || SQLERRM,
5519 1,
5520 'N'
5521 );
5522 END IF;
5523 wf_core.CONTEXT (
5524 'ASOAPPRV',
5525 'set_attributes',
5526 itemtype,
5527 itemkey
5528 );
5529 RAISE;
5530
5531 END;
5532
5533 PROCEDURE update_approval_status (
5534 p_update_header_or_detail_flag IN VARCHAR2,
5535 p_object_approval_id IN NUMBER,
5536 p_approval_det_id IN NUMBER,
5537 p_status IN VARCHAR2,
5538 note IN VARCHAR2
5539 ) is
5540 begin
5541 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5542 aso_debug_pub.ADD (
5543 'Start update_approval_status procedure ',
5544 1,
5545 'N'
5546 );
5547
5548 aso_debug_pub.ADD (
5549 'Flag is :' || p_update_header_or_detail_flag,
5550 1,
5551 'N'
5552 );
5553 aso_debug_pub.ADD (
5554 'Object Approval ID is :' || p_object_approval_id,
5555 1,
5556 'N'
5557 );
5558 aso_debug_pub.ADD (
5559 'Approval Detail ID is :' || p_approval_det_id,
5560 1,
5561 'N'
5562 );
5563 aso_debug_pub.ADD (
5564 'Status is :' || p_status,
5565 1,
5566 'N'
5567 );
5568
5569 END IF;
5570
5571 IF p_update_header_or_detail_flag = 'HEADER' THEN
5572 IF (p_status = 'PEND')
5573 THEN
5574 UPDATE aso_apr_obj_approvals
5575 SET approval_status = p_status,
5576 last_update_date = SYSDATE,
5577 last_updated_by = g_user_id,
5578 last_update_login = g_user_id
5579 WHERE object_approval_id = p_object_approval_id;
5580 ELSE
5581 UPDATE aso_apr_obj_approvals
5582 SET approval_status = p_status,
5583 last_update_date = SYSDATE,
5584 end_date = SYSDATE,
5585 last_updated_by = g_user_id,
5586 last_update_login = g_user_id
5587 WHERE object_approval_id = p_object_approval_id;
5588 END IF;
5589
5590 END IF;
5591
5592 IF p_update_header_or_detail_flag = 'DETAIL' THEN
5593 UPDATE aso_apr_approval_details
5594 SET approver_status = p_status,
5595 date_received = SYSDATE,
5596 last_update_date = SYSDATE,
5597 approver_comments = note,
5598 last_updated_by = fnd_global.user_id,
5599 last_update_login = fnd_global.user_id
5600 WHERE approval_det_id = p_approval_det_id;
5601 END IF;
5602
5603 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5604 aso_debug_pub.ADD (
5605 'End update_approval_status procedure ',
5606 1,
5607 'N'
5608 );
5609 END IF;
5610
5611 end;
5612
5613
5614 END aso_apr_wf_pvt;