[Home] [Help]
PACKAGE BODY: APPS.ASO_APR_WF_PVT
Source
1 PACKAGE BODY aso_apr_wf_pvt AS
2 /* $Header: asovwapb.pls 120.12 2012/01/04 10:32:48 rassharm 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 x_msg_data VARCHAR2 (2000); -- bug 13508417
1798 l_msgenabled VARCHAR2 (3) := 'Y';
1799 l_notifname VARCHAR2 (240);
1800 get_message_error EXCEPTION;
1801 notif_not_enabled_error EXCEPTION;
1802
1803 BEGIN
1804 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1805 aso_debug_pub.ADD (
1806 'Start of SEND NOTIFICATION Procedure',
1807 1,
1808 'N'
1809 );
1810 aso_debug_pub.ADD (
1811 'actid is ' || TO_CHAR (
1812 actid
1813 ),
1814 1,
1815 'N'
1816 );
1817 END IF;
1818
1819 IF funcmode = 'RUN'
1820 THEN
1821 -- Please note that the notification event name is same as message name
1822 l_notifname := wf_engine.getitemattrtext (
1823 itemtype,
1824 itemkey,
1825 'MESSAGE'
1826 );
1827 l_message := l_notifname;
1828 l_notifname := 'ASO_' || l_notifname;
1829 -- Check if the notification is enabled for that event
1830
1831 l_notifenabled := ibe_wf_notif_setup_pvt.check_notif_enabled (
1832 l_notifname
1833 );
1834 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1835 aso_debug_pub.ADD (
1836 'Notification Name: ' || l_notifname || ' Enabled: ' || l_notifenabled,
1837 1,
1838 'N'
1839 );
1840 END IF;
1841
1842 IF l_notifenabled = 'Y'
1843 THEN
1844 -- Get the approval id
1845 l_approval_id := wf_engine.getitemattrnumber (
1846 itemtype,
1847 itemkey,
1848 'APPROVALID'
1849 );
1850 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1851 aso_debug_pub.ADD (
1852 'Approval ID :' || l_approval_id,
1853 1,
1854 'N'
1855 );
1856 END IF;
1857 -- get the org id
1858 /*OPEN get_org_id (
1859 l_approval_id
1860 );
1861 FETCH get_org_id INTO l_orgid;
1862 CLOSE get_org_id; */
1863
1864 l_orgid := wf_engine.getitemattrnumber (
1865 itemtype,
1866 itemkey,
1867 'ORGID'
1868 );
1869
1870 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1871 aso_debug_pub.ADD (
1872 'Org Id is ' || l_orgid,
1873 1,
1874 'N'
1875 );
1876 END IF;
1877 -- Retreive the message name for that event
1878
1879 x_return_status := fnd_api.g_ret_sts_success;
1880
1881 ibe_wf_msg_mapping_pvt.retrieve_msg_mapping (
1882 p_org_id => l_orgid,
1883 p_msite_id => NULL,
1884 p_user_type => NULL,
1885 p_notif_name => l_notifname,
1886 x_enabled_flag => l_msgenabled,
1887 x_wf_message_name => l_message,
1888 x_return_status => x_return_status,
1889 x_msg_data => x_msg_data,
1890 x_msg_count => x_msg_count
1891 );
1892 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1893 aso_debug_pub.ADD (
1894 'Message Name: ' || l_message || ' Enabled: ' || l_msgenabled,
1895 1,
1896 'N'
1897 );
1898 END IF;
1899
1900 -- bug 3295179
1901 IF ( (x_return_status <> fnd_api.g_ret_sts_success) OR (l_message IS NULL) )
1902 --IF ((x_msg_count > 0)
1903 -- OR (l_message IS NULL)
1904 -- )
1905 THEN
1906 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1907 aso_debug_pub.ADD (
1908 'Message count is :' || x_msg_count,
1909 1,
1910 'N'
1911 );
1912 END IF;
1913 RAISE get_message_error;
1914 END IF;
1915
1916 IF l_msgenabled = 'Y'
1917 THEN
1918 -- Set the message name
1919 wf_engine.setitemattrtext (
1920 itemtype => itemtype,
1921 itemkey => itemkey,
1922 aname => 'MESSAGE',
1923 avalue => l_message
1924 );
1925 END IF;
1926 END IF;
1927
1928 IF (l_msgenabled <> 'Y')
1929 OR (l_notifenabled <> 'Y')
1930 THEN
1931 -- if the event is not enabled or message is not enabled
1932 -- if the notification requires a response
1933 IF ((l_message LIKE 'REQUEST_APPROVAL%') OR (l_message LIKE 'OA_REQUEST_APPROVAL%'))
1934 THEN
1935 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1936 aso_debug_pub.ADD (
1937 'Notification not enabled for REQUEST_APPROVAL',
1938 1,
1939 'N'
1940 );
1941 END IF;
1942 RAISE notif_not_enabled_error;
1943 ELSE
1944 -- if the notification is a FYI
1945 -- Check for FYI Message and if so make the attribute as Approval Message
1946 IF ((l_message LIKE 'FYI_TO_REQUESTER%') OR (l_message LIKE 'OA_FYI_TO_REQUESTER%'))
1947 THEN
1948 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1949 aso_debug_pub.ADD (
1950 'Setting the message name to OA_REQUEST_APPROVAL',
1951 1,
1952 'N'
1953 );
1954 END IF;
1955 wf_engine.setitemattrtext (
1956 itemtype => itemtype,
1957 itemkey => itemkey,
1958 aname => 'MESSAGE',
1959 avalue => 'OA_REQUEST_APPROVAL'
1960 );
1961 END IF;
1962
1963 resultout := 'COMPLETE';
1964 RETURN;
1965 END IF;
1966 END IF;
1967
1968 l_message := wf_engine.getitemattrtext (
1969 itemtype,
1970 itemkey,
1971 'MESSAGE'
1972 );
1973 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1974 aso_debug_pub.ADD (
1975 'Message is ' || l_message,
1976 1,
1977 'N'
1978 );
1979 END IF;
1980
1981 IF ((l_message LIKE 'REQUEST_APPROVAL_REMINDER%') OR (l_message LIKE 'OA_REQUEST_APPROVAL_REM%'))
1982 THEN
1983 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1984 aso_debug_pub.ADD (
1985 'As Message is REQUEST_APPROVAL_REMINDER will cancel original approval notif',
1986 1,
1987 'N'
1988 );
1989 END IF;
1990 l_notification_id := wf_engine.getitemattrnumber (
1991 itemtype,
1992 itemkey,
1993 'NOTIFICATION_ID'
1994 );
1995 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1996 aso_debug_pub.ADD (
1997 'Cancelling notification for notification ID :' || l_notification_id,
1998 1,
1999 'N'
2000 );
2001 END IF;
2002 wf_notification.CANCEL (
2003 nid => l_notification_id,
2004 cancel_comment => 'TIMEOUT'
2005 );
2006 END IF;
2007
2008 wf_standard.notify (
2009 itemtype,
2010 itemkey,
2011 actid,
2012 funcmode,
2013 resultout
2014 );
2015 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2016 aso_debug_pub.ADD (
2017 'Calling the standard notify process for Itemtype :'
2018 || itemtype
2019 || ' and itemkey :'
2020 || itemkey,
2021 1,
2022 'N'
2023 );
2024 END IF;
2025 -- Store the Notification id for timeout
2026
2027 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2028 aso_debug_pub.ADD (
2029 'Storing the notification id so as to be used in timeout case ',
2030 1,
2031 'N'
2032 );
2033 END IF;
2034
2035 IF (resultout IS NOT NULL)
2036 THEN
2037 l_first_colon_pos := INSTR (
2038 resultout,
2039 ':',
2040 1,
2041 1
2042 );
2043 l_second_colon_pos := INSTR (
2044 resultout,
2045 ':',
2046 1,
2047 2
2048 );
2049
2050 IF ((l_first_colon_pos <> 0)
2051 AND (l_second_colon_pos <> 0)
2052 )
2053 THEN
2054 l_notification_id := TO_NUMBER (
2055 SUBSTR (
2056 resultout,
2057 l_first_colon_pos + 1,
2058 l_second_colon_pos - l_first_colon_pos - 1
2059 )
2060 );
2061 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2062 aso_debug_pub.ADD (
2063 'Notification id is ' || l_notification_id,
2064 1,
2065 'N'
2066 );
2067 END IF;
2068 wf_engine.setitemattrnumber (
2069 itemtype => itemtype,
2070 itemkey => itemkey,
2071 aname => 'NOTIFICATION_ID',
2072 avalue => l_notification_id
2073 );
2074 END IF;
2075 END IF;
2076
2077 -- Check for FYI Message and if so make the attribute as Approval Message
2078 IF ((l_message LIKE 'FYI_TO_REQUESTER%') or (l_message LIKE 'OA_FYI_TO_REQUESTER%'))
2079 THEN
2080 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2081 aso_debug_pub.ADD (
2082 'Setting the message name to OA_REQUEST_APPROVAL',
2083 1,
2084 'N'
2085 );
2086 END IF;
2087 wf_engine.setitemattrtext (
2088 itemtype => itemtype,
2089 itemkey => itemkey,
2090 aname => 'MESSAGE',
2091 avalue => 'OA_REQUEST_APPROVAL'
2092 );
2093 ELSIF ((l_message LIKE 'REQUEST_APPROVAL%') or (l_message LIKE 'OA_REQUEST_APPROVAL%'))
2094 THEN
2095 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2096 aso_debug_pub.ADD (
2097 'Setting the message name to OA_REQUEST_APPROVAL_REM',
2098 1,
2099 'N'
2100 );
2101 END IF;
2102 wf_engine.setitemattrtext (
2103 itemtype => itemtype,
2104 itemkey => itemkey,
2105 aname => 'MESSAGE',
2106 avalue => 'OA_REQUEST_APPROVAL_REM'
2107 );
2108 END IF;
2109
2110 -- resultout := 'COMPLETE';
2111 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2112 aso_debug_pub.ADD (
2113 'End of SEND NOTIFICATION Procedure ',
2114 1,
2115 'N'
2116 );
2117 END IF;
2118 RETURN;
2119 END IF;
2120
2121 IF (funcmode = 'CANCEL')
2122 THEN
2123 resultout := 'COMPLETE';
2124 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2125 aso_debug_pub.ADD (
2126 'End of SEND NOTIFICATION Procedure ',
2127 1,
2128 'N'
2129 );
2130 END IF;
2131 RETURN;
2132 END IF;
2133
2134 resultout := '';
2135 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2136 aso_debug_pub.ADD (
2137 'End of SEND NOTIFICATION Procedure ',
2138 1,
2139 'N'
2140 );
2141 END IF;
2142 RETURN;
2143 EXCEPTION
2144 WHEN notif_not_enabled_error
2145 THEN
2146 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2147 aso_debug_pub.ADD (
2148 'Exception in SEND_NOTIFICATION Proc SqlCode :' || SQLERRM,
2149 1,
2150 'N'
2151 );
2152 END IF;
2153 wf_core.CONTEXT (
2154 'ASOAPPRV',
2155 'SEND_NOTIFICATION',
2156 'Mandatory Notification Name: ' || l_notifname || ' is not Enabled '
2157 );
2158 RAISE;
2159 WHEN get_message_error
2160 THEN
2161 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2162 aso_debug_pub.ADD (
2163 'Exception in SEND_NOTIFICATION Proc SqlCode :' || SQLERRM,
2164 1,
2165 'N'
2166 );
2167 END IF;
2168 wf_core.CONTEXT (
2169 'ASOAPPRV',
2170 'SEND_NOTIFICATION',
2171 'Error in retreiving Notification Message',
2172 'Message Name: ' || l_message || ' Enabled: ' || l_msgenabled
2173 );
2174 RAISE;
2175 WHEN OTHERS
2176 THEN
2177 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2178 aso_debug_pub.ADD (
2179 'Exception in SEND_NOTIFICATION Proc SqlCode :' || SQLERRM,
2180 1,
2181 'N'
2182 );
2183 END IF;
2184 wf_core.CONTEXT (
2185 'ASOAPPRV',
2186 'SEND_NOTIFICATION',
2187 itemtype,
2188 itemkey,
2189 TO_CHAR (
2190 actid
2191 ),
2192 funcmode
2193 );
2194 RAISE;
2195 END send_notification;
2196
2197 PROCEDURE update_entity (
2198 itemtype IN VARCHAR2,
2199 itemkey IN VARCHAR2,
2200 actid IN NUMBER,
2201 funcmode IN VARCHAR2,
2202 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2203 ) IS
2204 l_contract_approval_level VARCHAR2 (240);
2205 l_quote_header_rec aso_quote_pub.qte_header_rec_type;
2206 l_control_rec aso_quote_pub.control_rec_type;
2207 x_qte_header_rec aso_quote_pub.qte_header_rec_type;
2208 x_qte_line_tbl aso_quote_pub.qte_line_tbl_type;
2209 x_qte_line_dtl_tbl aso_quote_pub.qte_line_dtl_tbl_type;
2210 x_hd_price_attributes_tbl aso_quote_pub.price_attributes_tbl_type;
2211 x_hd_payment_tbl aso_quote_pub.payment_tbl_type;
2212 x_hd_shipment_tbl aso_quote_pub.shipment_tbl_type;
2213 x_hd_freight_charge_tbl aso_quote_pub.freight_charge_tbl_type;
2214 x_hd_tax_detail_tbl aso_quote_pub.tax_detail_tbl_type;
2215 x_line_attr_ext_tbl aso_quote_pub.line_attribs_ext_tbl_type;
2216 x_line_rltship_tbl aso_quote_pub.line_rltship_tbl_type;
2217 x_price_adjustment_tbl aso_quote_pub.price_adj_tbl_type;
2218 x_price_adj_attr_tbl aso_quote_pub.price_adj_attr_tbl_type;
2219 x_price_adj_rltship_tbl aso_quote_pub.price_adj_rltship_tbl_type;
2220 x_ln_price_attributes_tbl aso_quote_pub.price_attributes_tbl_type;
2221 x_ln_payment_tbl aso_quote_pub.payment_tbl_type;
2222 x_ln_shipment_tbl aso_quote_pub.shipment_tbl_type;
2223 x_ln_freight_charge_tbl aso_quote_pub.freight_charge_tbl_type;
2224 x_ln_tax_detail_tbl aso_quote_pub.tax_detail_tbl_type;
2225 x_return_status VARCHAR2 (240);
2226 x_msg_count NUMBER;
2227 x_msg_data VARCHAR2 (240);
2228 l_user_id Number;
2229 l_person_id Number;
2230 l_object_approval_id NUMBER;
2231 l_status varchar2(20);
2232 l_notifname varchar2(240);
2233 CURSOR get_quote_header_id (
2234 c_object_approval_id NUMBER
2235 ) IS
2236 SELECT object_id
2237 FROM aso_apr_obj_approvals
2238 WHERE object_approval_id = c_object_approval_id;
2239
2240 CURSOR check_contract_enabled (
2241 c_quote_header_id NUMBER
2242 ) IS
2243 SELECT contract_approval_level
2244 FROM aso_quote_headers_all
2245 WHERE quote_header_id = c_quote_header_id;
2246
2247 CURSOR get_latest_date (
2248 c_quote_header_id NUMBER
2249 ) IS
2250 SELECT last_update_date,org_id
2251 FROM aso_quote_headers_all
2252 WHERE quote_header_id = c_quote_header_id;
2253
2254 CURSOR get_quote_status_id (
2255 v_status VARCHAR2
2256 ) IS
2257 SELECT quote_status_id
2258 FROM aso_quote_statuses_b
2259 WHERE status_code = v_status;
2260
2261 CURSOR get_last_approver (
2262 c_object_approval_id NUMBER
2263 ) IS
2264 SELECT approver_person_id
2265 FROM aso_apr_approval_details
2266 WHERE object_approval_id = c_object_approval_id
2267 AND approver_sequence = (select max(approver_sequence)
2268 FROM aso_apr_approval_details
2269 WHERE object_approval_id = c_object_approval_id);
2270
2271 CURSOR get_user_id ( c_employee_id NUMBER)
2272 IS
2273 SELECT user_id
2274 FROM fnd_user
2275 WHERE employee_id = c_employee_id;
2276
2277
2278
2279 CURSOR get_rejected_approver (c_object_approval_id NUMBER) IS
2280 SELECT approver_person_id
2281 FROM aso_apr_approval_details
2282 WHERE object_approval_id = c_object_approval_id
2283 AND approver_status = 'REJ';
2284
2285 user_id number;
2286 resp_id number;
2287 resp_appl_id number;
2288 BEGIN
2289 -- Initialize the quote header record
2290
2291 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2292 aso_debug_pub.ADD (
2293 'Begin Update Entity Procedure ',
2294 1,
2295 'N'
2296 );
2297 END IF;
2298
2299 IF funcmode = 'RUN' THEN
2300
2301 l_object_approval_id := wf_engine.getitemattrnumber (
2302 itemtype,
2303 itemkey,
2304 'APPROVALID'
2305 );
2306
2307 l_notifname := wf_engine.getitemattrtext (
2308 itemtype,
2309 itemkey,
2310 'MESSAGE'
2311 );
2312 IF l_notifname = 'OA_REQUEST_REJECTED' then
2313 l_status := 'REJ';
2314 ELSIF l_notifname = 'OA_REQ_APPR_BY_ALL_APPR' THEN
2315 l_status := 'APPR';
2316 END IF;
2317
2318 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2319 aso_debug_pub.ADD (
2320 'Object approval ID :' || l_object_approval_id,
2321 1,
2322 'N'
2323 );
2324 aso_debug_pub.ADD (
2325 'Status :' || l_status,
2326 1,
2327 'N'
2328 );
2329 END IF;
2330 --g_user_id := fnd_global.user_id;
2331 -- fix for bug 3929409
2332 IF l_status = 'APPR' THEN
2333 OPEN get_last_approver (
2334 l_object_approval_id
2335 );
2336 FETCH get_last_approver INTO l_person_id;
2337 CLOSE get_last_approver;
2338
2339 OPEN get_user_id(l_person_id);
2340 FETCH get_user_id INTO l_user_id;
2341 CLOSE get_user_id;
2342
2343 g_user_id := l_user_id;
2344 ELSIF l_status = 'REJ' THEN
2345 OPEN get_rejected_approver(l_object_approval_id);
2346 FETCH get_rejected_approver into l_person_id;
2347 CLOSE get_rejected_approver;
2348
2349 OPEN get_user_id(l_person_id);
2350 FETCH get_user_id INTO l_user_id;
2351 CLOSE get_user_id;
2352 g_user_id := l_user_id;
2353
2354 ELSE
2355 g_user_id := fnd_global.user_id;
2356
2357 END IF;
2358
2359 user_id := fnd_global.user_id;
2360 resp_id := fnd_global.RESP_ID;
2361 resp_appl_id := fnd_global.RESP_APPL_ID;
2362
2363 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2364 aso_debug_pub.ADD( 'new debug for bug 6072144 ',1,'N');
2365 aso_debug_pub.ADD( 'BEFORE resetting the original values ',1,'N');
2366 aso_debug_pub.ADD( 'fnd_global.user_id: '|| fnd_global.user_id,1,'N');
2367 aso_debug_pub.ADD( 'fnd_global.resp_id: '|| fnd_global.resp_id,1,'N');
2368 aso_debug_pub.ADD( 'fnd_global.resp_appl_id: '|| fnd_global.resp_appl_id,1,'N');
2369 aso_debug_pub.ADD( 'end debug for bug 6072144 ',1,'N');
2370 END IF;
2371 FND_GLOBAL.APPS_INITIALIZE(g_user_id,0,0,0);
2372
2373 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2374 aso_debug_pub.ADD( 'After setting the global values ',1,'N');
2375 END IF;
2376
2377 l_quote_header_rec := aso_quote_pub.g_miss_qte_header_rec;
2378
2379 OPEN get_quote_header_id (
2380 l_object_approval_id
2381 );
2382 FETCH get_quote_header_id INTO l_quote_header_rec.quote_header_id;
2383 CLOSE get_quote_header_id;
2384 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2385 aso_debug_pub.ADD (
2386 'Quote Header ID :' || l_quote_header_rec.quote_header_id,
2387 1,
2388 'N'
2389 );
2390 END IF;
2391 -- Check if contract is enabled for the quote
2392 OPEN check_contract_enabled (
2393 l_quote_header_rec.quote_header_id
2394 );
2395 FETCH check_contract_enabled INTO l_contract_approval_level;
2396 CLOSE check_contract_enabled;
2397
2398 -- setting the quote status id
2399 IF l_status = 'APPR'
2400 THEN
2401 -- if contract is enabled, set status to contract enables
2402 IF l_contract_approval_level IS NOT NULL
2403 THEN
2404 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2405 aso_debug_pub.ADD (
2406 'Setting Quote Status to CONTRACT REQUIRED',
2407 1,
2408 'N'
2409 );
2410 END IF;
2411 OPEN get_quote_status_id (
2412 'CONTRACT REQUIRED'
2413 );
2414 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2415 CLOSE get_quote_status_id;
2416 ELSE
2417 -- otherwise set status to APPROVED
2418 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2419 aso_debug_pub.ADD (
2420 'Setting Quote Status to APPROVED',
2421 1,
2422 'N'
2423 );
2424 END IF;
2425 OPEN get_quote_status_id (
2426 'APPROVED'
2427 );
2428 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2429 CLOSE get_quote_status_id;
2430 END IF;
2431 ELSIF l_status = 'REJ'
2432 THEN
2433 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2434 aso_debug_pub.ADD (
2435 'Setting Quote Status to REJECTED',
2436 1,
2437 'N'
2438 );
2439 END IF;
2440 OPEN get_quote_status_id (
2441 'APPROVAL REJECTED'
2442 );
2443 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2444 CLOSE get_quote_status_id;
2445 ELSIF l_status = 'CAN'
2446 THEN
2447 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2448 aso_debug_pub.ADD (
2449 'Setting Quote Status to APPROVAL CANCELLED ',
2450 1,
2451 'N'
2452 );
2453 END IF;
2454 OPEN get_quote_status_id (
2455 'APPROVAL CANCELED'
2456 );
2457 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2458 CLOSE get_quote_status_id;
2459 ELSIF l_status = 'PEND'
2460 THEN
2461 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2462 aso_debug_pub.ADD (
2463 'Setting Quote Status to APPROVAL PENDING',
2464 1,
2465 'N'
2466 );
2467 END IF;
2468 OPEN get_quote_status_id (
2469 'APPROVAL PENDING'
2470 );
2471 FETCH get_quote_status_id INTO l_quote_header_rec.quote_status_id;
2472 CLOSE get_quote_status_id;
2473 END IF;
2474
2475 OPEN get_latest_date (
2476 l_quote_header_rec.quote_header_id
2477 );
2478 FETCH get_latest_date INTO l_quote_header_rec.last_update_date, l_quote_header_rec.org_id;
2479 CLOSE get_latest_date;
2480 -- Setting the auto version flag to true
2481 l_control_rec.auto_version_flag := fnd_api.g_true;
2482
2483 -- set the org context , see bug 4731684
2484 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2485 aso_debug_pub.ADD (
2486 'Before calling update quote: Setting the single org context to org_id: '|| l_quote_header_rec.org_id,
2487 1,
2488 'N'
2489 );
2490 END IF;
2491 mo_global.set_policy_context('S', l_quote_header_rec.org_id);
2492
2493
2494 -- Update the quote status by calling the update_quote API
2495
2496 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2497 aso_debug_pub.ADD (
2498 'Calling the update quote API in ASO_UPDATE_QUOTE_PUB package ',
2499 1,
2500 'N'
2501 );
2502 END IF;
2503 aso_quote_pub.update_quote (
2504 p_api_version_number => 1.0,
2505 p_init_msg_list => fnd_api.g_false,
2506 p_commit => fnd_api.g_false,
2507 p_control_rec => l_control_rec,
2508 p_qte_header_rec => l_quote_header_rec,
2509 p_hd_price_attributes_tbl => aso_quote_pub.g_miss_price_attributes_tbl,
2510 p_hd_payment_tbl => aso_quote_pub.g_miss_payment_tbl,
2511 p_hd_shipment_tbl => aso_quote_pub.g_miss_shipment_tbl,
2512 p_hd_freight_charge_tbl => aso_quote_pub.g_miss_freight_charge_tbl,
2513 p_hd_tax_detail_tbl => aso_quote_pub.g_miss_tax_detail_tbl,
2514 p_qte_line_tbl => aso_quote_pub.g_miss_qte_line_tbl,
2515 p_qte_line_dtl_tbl => aso_quote_pub.g_miss_qte_line_dtl_tbl,
2516 p_line_attr_ext_tbl => aso_quote_pub.g_miss_line_attribs_ext_tbl,
2517 p_line_rltship_tbl => aso_quote_pub.g_miss_line_rltship_tbl,
2518 p_price_adjustment_tbl => aso_quote_pub.g_miss_price_adj_tbl,
2519 p_price_adj_attr_tbl => aso_quote_pub.g_miss_price_adj_attr_tbl,
2520 p_price_adj_rltship_tbl => aso_quote_pub.g_miss_price_adj_rltship_tbl,
2521 p_ln_price_attributes_tbl => aso_quote_pub.g_miss_price_attributes_tbl,
2522 p_ln_payment_tbl => aso_quote_pub.g_miss_payment_tbl,
2523 p_ln_shipment_tbl => aso_quote_pub.g_miss_shipment_tbl,
2524 p_ln_freight_charge_tbl => aso_quote_pub.g_miss_freight_charge_tbl,
2525 p_ln_tax_detail_tbl => aso_quote_pub.g_miss_tax_detail_tbl,
2526 x_qte_header_rec => x_qte_header_rec,
2527 x_qte_line_tbl => x_qte_line_tbl,
2528 x_qte_line_dtl_tbl => x_qte_line_dtl_tbl,
2529 x_hd_price_attributes_tbl => x_hd_price_attributes_tbl,
2530 x_hd_payment_tbl => x_hd_payment_tbl,
2531 x_hd_shipment_tbl => x_hd_shipment_tbl,
2532 x_hd_freight_charge_tbl => x_hd_freight_charge_tbl,
2533 x_hd_tax_detail_tbl => x_hd_tax_detail_tbl,
2534 x_line_attr_ext_tbl => x_line_attr_ext_tbl,
2535 x_line_rltship_tbl => x_line_rltship_tbl,
2536 x_price_adjustment_tbl => x_price_adjustment_tbl,
2537 x_price_adj_attr_tbl => x_price_adj_attr_tbl,
2538 x_price_adj_rltship_tbl => x_price_adj_rltship_tbl,
2539 x_ln_price_attributes_tbl => x_ln_price_attributes_tbl,
2540 x_ln_payment_tbl => x_ln_payment_tbl,
2541 x_ln_shipment_tbl => x_ln_shipment_tbl,
2542 x_ln_freight_charge_tbl => x_ln_freight_charge_tbl,
2543 x_ln_tax_detail_tbl => x_ln_tax_detail_tbl,
2544 x_return_status => x_return_status,
2545 x_msg_count => x_msg_count,
2546 x_msg_data => x_msg_data
2547 );
2548
2549 IF x_return_status <> fnd_api.g_ret_sts_success
2550 THEN
2551 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2552 aso_debug_pub.ADD (
2553 'Return Status from update quote API is :' || x_return_status,
2554 1,
2555 'N'
2556 );
2557 END IF;
2558
2559
2560 /*bug 3500380 */
2561 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2562 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2563 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
2564 RAISE FND_API.G_EXC_ERROR;
2565 END IF;
2566 --RAISE update_quote_exception;
2567
2568
2569 END IF;
2570
2571 -- set the org context , see bug 4731684
2572 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2573 aso_debug_pub.ADD (
2574 'After calling update quote Setting the org context to multi-org org_id:null',
2575 1,
2576 'N'
2577 );
2578 END IF;
2579
2580 mo_global.set_policy_context('M',null);
2581
2582
2583 FND_GLOBAL.APPS_INITIALIZE(user_id,resp_id,resp_appl_id,0);
2584
2585 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2586 aso_debug_pub.ADD( 'new debug for bug 6072144 ',1,'N');
2587 aso_debug_pub.ADD( 'After resetting back the original values ',1,'N');
2588 aso_debug_pub.ADD( 'fnd_global.user_id: '|| fnd_global.user_id,1,'N');
2589 aso_debug_pub.ADD( 'fnd_global.resp_id: '|| fnd_global.resp_id,1,'N');
2590 aso_debug_pub.ADD( 'fnd_global.resp_appl_id: '|| fnd_global.resp_appl_id,1,'N');
2591 aso_debug_pub.ADD( 'end debug for bug 6072144 ',1,'N');
2592 END IF;
2593 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2594 aso_debug_pub.ADD (
2595 'End update entity procedure ',
2596 1,
2597 'N'
2598 );
2599 END IF;
2600
2601 resultout := 'COMPLETE:T';
2602 END IF;
2603 EXCEPTION
2604
2605 /*bug 3500380 */
2606 WHEN FND_API.G_EXC_ERROR THEN
2607 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2608 aso_debug_pub.ADD (
2609 'Exception in update entity ',
2610 1,
2611 'N'
2612 );
2613 END IF;
2614 wf_core.CONTEXT (
2615 'ASOAPPRV',
2616 'update_entity',
2617 itemtype,
2618 itemkey,
2619 TO_CHAR(actid),
2620 funcmode);
2621 RAISE;
2622
2623 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2624 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2625 aso_debug_pub.ADD (
2626 'Exception in update entity ',
2627 1,
2628 'N'
2629 );
2630 END IF;
2631 wf_core.CONTEXT (
2632 'ASOAPPRV',
2633 'update_entity',
2634 itemtype,
2635 itemkey,
2636 TO_CHAR(actid),
2637 funcmode);
2638 RAISE;
2639
2640 WHEN OTHERS THEN
2641 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2642 aso_debug_pub.ADD (
2643 'Exception in update entity ',
2644 1,
2645 'N'
2646 );
2647 END IF;
2648 wf_core.CONTEXT (
2649 'ASOAPPRV',
2650 'update_entity',
2651 itemtype,
2652 itemkey,
2653 TO_CHAR(actid),
2654 funcmode);
2655 RAISE;
2656
2657 END update_entity;
2658
2659 PROCEDURE update_approver_list (
2660 p_object_approval_id IN NUMBER
2661 ) IS
2662 l_approvers_changed_flag VARCHAR2 (1) := 'N';
2663 l_last_approved_approver NUMBER := 0;
2664 x_approvers_list aso_apr_pub.approvers_list_tbl_type;
2665 x_rules_list aso_apr_pub.rules_list_tbl_type;
2666 l_return_status VARCHAR2 (20);
2667 l_msg_count NUMBER;
2668 l_msg_data VARCHAR2 (2000);
2669 l_object_id NUMBER;
2670 l_object_type VARCHAR2 (240);
2671 l_application_id NUMBER;
2672 l_approver_status VARCHAR2 (30);
2673 l_approval_det_id NUMBER;
2674 l_approver_person_id NUMBER;
2675 l_approver_user_id NUMBER;
2676 l_approver_count NUMBER;
2677 j INTEGER;
2678 p_rule_id NUMBER;
2679 get_all_approvers_failed EXCEPTION;
2680 l_oam_rule_id NUMBER;
2681 l_rule_count NUMBER;
2682 l_rules_changed_flag VARCHAR2 (1) := 'N';
2683
2684 TYPE existing_approvers_tbl_type IS TABLE OF aso_apr_approval_details%ROWTYPE
2685 INDEX BY BINARY_INTEGER;
2686
2687 l_new_approvers_tbl existing_approvers_tbl_type;
2688 l_employee_id NUMBER;
2689
2690 CURSOR get_object_id (
2691 c_object_approval_id NUMBER
2692 ) IS
2693 SELECT DISTINCT object_id, object_type, application_id
2694 FROM aso_apr_obj_approvals
2695 WHERE object_approval_id = c_object_approval_id;
2696
2697 CURSOR get_existing_approvers (
2698 c_object_approval_id NUMBER
2699 ) IS
2700 SELECT approval_det_id, approver_person_id, approver_user_id,
2701 approver_status
2702 FROM aso_apr_approval_details
2703 WHERE object_approval_id = c_object_approval_id
2704 ORDER BY approver_sequence;
2705
2706 CURSOR get_approver_count (
2707 c_object_approval_id NUMBER
2708 ) IS
2709 SELECT COUNT (
2710 *
2711 )
2712 FROM aso_apr_approval_details
2713 WHERE object_approval_id = c_object_approval_id;
2714
2715 CURSOR get_old_approvers (
2716 c_object_approval_id NUMBER,
2717 c_approval_det_id NUMBER
2718 ) IS
2719 SELECT *
2720 FROM aso_apr_approval_details
2721 WHERE object_approval_id = c_object_approval_id
2722 AND approval_det_id = c_approval_det_id;
2723
2724 CURSOR get_existing_rules (
2725 c_object_approval_id NUMBER
2726 ) IS
2727 SELECT oam_rule_id
2728 FROM aso_apr_rules
2729 WHERE object_approval_id = c_object_approval_id
2730 ORDER BY rule_id;
2731
2732 CURSOR get_rule_count (
2733 c_object_approval_id NUMBER
2734 ) IS
2735 SELECT COUNT (
2736 *
2737 )
2738 FROM aso_apr_rules
2739 WHERE object_approval_id = c_object_approval_id;
2740
2741 cursor get_employee_id(l_user_id NUMBER) IS
2742 select employee_id
2743 from fnd_user
2744 where user_id = l_user_id;
2745
2746
2747 BEGIN
2748 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2749 aso_debug_pub.ADD (
2750 'Begin update approver list procedure ',
2751 1,
2752 'N'
2753 );
2754 END IF;
2755 g_user_id := fnd_global.user_id;
2756 -- get the latest list of approvers
2757 OPEN get_object_id (
2758 p_object_approval_id
2759 );
2760 FETCH get_object_id INTO l_object_id, l_object_type, l_application_id;
2761 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2762 aso_debug_pub.ADD (
2763 'Object ID :' || l_object_id,
2764 1,
2765 'N'
2766 );
2767 aso_debug_pub.ADD (
2768 'Object Type :' || l_object_type,
2769 1,
2770 'N'
2771 );
2772 aso_debug_pub.ADD (
2773 'application id :' || l_application_id,
2774 1,
2775 'N'
2776 );
2777 END IF;
2778 -- calling the get all approvers to get the latest list of approvers
2779 -- please note that we are passing the clear transaction flag as false
2780 -- this is to ensure that get all approvers does not clear transactions
2781
2782 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2783 aso_debug_pub.ADD (
2784 'Calling get_all_approvers',
2785 1,
2786 'N'
2787 );
2788 END IF;
2789 aso_apr_int.get_all_approvers (
2790 1.0,
2791 fnd_api.g_false,
2792 fnd_api.g_false,
2793 l_object_id,
2794 l_object_type,
2795 l_application_id, ---p_application_id,
2796 fnd_api.g_false, --- p_clear_transaction_flag
2797 l_return_status,
2798 l_msg_count,
2799 l_msg_data,
2800 x_approvers_list,
2801 x_rules_list
2802 );
2803 CLOSE get_object_id;
2804
2805 -- Checking to find OUT NOCOPY /* file.sql.39 change */ if call to get_all_approvers was successfull
2806 IF l_return_status <> fnd_api.g_ret_sts_success
2807 THEN
2808 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2809 aso_debug_pub.ADD (
2810 'Status returned from get_all_approvers procedure :' || l_return_status,
2811 1,
2812 'N'
2813 );
2814 END IF;
2815 -- RAISE get_all_approvers_failed;
2816 RETURN;
2817 END IF;
2818
2819 -- fix for bug 4590633
2820
2821 for i in 1..x_approvers_list.count loop
2822
2823 IF ((x_approvers_list(i).approver_person_id is null) or (x_approvers_list(i).approver_person_id = fnd_api.g_miss_num) and
2824 (x_approvers_list(i).approver_user_id is not null) and (x_approvers_list(i).approver_user_id <> fnd_api.g_miss_num)) then
2825
2826 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2827 aso_debug_pub.ADD ('Person_id is null from AME Hence deriving it from user_id',1,'N');
2828 END IF;
2829
2830 open get_employee_id(x_approvers_list(i).approver_user_id);
2831 fetch get_employee_id into x_approvers_list(i).approver_person_id;
2832 close get_employee_id;
2833
2834 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2835 aso_debug_pub.ADD ('Derived person_id is: '||to_char(x_approvers_list(i).approver_person_id),1,'N');
2836 END IF;
2837
2838 END IF;
2839 end loop;
2840
2841 -- end of fix for bug 4590633
2842
2843 --- comparing the count between old and new list
2844 OPEN get_approver_count (
2845 p_object_approval_id
2846 );
2847 FETCH get_approver_count INTO l_approver_count;
2848 CLOSE get_approver_count;
2849
2850 IF l_approver_count <> x_approvers_list.COUNT
2851 THEN
2852 l_approvers_changed_flag := 'Y';
2853 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2854 aso_debug_pub.ADD (
2855 'The approvers list has changed ',
2856 1,
2857 'N'
2858 );
2859 END IF;
2860 ELSE
2861 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2862 aso_debug_pub.ADD (
2863 'Comparing the old list from table and the latest list ',
2864 1,
2865 'N'
2866 );
2867 END IF;
2868 -- first loop to find OUT NOCOPY /* file.sql.39 change */ if the data has changed
2869 OPEN get_existing_approvers (
2870 p_object_approval_id
2871 );
2872
2873 FOR i IN 1 .. x_approvers_list.COUNT
2874 LOOP
2875 FETCH get_existing_approvers INTO l_approval_det_id,
2876 l_approver_person_id,
2877 l_approver_user_id,
2878 l_approver_status;
2879 EXIT WHEN get_existing_approvers%NOTFOUND;
2880
2881 -- Make sure that if miss num is passed back from ame api, then it is
2882 -- converted into a null
2883
2884 IF x_approvers_list (
2885 i
2886 ).approver_person_id = fnd_api.g_miss_num
2887 THEN
2888 x_approvers_list (
2889 i
2890 ).approver_person_id := NULL;
2891 END IF;
2892
2893 IF x_approvers_list (
2894 i
2895 ).approver_user_id = fnd_api.g_miss_num
2896 THEN
2897 x_approvers_list (
2898 i
2899 ).approver_user_id := NULL;
2900 END IF;
2901
2902 IF ((l_approver_person_id <> x_approvers_list (
2903 i
2904 ).approver_person_id
2905 )
2906 OR (l_approver_user_id <> x_approvers_list (
2907 i
2908 ).approver_user_id
2909 )
2910 )
2911 THEN
2912 l_approvers_changed_flag := 'Y';
2913 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2914 aso_debug_pub.ADD (
2915 'The approvers list has changed ',
2916 1,
2917 'N'
2918 );
2919 END IF;
2920 EXIT;
2921 ELSE
2922 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2923 aso_debug_pub.ADD (
2924 'The approvers list has not changed ',
2925 1,
2926 'N'
2927 );
2928 END IF;
2929 l_approvers_changed_flag := 'N';
2930 END IF;
2931 END LOOP;
2932
2933 CLOSE get_existing_approvers;
2934 END IF;
2935
2936 -- if the data has changed
2937
2938 IF l_approvers_changed_flag = 'Y'
2939 THEN
2940 -- copying latest list into the new data structure ( x to y)
2941
2942 FOR i IN 1 .. x_approvers_list.COUNT
2943 LOOP
2944 l_new_approvers_tbl (
2945 i
2946 ).approver_user_id :=
2947 x_approvers_list (
2948 i
2949 ).approver_user_id;
2950 l_new_approvers_tbl (
2951 i
2952 ).approver_person_id :=
2953 x_approvers_list (
2954 i
2955 ).approver_person_id;
2956 l_new_approvers_tbl (
2957 i
2958 ).approver_sequence := i;
2959 -- Initialize the manadatory columns
2960 l_new_approvers_tbl (
2961 i
2962 ).creation_date := SYSDATE;
2963 l_new_approvers_tbl (
2964 i
2965 ).last_update_date := SYSDATE;
2966 l_new_approvers_tbl (
2967 i
2968 ).object_approval_id := p_object_approval_id;
2969 END LOOP;
2970
2971 -- comparing new data structure and existing approvers in database and if person or user id matches, copying
2972 -- existing approvers into the new data structure ( comparing Y and E and copying E to Y )
2973
2974 FOR i IN get_existing_approvers (
2975 p_object_approval_id
2976 )
2977 LOOP
2978 FOR k IN 1 .. l_new_approvers_tbl.COUNT
2979 LOOP
2980 IF ((i.approver_person_id = l_new_approvers_tbl (
2981 k
2982 ).approver_person_id
2983 )
2984 OR (i.approver_user_id = l_new_approvers_tbl (
2985 k
2986 ).approver_user_id
2987 )
2988 )
2989 THEN
2990 OPEN get_old_approvers (
2991 p_object_approval_id,
2992 i.approval_det_id
2993 );
2994 FETCH get_old_approvers INTO l_new_approvers_tbl (
2995 k
2996 );
2997 CLOSE get_old_approvers;
2998 END IF;
2999 END LOOP;
3000 END LOOP;
3001
3002 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3003 aso_debug_pub.ADD (
3004 'Deleting approvers from detail table where object_approval_id :'
3005 || p_object_approval_id,
3006 1,
3007 'N'
3008 );
3009 END IF;
3010
3011 DELETE FROM aso_apr_approval_details
3012 WHERE object_approval_id = p_object_approval_id;
3013
3014 l_approver_status := NULL;
3015 -- third loop to insert the data
3016
3017 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3018 aso_debug_pub.ADD (
3019 'New Approver count is ' || TO_CHAR (
3020 l_new_approvers_tbl.COUNT
3021 ),
3022 1,
3023 'N'
3024 );
3025 END IF;
3026 -- traversing the data structure from bottom up
3027 j := l_new_approvers_tbl.COUNT;
3028
3029 WHILE j <> 0
3030 LOOP
3031 -- if new list has more records than the old list , update the new approvers with pend status
3032 IF l_new_approvers_tbl (
3033 j
3034 ).approver_status IS NULL
3035 THEN
3036 l_new_approvers_tbl (
3037 j
3038 ).approver_status := 'NOSUBMIT';
3039 END IF;
3040
3041 -- because of the new list if the last approver is skipped, make him pending
3042 IF ((l_new_approvers_tbl (
3043 j
3044 ).approver_status = 'SKIP'
3045 )
3046 AND (j = l_new_approvers_tbl.COUNT)
3047 )
3048 THEN
3049 l_new_approvers_tbl (
3050 j
3051 ).approver_status := 'NOSUBMIT';
3052 END IF;
3053
3054 -- Mark the highest authority who approved in the old list
3055
3056 IF ((l_new_approvers_tbl (
3057 j
3058 ).approver_status IN ('APPR', 'SKIP')
3059 )
3060 AND (l_last_approved_approver = 0)
3061 )
3062 THEN
3063 l_last_approved_approver := j;
3064 END IF;
3065
3066 -- Make the approvers who are below the old highest authority as skipped
3067 IF ((j < l_last_approved_approver)
3068 AND (l_new_approvers_tbl (
3069 j
3070 ).approver_status = 'NOSUBMIT'
3071 )
3072 )
3073 THEN
3074 l_new_approvers_tbl (
3075 j
3076 ).approver_status := 'SKIP';
3077 END IF;
3078
3079 aso_apr_approvals_pkg.detail_insert_row (
3080 l_new_approvers_tbl (
3081 j
3082 ).approval_det_id,
3083 l_new_approvers_tbl (
3084 j
3085 ).object_approval_id,
3086 l_new_approvers_tbl (
3087 j
3088 ).approver_person_id ---p_APPROVER_PERSON_ID
3089 ,
3090 l_new_approvers_tbl (
3091 j
3092 ).approver_user_id ---p_APPROVER_USER_ID
3093 ,
3094 j -- P_APPROVER_SEQUENCE
3095 ,
3096 l_new_approvers_tbl (
3097 j
3098 ).approver_status --p_APPROVER_STATUS
3099 ,
3100 l_new_approvers_tbl (
3101 j
3102 ).approver_comments -- p_APPROVER_COMMENTS
3103 ,
3104 l_new_approvers_tbl (
3105 j
3106 ).date_sent --p_DATE_SENT
3107 ,
3108 l_new_approvers_tbl (
3109 j
3110 ).date_received -- p_DATE_RECEIVED
3111 ,
3112 l_new_approvers_tbl (
3113 j
3114 ).creation_date -- p_CREATION_DATE
3115 ,
3116 SYSDATE -- p_LAST_UPDATE_DATE
3117 ,
3118 l_new_approvers_tbl (
3119 j
3120 ).created_by -- P_CREATED_BY
3121 ,
3122 g_user_id -- P_UPDATED_BY
3123 ,
3124 fnd_global.conc_login_id -- p_LAST_UPDATE_LOGIN
3125 ,
3126 l_new_approvers_tbl (
3127 j
3128 ).attribute1 -- p_ATTRIBUTE1
3129 ,
3130 l_new_approvers_tbl (
3131 j
3132 ).attribute2 -- p_ATTRIBUTE2
3133 ,
3134 l_new_approvers_tbl (
3135 j
3136 ).attribute3 -- p_ATTRIBUTE3
3137 ,
3138 l_new_approvers_tbl (
3139 j
3140 ).attribute4 -- p_ATTRIBUTE4
3141 ,
3142 l_new_approvers_tbl (
3143 j
3144 ).attribute5 -- p_ATTRIBUTE5
3145 ,
3146 l_new_approvers_tbl (
3147 j
3148 ).attribute6 -- p_ATTRIBUTE6
3149 ,
3150 l_new_approvers_tbl (
3151 j
3152 ).attribute7 -- p_ATTRIBUTE7
3153 ,
3154 l_new_approvers_tbl (
3155 j
3156 ).attribute8 -- p_ATTRIBUTE8
3157 ,
3158 l_new_approvers_tbl (
3159 j
3160 ).attribute9 -- p_ATTRIBUTE9
3161 ,
3162 l_new_approvers_tbl (
3163 j
3164 ).attribute10 -- p_ATTRIBUTE10
3165 ,
3166 l_new_approvers_tbl (
3167 j
3168 ).attribute11 -- p_ATTRIBUTE11
3169 ,
3170 l_new_approvers_tbl (
3171 j
3172 ).attribute12 -- p_ATTRIBUTE12
3173 ,
3174 l_new_approvers_tbl (
3175 j
3176 ).attribute13 -- p_ATTRIBUTE13
3177 ,
3178 l_new_approvers_tbl (
3179 j
3180 ).attribute14 -- p_ATTRIBUTE14
3181 ,
3182 l_new_approvers_tbl (
3183 j
3184 ).attribute15 -- p_ATTRIBUTE15
3185 ,
3186 l_new_approvers_tbl (
3187 j
3188 ).attribute16 -- p_ATTRIBUTE16
3189 ,
3190 l_new_approvers_tbl (
3191 j
3192 ).attribute17 -- p_ATTRIBUTE17
3193 ,
3194 l_new_approvers_tbl (
3195 j
3196 ).attribute18 -- p_ATTRIBUTE18
3197 ,
3198 l_new_approvers_tbl (
3199 j
3200 ).attribute19 -- p_ATTRIBUTE19
3201 ,
3202 l_new_approvers_tbl (
3203 j
3204 ).attribute20 -- p_ATTRIBUTE20
3205 ,
3206 l_new_approvers_tbl (
3207 j
3208 ).CONTEXT -- p_CONTEXT
3209 ,
3210 l_new_approvers_tbl (
3211 j
3212 ).security_group_id -- p_SECURITY_GROUP_ID
3213 ,
3214 l_new_approvers_tbl (
3215 j
3216 ).object_version_number -- p_OBJECT_VERSION_NUMBER
3217 );
3218 j := j - 1;
3219 END LOOP;
3220 END IF;
3221
3222 -- Loop to find OUT NOCOPY /* file.sql.39 change */ if the rules have changed
3223
3224 OPEN get_rule_count (
3225 p_object_approval_id
3226 );
3227 FETCH get_rule_count INTO l_rule_count;
3228 CLOSE get_rule_count;
3229
3230 IF l_rule_count <> x_rules_list.COUNT
3231 THEN
3232 l_rules_changed_flag := 'Y';
3233 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3234 aso_debug_pub.ADD (
3235 'The rules have changed ',
3236 1,
3237 'N'
3238 );
3239 END IF;
3240 ELSE
3241 OPEN get_existing_rules (
3242 p_object_approval_id
3243 );
3244
3245 FOR i IN 1 .. x_rules_list.COUNT
3246 LOOP
3247 FETCH get_existing_rules INTO l_oam_rule_id;
3248 EXIT WHEN get_existing_rules%NOTFOUND;
3249
3250 -- Make sure that if miss num is passed back from ame api, then it is
3251 -- converted into a null
3252
3253 IF x_rules_list (
3254 i
3255 ).rule_id = fnd_api.g_miss_num
3256 THEN
3257 x_rules_list (
3258 i
3259 ).rule_id := NULL;
3260 END IF;
3261
3262 IF (l_oam_rule_id <> x_rules_list (
3263 i
3264 ).rule_id
3265 )
3266 THEN
3267 l_rules_changed_flag := 'Y';
3268 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3269 aso_debug_pub.ADD (
3270 'The rules have changed ',
3271 1,
3272 'N'
3273 );
3274 END IF;
3275 EXIT;
3276 ELSE
3277 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3278 aso_debug_pub.ADD (
3279 'The rules have not changed ',
3280 1,
3281 'N'
3282 );
3283 END IF;
3284 l_rules_changed_flag := 'N';
3285 END IF;
3286 END LOOP;
3287
3288 CLOSE get_existing_rules;
3289 END IF;
3290
3291 -- refresh the rules if they are changed
3292
3293 IF l_rules_changed_flag = 'Y'
3294 THEN
3295 -- delete the existing rules
3296 DELETE FROM aso_apr_rules
3297 WHERE object_approval_id = p_object_approval_id;
3298
3299 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3300 aso_debug_pub.ADD (
3301 'Inserting rows into the rule table ',
3302 1,
3303 'N'
3304 );
3305 END IF;
3306
3307 FOR i IN 1 .. x_rules_list.COUNT
3308 LOOP
3309 aso_apr_approvals_pkg.rule_insert_row (
3310 p_rule_id,
3311 x_rules_list (
3312 i
3313 ).rule_id,
3314 x_rules_list (
3315 i
3316 ).rule_action_id,
3317 SYSDATE --p_CREATION_DATE
3318 ,
3319 g_user_id -- P_CREATED_BY
3320 ,
3321 SYSDATE -- p_LAST_UPDATE_DATE
3322 ,
3323 g_user_id -- P_UPDATED_BY
3324 ,
3325 fnd_global.conc_login_id -- p_LAST_UPDATE_LOGIN
3326 ,
3327 p_object_approval_id,
3328 NULL -- p_ATTRIBUTE1
3329 ,
3330 NULL -- p_ATTRIBUTE2
3331 ,
3332 NULL -- p_ATTRIBUTE3
3333 ,
3334 NULL -- p_ATTRIBUTE4
3335 ,
3336 NULL -- p_ATTRIBUTE5
3337 ,
3338 NULL -- p_ATTRIBUTE6
3339 ,
3340 NULL -- p_ATTRIBUTE7
3341 ,
3342 NULL -- p_ATTRIBUTE8
3343 ,
3344 NULL -- p_ATTRIBUTE9
3345 ,
3346 NULL -- p_ATTRIBUTE10
3347 ,
3348 NULL -- p_ATTRIBUTE11
3349 ,
3350 NULL -- p_ATTRIBUTE12
3351 ,
3352 NULL -- p_ATTRIBUTE13
3353 ,
3354 NULL -- p_ATTRIBUTE14
3355 ,
3356 NULL -- p_ATTRIBUTE15
3357 ,
3358 NULL -- p_Attribute16
3359 ,
3360 NULL -- p_Attribute17
3361 ,
3362 NULL -- p_Attribute18
3363 ,
3364 NULL -- p_Attribute19
3365 ,
3366 NULL -- p_Attribute20
3367 ,
3368 NULL -- p_CONTEXT
3369 ,
3370 NULL -- p_SECURITY_GROUP_ID
3371 ,
3372 NULL -- p_OBJECT_VERSION_NUMBER
3373 );
3374 END LOOP;
3375 END IF;
3376 -- commit the work
3377 COMMIT WORK;
3378 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3379 aso_debug_pub.ADD (
3380 'End update_approver_list procedure ',
3381 1,
3382 'N'
3383 );
3384 END IF;
3385 EXCEPTION
3386 WHEN get_all_approvers_failed
3387 THEN
3388 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3389 aso_debug_pub.ADD (
3390 'Call to get_all_approvers failed in update_approver_list ',
3391 1,
3392 'N'
3393 );
3394 END IF;
3395 fnd_msg_pub.count_and_get (
3396 p_encoded => 'F',
3397 p_count => l_msg_count,
3398 p_data => l_msg_data
3399 );
3400 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3401 aso_debug_pub.ADD (
3402 'no. of FND messages :' || l_msg_count,
3403 1,
3404 'N'
3405 );
3406 END IF;
3407
3408 FOR k IN 1 .. l_msg_count
3409 LOOP
3410 l_msg_data := fnd_msg_pub.get (
3411 p_msg_index => k,
3412 p_encoded => 'F'
3413 );
3414 END LOOP;
3415
3416 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3417 aso_debug_pub.ADD (
3418 'Msg Data is' || l_msg_data,
3419 1,
3420 'N'
3421 );
3422 END IF;
3423 wf_core.CONTEXT (
3424 'ASOAPPRV',
3425 'Update_approver_list',
3426 'msg data ' || l_msg_data
3427 );
3428 RAISE;
3429 WHEN OTHERS
3430 THEN
3431 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3432 aso_debug_pub.ADD (
3433 'When others exception in update approver list procedure ',
3434 1,
3435 'N'
3436 );
3437 END IF;
3438 wf_core.CONTEXT (
3439 'ASOAPPRV',
3440 'Update_approver_list',
3441 SUBSTR (
3442 SQLERRM,
3443 1,
3444 250
3445 )
3446 );
3447 RAISE;
3448 END update_approver_list;
3449
3450 PROCEDURE last_approver_timeout_check (
3451 p_object_approval_id IN NUMBER
3452 ) IS
3453 new_approver_record ame_util.approverrecord;
3454 l_approver_sequence NUMBER;
3455 l_approval_det_id NUMBER;
3456 l_object_id NUMBER;
3457 l_object_type VARCHAR2 (240);
3458 l_application_id NUMBER;
3459
3460 CURSOR get_approvers (
3461 c_object_approval_id NUMBER
3462 ) IS
3463 SELECT approval_det_id
3464 FROM aso_apr_approval_details
3465 WHERE object_approval_id = c_object_approval_id;
3466
3467 CURSOR get_approver_sequence (
3468 c_object_approval_id NUMBER
3469 ) IS
3470 SELECT MAX (
3471 approver_sequence
3472 ) + 1
3473 FROM aso_apr_approval_details
3474 WHERE object_approval_id = c_object_approval_id;
3475
3476 CURSOR get_application_id (
3477 c_object_approval_id NUMBER
3478 ) IS
3479 SELECT DISTINCT object_id, object_type, application_id
3480 FROM aso_apr_obj_approvals aoa
3481 WHERE object_approval_id = c_object_approval_id;
3482 BEGIN
3483 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3484 aso_debug_pub.ADD (
3485 'Begin the last_approver_timeout_check prcoedure ',
3486 1,
3487 'N'
3488 );
3489 END IF;
3490 g_user_id := fnd_global.user_id;
3491 OPEN get_application_id (
3492 p_object_approval_id
3493 );
3494 FETCH get_application_id INTO l_object_id, l_object_type, l_application_id;
3495 CLOSE get_application_id;
3496 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3497 aso_debug_pub.ADD (
3498 'Object ID :' || l_object_id,
3499 1,
3500 'N'
3501 );
3502 aso_debug_pub.ADD (
3503 'Object Type :' || l_object_type,
3504 1,
3505 'N'
3506 );
3507 aso_debug_pub.ADD (
3508 'application id :' || l_application_id,
3509 1,
3510 'N'
3511 );
3512 aso_debug_pub.ADD (
3513 'Calling the AME clearall approvals API',
3514 1,
3515 'N'
3516 );
3517 END IF;
3518 ame_api.clearallapprovals (
3519 applicationidin => l_application_id,
3520 transactionidin => l_object_id,
3521 transactiontypein => l_object_type
3522 );
3523
3524 FOR i IN get_approvers (
3525 p_object_approval_id
3526 )
3527 LOOP
3528 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3529 aso_debug_pub.ADD (
3530 'calling the AME get next approver API ',
3531 1,
3532 'N'
3533 );
3534 END IF;
3535 ame_api.getnextapprover (
3536 applicationidin => l_application_id,
3537 transactionidin => l_object_id,
3538 transactiontypein => l_object_type,
3539 nextapproverout => new_approver_record
3540 );
3541 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3542 aso_debug_pub.ADD (
3543 'New Approver Person ID :' || new_approver_record.person_id,
3544 1,
3545 'N'
3546 );
3547 aso_debug_pub.ADD (
3548 'Setting approval status to no response for previous approvers ',
3549 1,
3550 'N'
3551 );
3552 END IF;
3553 new_approver_record.approval_status := ame_util.noresponsestatus;
3554 ame_api.updateapprovalstatus (
3555 applicationidin => l_application_id,
3556 transactionidin => l_object_id,
3557 transactiontypein => l_object_type,
3558 approverin => new_approver_record
3559 );
3560 END LOOP;
3561
3562 -- after getting all the approvers, try to get the next approver
3563
3564 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3565 aso_debug_pub.ADD (
3566 'calling the AME get next approver API ',
3567 1,
3568 'N'
3569 );
3570 END IF;
3571 ame_api.getnextapprover (
3572 applicationidin => l_application_id,
3573 transactionidin => l_object_id,
3574 transactiontypein => l_object_type,
3575 nextapproverout => new_approver_record
3576 );
3577 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3578 aso_debug_pub.ADD (
3579 'New Approver Person ID :' || new_approver_record.person_id,
3580 1,
3581 'N'
3582 );
3583 END IF;
3584
3585 IF (((new_approver_record.person_id IS NOT NULL)
3586 AND (new_approver_record.person_id <> fnd_api.g_miss_num)
3587 )
3588 OR ((new_approver_record.user_id IS NOT NULL)
3589 AND (new_approver_record.user_id <> fnd_api.g_miss_num)
3590 )
3591 )
3592 THEN
3593 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3594 aso_debug_pub.ADD (
3595 'Additional Approver found ',
3596 1,
3597 'N'
3598 );
3599 END IF;
3600 OPEN get_approver_sequence (
3601 p_object_approval_id
3602 );
3603 FETCH get_approver_sequence INTO l_approver_sequence;
3604 CLOSE get_approver_sequence;
3605 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3606 aso_debug_pub.ADD (
3607 'Inserting the new approver into the detail table ',
3608 1,
3609 'N'
3610 );
3611 END IF;
3612 aso_apr_approvals_pkg.detail_insert_row (
3613 l_approval_det_id,
3614 p_object_approval_id,
3615 new_approver_record.person_id --p_APPROVER_PERSON_ID
3616 ,
3617 new_approver_record.user_id --p_APPROVER_USER_ID
3618 ,
3619 l_approver_sequence -- P_APPROVER_SEQUENCE
3620 ,
3621 'NOSUBMIT' --p_APPROVER_STATUS
3622 ,
3623 NULL -- p_APPROVER_COMMENTS
3624 ,
3625 NULL --p_DATE_SENT
3626 ,
3627 NULL -- p_DATE_RECEIVED
3628 ,
3629 SYSDATE -- p_CREATION_DATE
3630 ,
3631 SYSDATE -- p_LAST_UPDATE_DATE
3632 ,
3633 g_user_id -- P_CREATED_BY
3634 ,
3635 g_user_id -- P_UPDATED_BY
3636 ,
3637 fnd_global.conc_login_id -- p_LAST_UPDATE_LOGIN
3638 ,
3639 NULL -- p_ATTRIBUTE1
3640 ,
3641 NULL -- p_ATTRIBUTE2
3642 ,
3643 NULL -- p_ATTRIBUTE3
3644 ,
3645 NULL -- p_ATTRIBUTE4
3646 ,
3647 NULL -- p_ATTRIBUTE5
3648 ,
3649 NULL -- p_ATTRIBUTE6
3650 ,
3651 NULL -- p_ATTRIBUTE7
3652 ,
3653 NULL -- p_ATTRIBUTE8
3654 ,
3655 NULL -- p_ATTRIBUTE9
3656 ,
3657 NULL -- p_ATTRIBUTE10
3658 ,
3659 NULL -- p_ATTRIBUTE11
3660 ,
3661 NULL -- p_ATTRIBUTE12
3662 ,
3663 NULL -- p_ATTRIBUTE13
3664 ,
3665 NULL -- p_ATTRIBUTE14
3666 ,
3667 NULL -- p_ATTRIBUTE15
3668 ,
3669 NULL -- p_Attribute16
3670 ,
3671 NULL -- p_Attribute17
3672 ,
3673 NULL -- p_Attribute18
3674 ,
3675 NULL -- p_Attribute19
3676 ,
3677 NULL -- p_Attribute20
3678 ,
3679 NULL -- p_CONTEXT
3680 ,
3681 NULL -- p_SECURITY_GROUP_ID
3682 ,
3683 NULL -- p_OBJECT_VERSION_NUMBER
3684 );
3685 ELSE
3686 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3687 aso_debug_pub.ADD (
3688 'No Additional Approvers found ',
3689 1,
3690 'N'
3691 );
3692 END IF;
3693 RETURN;
3694 END IF;
3695
3696 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3697 aso_debug_pub.ADD (
3698 'End of last_approver_timeout_check procedure ',
3699 1,
3700 'N'
3701 );
3702 END IF;
3703 EXCEPTION
3704 WHEN OTHERS
3705 THEN
3706 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3707 aso_debug_pub.ADD (
3708 'Exception in Last_Approver_Timeout_Check ',
3709 1,
3710 'N'
3711 );
3712 END IF;
3713 RETURN;
3714 END last_approver_timeout_check;
3715
3716 PROCEDURE send_cancel_notification (
3717 itemtype IN VARCHAR2,
3718 itemkey IN VARCHAR2,
3719 actid IN NUMBER,
3720 funcmode IN VARCHAR2,
3721 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
3722 ) IS
3723 l_message VARCHAR2 (240);
3724 l_notifenabled VARCHAR2 (3) := 'Y';
3725 l_orgid NUMBER := NULL;
3726 l_approval_id NUMBER;
3727 x_return_status VARCHAR2 (240);
3728 x_msg_count NUMBER;
3729 --x_msg_data VARCHAR2 (240);
3730 x_msg_data VARCHAR2 (2000); -- bug 13508417
3731 l_msgenabled VARCHAR2 (3) := 'Y';
3732 l_notifname VARCHAR2 (240);
3733 get_message_error EXCEPTION;
3734
3735 BEGIN
3736 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3737 aso_debug_pub.ADD (
3738 'Begin SEND_CANCEL_NOTIFICATION Procedure',
3739 1,
3740 'N'
3741 );
3742 aso_debug_pub.ADD (
3743 'actid is ' || TO_CHAR (
3744 actid
3745 ),
3746 1,
3747 'N'
3748 );
3749 END IF;
3750
3751 IF funcmode = 'RUN'
3752 THEN
3753 l_message := wf_engine.getitemattrtext (
3754 itemtype,
3755 itemkey,
3756 'MESSAGE'
3757 );
3758 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3759 aso_debug_pub.ADD (
3760 'Message is ' || l_message,
3761 1,
3762 'N'
3763 );
3764 END IF;
3765
3766 -- Check for FYI Cancel Message and if so make the attribute as Cancel Message to approver
3767 IF ((l_message LIKE 'REQUEST_CANCELLED_FYI%') or (l_message LIKE 'OA_REQUEST_CANCELLED_FYI%'))
3768 THEN
3769 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3770 aso_debug_pub.ADD (
3771 'Setting message to OA_REQUEST_CANCEL_FYI_TO_APPR',
3772 1,
3773 'N'
3774 );
3775 END IF;
3776 l_message := 'OA_REQ_CANCEL_FYI_TO_APPR';
3777 ELSE
3778 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3779 aso_debug_pub.ADD (
3780 'Setting message to OA_REQUEST_CANCELLED_FYI',
3781 1,
3782 'N'
3783 );
3784 END IF;
3785 l_message := 'OA_REQUEST_CANCELLED_FYI';
3786 END IF;
3787
3788 wf_engine.setitemattrtext (
3789 itemtype => itemtype,
3790 itemkey => itemkey,
3791 aname => 'MESSAGE',
3792 avalue => l_message
3793 );
3794 -- Please note that the notification event name is same as message name
3795
3796 l_notifname := wf_engine.getitemattrtext (
3797 itemtype,
3798 itemkey,
3799 'MESSAGE'
3800 );
3801 l_notifname := 'ASO_' || l_notifname;
3802 l_notifenabled := ibe_wf_notif_setup_pvt.check_notif_enabled (
3803 l_notifname
3804 );
3805 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3806 aso_debug_pub.ADD (
3807 'Notification Name: ' || l_notifname || ' Enabled: ' || l_notifenabled,
3808 1,
3809 'N'
3810 );
3811 END IF;
3812
3813 IF l_notifenabled = 'Y'
3814 THEN
3815 -- Get the approval id
3816 l_approval_id := wf_engine.getitemattrnumber (
3817 itemtype,
3818 itemkey,
3819 'APPROVALID'
3820 );
3821 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3822 aso_debug_pub.ADD (
3823 'Approval Id is ' || l_approval_id,
3824 1,
3825 'N'
3826 );
3827 END IF;
3828 -- get the org id
3829 /*OPEN get_org_id (
3830 l_approval_id
3831 );
3832 FETCH get_org_id INTO l_orgid;
3833 CLOSE get_org_id; */
3834 l_orgid := wf_engine.getitemattrnumber (
3835 itemtype,
3836 itemkey,
3837 'ORGID'
3838 );
3839
3840 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3841 aso_debug_pub.ADD (
3842 'Org Id is ' || l_orgid,
3843 1,
3844 'N'
3845 );
3846 END IF;
3847 -- Retreive the message name for that event
3848 x_return_status := fnd_api.g_ret_sts_success;
3849
3850 ibe_wf_msg_mapping_pvt.retrieve_msg_mapping (
3851 p_org_id => l_orgid,
3852 p_msite_id => NULL,
3853 p_user_type => 'ALL',
3854 p_notif_name => l_notifname,
3855 x_enabled_flag => l_msgenabled,
3856 x_wf_message_name => l_message,
3857 x_return_status => x_return_status,
3858 x_msg_data => x_msg_data,
3859 x_msg_count => x_msg_count
3860 );
3861
3862 -- Check if the call to MSG mapping API was succssfull
3863 -- bug 3295179
3864 IF x_return_status <> fnd_api.g_ret_sts_success
3865 --IF x_msg_count > 0
3866 THEN
3867 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3868 aso_debug_pub.ADD (
3869 'Message count from MSG mapping API :' || x_msg_count,
3870 1,
3871 'N'
3872 );
3873 END IF;
3874 RAISE get_message_error;
3875 END IF;
3876 ELSE
3877 -- If the notification is not enabled
3878 resultout := 'COMPLETE';
3879 END IF;
3880
3881 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3882 aso_debug_pub.ADD (
3883 'Calling the standard notify process ',
3884 1,
3885 'N'
3886 );
3887 END IF;
3888 wf_standard.notify (
3889 itemtype,
3890 itemkey,
3891 actid,
3892 funcmode,
3893 resultout
3894 );
3895 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3896 aso_debug_pub.ADD (
3897 'End SEND_CANCEL_NOTIFICATION Procedure',
3898 1,
3899 'N'
3900 );
3901 END IF;
3902 RETURN;
3903 END IF;
3904
3905 IF (funcmode = 'CANCEL')
3906 THEN
3907 resultout := 'COMPLETE';
3908 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3909 aso_debug_pub.ADD (
3910 'End of SEND_CANCEL_NOTIFICATION Procedure',
3911 1,
3912 'N'
3913 );
3914 END IF;
3915 RETURN;
3916 END IF;
3917
3918 resultout := '';
3919 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3920 aso_debug_pub.ADD (
3921 'End of SEND_CANCEL_NOTIFICATION Procedure',
3922 1,
3923 'N'
3924 );
3925 END IF;
3926 RETURN;
3927 EXCEPTION
3928 WHEN get_message_error
3929 THEN
3930 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3931 aso_debug_pub.ADD (
3932 'Exception in SEND_NOTIFICATION Proc SqlCode :' || SQLERRM,
3933 1,
3934 'N'
3935 );
3936 END IF;
3937 wf_core.CONTEXT (
3938 'ASOAPPRV',
3939 'SEND_CANCEL_NOTIFICATION',
3940 'Error in retreiving Notification Message',
3941 'Message Name: ' || l_message || ' Enabled: ' || l_msgenabled
3942 );
3943 RAISE;
3944 WHEN OTHERS
3945 THEN
3946 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3947 aso_debug_pub.ADD (
3948 'Exception in SEND_CANCEL_NOTIFICATION Process SqlCode :' || SQLERRM,
3949 1,
3950 'N'
3951 );
3952 END IF;
3953 wf_core.CONTEXT (
3954 'ASOAPPRV',
3955 'SEND_CANCEL_NOTIFICATION',
3956 itemtype,
3957 itemkey,
3958 TO_CHAR (
3959 actid
3960 ),
3961 funcmode
3962 );
3963 RAISE;
3964 END send_cancel_notification;
3965
3966 PROCEDURE approver_details_doc (
3967 document_id IN VARCHAR2,
3968 display_type IN VARCHAR2,
3969 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
3970 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
3971 ) IS
3972 itemtype VARCHAR2 (30);
3973 itemkey VARCHAR2 (30);
3974 l_approval_id NUMBER;
3975 l_approver_user_name VARCHAR2 (240);
3976 l_approver_display_name VARCHAR2 (240);
3977 l_approver_status VARCHAR2 (10);
3978 l_approver_comments VARCHAR2 (4000);
3979 l_attribute_tbl aso_attribute_label_tbl_type;
3980
3981 CURSOR approver_details (
3982 c_object_approval_id NUMBER
3983 ) IS
3984 SELECT approver_user_id, approver_person_id, fl.meaning, approver_comments
3985 FROM aso_apr_approval_details apd, aso_lookups fl
3986 WHERE apd.approver_status = fl.lookup_code
3987 AND object_approval_id = c_object_approval_id
3988 AND fl.lookup_type = 'ASO_APPROVER_STATUS'
3989 ORDER BY approver_sequence;
3990 BEGIN
3991 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
3992 aso_debug_pub.ADD (
3993 'Begin APPROVER_DETAILS_DOC procedure ',
3994 1,
3995 'N'
3996 );
3997 END IF;
3998 itemtype := NVL (
3999 SUBSTR (
4000 document_id,
4001 1,
4002 INSTR (
4003 document_id,
4004 ':'
4005 ) - 1
4006 ),
4007 'ASOAPPRV'
4008 );
4009 itemkey := SUBSTR (
4010 document_id,
4011 INSTR (
4012 document_id,
4013 ':'
4014 ) + 1
4015 ) || 'HED';
4016 l_approval_id := wf_engine.getitemattrnumber (
4017 itemtype => itemtype,
4018 itemkey => itemkey,
4019 aname => 'APPROVALID'
4020 );
4021 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4022 aso_debug_pub.ADD (
4023 'ItemType is:' || itemtype,
4024 1,
4025 'N'
4026 );
4027 aso_debug_pub.ADD (
4028 'ItemKey is :' || itemkey,
4029 1,
4030 'N'
4031 );
4032 aso_debug_pub.ADD (
4033 'Approval ID :' || l_approval_id,
4034 1,
4035 'N'
4036 );
4037 END IF;
4038 -- get the attribute label
4039 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4040 aso_debug_pub.ADD (
4041 'Calling the get_attribute_label procedure',
4042 1,
4043 'N'
4044 );
4045 END IF;
4046 get_attribute_label (
4047 l_approval_id,
4048 l_attribute_tbl
4049 );
4050
4051 -- Create an html text buffer
4052 IF (display_type = 'text/html')
4053 THEN
4054 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4055 aso_debug_pub.ADD (
4056 'Display type is text/html',
4057 1,
4058 'N'
4059 );
4060 END IF;
4061 document := document
4062 || '<span class=sectionHeader1>'
4063 || l_attribute_tbl (
4064 11
4065 )
4066 || '</span>';
4067 document :=
4068 document
4069 || '<table class=OraBGAccentDark width="75%" cellpadding="1", cellspacing="1" border="0">';
4070 document :=
4071 document
4072 || '<tr> <td class="tableSmallHeaderCell" align="center">'
4073 || l_attribute_tbl (
4074 12
4075 )
4076 || '</td>';
4077 document := document
4078 || '<td class="tableSmallHeaderCell" align="center">'
4079 || l_attribute_tbl (
4080 13
4081 )
4082 || '</td>';
4083 document := document || '</tr>';
4084
4085 FOR i IN approver_details (
4086 l_approval_id
4087 )
4088 LOOP
4089 l_approver_display_name :=
4090 aso_apr_int.get_approver_name (
4091 i.approver_user_id,
4092 i.approver_person_id
4093 );
4094 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4095 aso_debug_pub.ADD (
4096 'Approver Name is ' || l_approver_display_name,
4097 1,
4098 'N'
4099 );
4100 END IF;
4101 document := document || '<tr>';
4102 document := document
4103 || '<td class="tableDataCell">'
4104 || l_approver_display_name
4105 || '</td>';
4106 document := document
4107 || '<td class="tableDataCell">'
4108 || i.meaning
4109 || '</td>';
4110 document := document || '</tr>';
4111 END LOOP;
4112
4113 document := document || '</table>';
4114 document_type := 'text/html';
4115 END IF;
4116
4117 -- Create a plain text buffer
4118
4119 IF (display_type = 'text/plain')
4120 THEN
4121 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4122 aso_debug_pub.ADD (
4123 'Display type is text/plain',
4124 1,
4125 'N'
4126 );
4127 END IF;
4128 document := document || fnd_global.local_chr (
4129 10
4130 );
4131 document := document || l_attribute_tbl (
4132 11
4133 );
4134 document := document || fnd_global.local_chr (
4135 10
4136 );
4137
4138 FOR i IN approver_details (
4139 l_approval_id
4140 )
4141 LOOP
4142 -- get the approver name
4143 l_approver_display_name :=
4144 aso_apr_int.get_approver_name (
4145 i.approver_user_id,
4146 i.approver_person_id
4147 );
4148 document := document || fnd_global.local_chr (
4149 10
4150 );
4151 document := document || l_attribute_tbl (
4152 12
4153 );
4154 document := document || ': ';
4155 document := document || l_approver_display_name;
4156 document := document || fnd_global.local_chr (
4157 10
4158 );
4159 document := document || l_attribute_tbl (
4160 13
4161 );
4162 document := document || ': ';
4163 document := document || i.meaning;
4164 END LOOP;
4165
4166 document_type := 'text/plain';
4167 END IF;
4168
4169 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4170 aso_debug_pub.ADD (
4171 'End APPROVER_DETAILS_DOC procedure ',
4172 1,
4173 'N'
4174 );
4175 END IF;
4176 EXCEPTION
4177 WHEN OTHERS
4178 THEN
4179 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4180 aso_debug_pub.ADD (
4181 'Exception in APPROVER_DETAILS_DOC SqlCode :' || SQLERRM,
4182 1,
4183 'N'
4184 );
4185 END IF;
4186 wf_core.CONTEXT (
4187 'ASOAPPRV',
4188 'APPROVER_DETAILS_DOC',
4189 itemtype,
4190 itemkey
4191 );
4192 RAISE;
4193 END approver_details_doc;
4194
4195 PROCEDURE quote_summary_doc (
4196 document_id IN VARCHAR2,
4197 display_type IN VARCHAR2,
4198 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
4199 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
4200 ) IS
4201 itemtype VARCHAR2 (30);
4202 itemkey VARCHAR2 (30);
4203 l_approval_id NUMBER;
4204 l_quote_name VARCHAR2 (240);
4205 l_quote_version VARCHAR2 (240);
4206 l_quote_number VARCHAR2 (240);
4207 l_quote_price VARCHAR2 (240);
4208 l_customer_name VARCHAR2 (240);
4209 l_account_number VARCHAR2 (240);
4210 l_contact_name VARCHAR2 (240);
4211 l_opportunity_name VARCHAR2 (240);
4212 l_expiration_date DATE;
4213 l_attribute_tbl aso_attribute_label_tbl_type;
4214 -- hyang performance fix, bug 2860045
4215 l_quote_header_id NUMBER;
4216 l_party_type VARCHAR2(240);
4217 CURSOR get_object_details (
4218 c_approval_id NUMBER
4219 ) IS
4220 SELECT quote_header_id, quote_name, quote_number, quote_expiration_date
4221 FROM aso_quote_headers_all qha, aso_apr_obj_approvals aoa
4222 WHERE qha.quote_header_id = aoa.object_id
4223 AND aoa.object_approval_id = c_approval_id;
4224
4225 CURSOR get_customer_name (
4226 c_quote_header_id NUMBER
4227 ) IS
4228 SELECT hp.party_name
4229 FROM aso_quote_headers_all qha,
4230 hz_parties hp
4231 WHERE qha.cust_party_id = hp.party_id
4232 AND qha.quote_header_id = c_quote_header_id;
4233
4234 -- bug 3934660 (put outer join)
4235 CURSOR get_account_number (
4236 c_quote_header_id NUMBER
4237 ) IS
4238 SELECT hca.account_number
4239 FROM hz_cust_accounts hca,
4240 aso_quote_headers_all qha
4241 WHERE qha.cust_account_id = hca.cust_account_id(+)
4242 AND qha.quote_header_id = c_quote_header_id;
4243
4244 CURSOR get_opportunity_name (
4245 c_approval_id NUMBER
4246 ) IS
4247 SELECT ala.description
4248 FROM as_leads_all ala,
4249 aso_quote_related_objects qro,
4250 aso_apr_obj_approvals aoa
4251 WHERE ala.lead_id = qro.object_id
4252 AND qro.relationship_type_code = 'OPP_QUOTE'
4253 AND qro.quote_object_id = aoa.object_id
4254 AND aoa.object_approval_id = c_approval_id;
4255
4256 -- bug 3934660
4257
4258 CURSOR get_party_type (c_approval_id NUMBER) IS
4259 SELECT P.PARTY_TYPE
4260 FROM hz_parties p, aso_quote_headers_all qh,aso_apr_obj_approvals aoa
4261 WHERE p.party_id = qh.party_id
4262 AND qh.quote_header_id = aoa.object_id
4263 AND aoa.object_approval_id = c_approval_id;
4264
4265 -- note that UI shows both contact and employees in drop down list,hence
4266 -- query uses both contact and employee
4267 CURSOR get_contact_name (
4268 c_approval_id NUMBER
4269 ) IS
4270 SELECT party_name
4271 FROM hz_parties p, hz_relationships r, aso_quote_headers_all qh,aso_apr_obj_approvals aoa
4272 WHERE p.party_id = r.object_id
4273 AND r.party_id = qh.party_id
4274 AND r.subject_id = qh.cust_party_id
4275 AND r.object_type = 'PERSON'
4276 AND r.relationship_code IN ('CONTACT','EMPLOYER_OF')
4277 AND qh.quote_header_id = aoa.object_id
4278 AND aoa.object_approval_id = c_approval_id;
4279
4280 BEGIN
4281 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4282 aso_debug_pub.ADD (
4283 'Begin QUOTE_SUMMARY_DOC procedure ',
4284 1,
4285 'N'
4286 );
4287 END IF;
4288 itemtype := NVL (
4289 SUBSTR (
4290 document_id,
4291 1,
4292 INSTR (
4293 document_id,
4294 ':'
4295 ) - 1
4296 ),
4297 'ASOAPPRV'
4298 );
4299 itemkey := SUBSTR (
4300 document_id,
4301 INSTR (
4302 document_id,
4303 ':'
4304 ) + 1
4305 ) || 'HED';
4306 l_approval_id := wf_engine.getitemattrnumber (
4307 itemtype => itemtype,
4308 itemkey => itemkey,
4309 aname => 'APPROVALID'
4310 );
4311 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4312 aso_debug_pub.ADD (
4313 'ItemType is:' || itemtype,
4314 1,
4315 'N'
4316 );
4317 aso_debug_pub.ADD (
4318 'ItemKey is :' || itemkey,
4319 1,
4320 'N'
4321 );
4322 aso_debug_pub.ADD (
4323 'Approval ID :' || l_approval_id,
4324 1,
4325 'N'
4326 );
4327 END IF;
4328 -- get the quote name, quote number and expiration date
4329 -- hyang performance fix bug 2860045, added l_quote_header_id
4330 OPEN get_object_details (
4331 l_approval_id
4332 );
4333 FETCH get_object_details INTO l_quote_header_id, l_quote_name, l_quote_number, l_expiration_date;
4334 CLOSE get_object_details;
4335 -- get the customer name and account number
4336 OPEN get_customer_name (
4337 l_quote_header_id
4338 );
4339 FETCH get_customer_name INTO l_customer_name;
4340 CLOSE get_customer_name;
4341 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4342 aso_debug_pub.ADD (
4343 'Customer Name is ' || l_customer_name,
4344 1,
4345 'N'
4346 );
4347 END IF;
4348 OPEN get_account_number (
4349 l_quote_header_id
4350 );
4351 FETCH get_account_number INTO l_account_number;
4352 CLOSE get_account_number;
4353 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4354 aso_debug_pub.ADD (
4355 'Customer Account Number is ' || l_account_number,
4356 1,
4357 'N'
4358 );
4359 END IF;
4360
4361 -- get the opportunity name for the quote
4362 OPEN get_opportunity_name (
4363 l_approval_id
4364 );
4365 FETCH get_opportunity_name INTO l_opportunity_name;
4366 CLOSE get_opportunity_name;
4367 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4368 aso_debug_pub.ADD (
4369 'Opportunity Name :' || l_opportunity_name,
4370 1,
4371 'N'
4372 );
4373 END IF;
4374 -- get the contact name for the quote
4375
4376 OPEN get_party_type(l_approval_id);
4377 FETCH get_party_type INTO l_party_type;
4378 CLOSE get_party_type;
4379
4380 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
4381 OPEN get_contact_name (
4382 l_approval_id
4383 );
4384 FETCH get_contact_name INTO l_contact_name;
4385 CLOSE get_contact_name;
4386 END IF;
4387 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4388 aso_debug_pub.ADD (
4389 'Contact Name :' || l_contact_name,
4390 1,
4391 'N'
4392 );
4393 END IF;
4394 -- get the attribute labels
4395
4396 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4397 aso_debug_pub.ADD (
4398 'Calling the get_attribute_label proceure ',
4399 1,
4400 'N'
4401 );
4402 END IF;
4403 get_attribute_label (
4404 l_approval_id,
4405 l_attribute_tbl
4406 );
4407
4408 -- Create an html text buffer
4409 IF (display_type = 'text/html')
4410 THEN
4411 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4412 aso_debug_pub.ADD (
4413 'Display type is text/html',
4414 1,
4415 'N'
4416 );
4417 END IF;
4418 document := document
4419 || '<span class=sectionHeader1>'
4420 || l_attribute_tbl (
4421 2
4422 )
4423 || '</span>';
4424 document :=
4425 document
4426 || '<table cellspacing=1 cellpadding=1 width="75%" border=0>';
4427 document := document
4428 || '<tr> <td class="prompt" align="right" nowrap>';
4429 document := document || l_attribute_tbl (
4430 3
4431 ) || '</td>';
4432 document := document
4433 || '<td class=datareadonly>'
4434 || l_quote_name
4435 || '</td>';
4436 document := document || '<td class="prompt" align="right" nowrap>';
4437 document := document || l_attribute_tbl (
4438 4
4439 ) || '</td>';
4440 document := document
4441 || '<td class=datareadonly>'
4442 || l_quote_number
4443 || '</td></tr>';
4444 document := document || '<tr>';
4445 document := document || '<td class="prompt" align="right" nowrap> ';
4446 document := document || l_attribute_tbl (
4447 5
4448 ) || '</td>';
4449 document := document
4450 || '<td class=datareadonly>'
4451 || l_customer_name
4452 || '</td>';
4453 document := document
4454 || '<td class="prompt" align="right" nowrap>'
4455 || l_attribute_tbl (
4456 6
4457 )
4458 || '</td>';
4459 document := document
4460 || '<td class=datareadonly>'
4461 || l_account_number
4462 || ' </td></tr>';
4463 document := document
4464 || '<tr> <td class="prompt" align="right" nowrap>'
4465 || l_attribute_tbl (
4466 7
4467 )
4468 || '</td>';
4469 document := document
4470 || '<td class=datareadonly>'
4471 || l_contact_name
4472 || '</td>';
4473 document := document
4474 || '<td class="prompt" align="right" nowrap>'
4475 || l_attribute_tbl (
4476 8
4477 )
4478 || '</td>';
4479 document := document
4480 || '<td class=datareadonly>'
4481 || l_opportunity_name
4482 || '</td></tr>';
4483 document := document
4484 || '<tr><td class="prompt" align="right" nowrap> ';
4485 document := document || l_attribute_tbl (
4486 9
4487 ) || '</td>';
4488 document := document
4489 || '<td class=datareadonly>'
4490 || l_expiration_date
4491 || '</td>';
4492 document := document || '<td>' || fnd_global.local_chr (
4493 38
4494 ) || 'nbsp';
4495 document := document
4496 || '</td><td>'
4497 || fnd_global.local_chr (
4498 38
4499 )
4500 || 'nbsp;</td>';
4501 document := document || '</tr> </table>';
4502 document_type := 'text/html';
4503 END IF;
4504
4505 -- Create a plain text buffer
4506
4507 IF (display_type = 'text/plain')
4508 THEN
4509 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4510 aso_debug_pub.ADD (
4511 'Display type is text/plain',
4512 1,
4513 'N'
4514 );
4515 END IF;
4516 document := document || fnd_global.local_chr (
4517 10
4518 );
4519 document := document || l_attribute_tbl (
4520 3
4521 );
4522 document := document || ': ';
4523 document := document || l_quote_name;
4524 document := document || fnd_global.local_chr (
4525 10
4526 );
4527 document := document || l_attribute_tbl (
4528 4
4529 );
4530 document := document || ': ';
4531 document := document || l_quote_number;
4532 document := document || fnd_global.local_chr (
4533 10
4534 );
4535 document := document || l_attribute_tbl (
4536 5
4537 );
4538 document := document || ': ';
4539 document := document || l_customer_name;
4540 document := document || fnd_global.local_chr (
4541 10
4542 );
4543 document := document || l_attribute_tbl (
4544 6
4545 );
4546 document := document || ': ';
4547 document := document || l_account_number;
4548 document := document || fnd_global.local_chr (
4549 10
4550 );
4551 document := document || l_attribute_tbl (
4552 7
4553 );
4554 document := document || ': ';
4555 document := document || l_contact_name;
4556 document := document || fnd_global.local_chr (
4557 10
4558 );
4559 document := document || l_attribute_tbl (
4560 8
4561 );
4562 document := document || ': ';
4563 document := document || l_opportunity_name;
4564 document := document || fnd_global.local_chr (
4565 10
4566 );
4567 document := document || l_attribute_tbl (
4568 9
4569 );
4570 document := document || ': ';
4571 document := document || l_expiration_date;
4572 document_type := 'text/plain';
4573 END IF;
4574
4575 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4576 aso_debug_pub.ADD (
4577 'End QUOTE_SUMMARY_DOC procedure ',
4578 1,
4579 'N'
4580 );
4581 END IF;
4582 EXCEPTION
4583 WHEN OTHERS
4584 THEN
4585 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4586 aso_debug_pub.ADD (
4587 'Exception in QUOTE_SUMMARY_DOC SqlCode :' || SQLERRM,
4588 1,
4589 'N'
4590 );
4591 END IF;
4592 wf_core.CONTEXT (
4593 'ASOAPPRV',
4594 'QUOTE_SUMMARY_DOC',
4595 itemtype,
4596 itemkey
4597 );
4598 RAISE;
4599 END quote_summary_doc;
4600
4601 PROCEDURE requester_comments_doc (
4602 document_id IN VARCHAR2,
4603 display_type IN VARCHAR2,
4604 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
4605 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
4606 ) IS
4607 itemtype VARCHAR2 (30);
4608 itemkey VARCHAR2 (30);
4609 l_approval_id NUMBER;
4610 l_requester_comments VARCHAR2 (2000);
4611 l_requester_userid NUMBER;
4612 l_attribute_tbl aso_attribute_label_tbl_type;
4613
4614 CURSOR get_requester_details (
4615 c_approval_id NUMBER
4616 ) IS
4617 SELECT requester_comments
4618 FROM aso_apr_obj_approvals
4619 WHERE object_approval_id = c_approval_id;
4620 BEGIN
4621 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4622 aso_debug_pub.ADD (
4623 'Begin REQUESTER_COMMENTS_DOC procedure ',
4624 1,
4625 'N'
4626 );
4627 END IF;
4628 itemtype := NVL (
4629 SUBSTR (
4630 document_id,
4631 1,
4632 INSTR (
4633 document_id,
4634 ':'
4635 ) - 1
4636 ),
4637 'ASOAPPRV'
4638 );
4639 itemkey := SUBSTR (
4640 document_id,
4641 INSTR (
4642 document_id,
4643 ':'
4644 ) + 1
4645 ) || 'HED';
4646 l_approval_id := wf_engine.getitemattrnumber (
4647 itemtype => itemtype,
4648 itemkey => itemkey,
4649 aname => 'APPROVALID'
4650 );
4651 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4652 aso_debug_pub.ADD (
4653 'ItemType is:' || itemtype,
4654 1,
4655 'N'
4656 );
4657 aso_debug_pub.ADD (
4658 'ItemKey is :' || itemkey,
4659 1,
4660 'N'
4661 );
4662 aso_debug_pub.ADD (
4663 'Approval ID :' || l_approval_id,
4664 1,
4665 'N'
4666 );
4667 END IF;
4668 -- get the attribute labels
4669
4670 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4671 aso_debug_pub.ADD (
4672 'Calling the get_attribute_label procedure ',
4673 1,
4674 'N'
4675 );
4676 END IF;
4677 get_attribute_label (
4678 l_approval_id,
4679 l_attribute_tbl
4680 );
4681
4682 -- Create an html text buffer
4683 IF (display_type = 'text/html')
4684 THEN
4685 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4686 aso_debug_pub.ADD (
4687 'Display type is text/html',
4688 1,
4689 'N'
4690 );
4691 END IF;
4692 OPEN get_requester_details (
4693 l_approval_id
4694 );
4695 FETCH get_requester_details INTO l_requester_comments;
4696 CLOSE get_requester_details;
4697 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4698 aso_debug_pub.ADD (
4699 'Creating a text/html document ',
4700 1,
4701 'N'
4702 );
4703 END IF;
4704 document := document
4705 || '<span class=sectionHeader1>'
4706 || l_attribute_tbl (
4707 10
4708 )
4709 || '</span>';
4710 document :=
4711 document
4712 || '<table cellspacing=1 cellpadding=1 width="75%" border=0>';
4713 document := document || '<tr>';
4714 document := document || '<td>' || l_requester_comments || '</td>';
4715 document := document || '</tr></table>';
4716 document_type := 'text/html';
4717 END IF;
4718
4719 -- Create a plain text buffer
4720
4721 IF (display_type = 'text/plain')
4722 THEN
4723 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4724 aso_debug_pub.ADD (
4725 'Display type is text/plain',
4726 1,
4727 'N'
4728 );
4729 END IF;
4730 document := document || fnd_global.local_chr (
4731 10
4732 );
4733 document := document || l_attribute_tbl (
4734 10
4735 );
4736 document := document || fnd_global.local_chr (
4737 10
4738 );
4739
4740 FOR i IN get_requester_details (
4741 l_approval_id
4742 )
4743 LOOP
4744 document := document || i.requester_comments;
4745 END LOOP;
4746
4747 document := document || fnd_global.local_chr (
4748 10
4749 );
4750 document_type := 'text/plain';
4751 END IF;
4752
4753 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4754 aso_debug_pub.ADD (
4755 'End REQUESTER_COMMENTS_DOC procedure ',
4756 1,
4757 'N'
4758 );
4759 END IF;
4760 EXCEPTION
4761 WHEN OTHERS
4762 THEN
4763 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4764 aso_debug_pub.ADD (
4765 'Exception in REQUESTER_COMMENTS_DOC SqlCode :' || SQLERRM,
4766 1,
4767 'N'
4768 );
4769 END IF;
4770 wf_core.CONTEXT (
4771 'ASOAPPRV',
4772 'REQUESTER_COMMENTS_DOC',
4773 itemtype,
4774 itemkey
4775 );
4776 RAISE;
4777 END requester_comments_doc;
4778
4779 PROCEDURE rule_details_doc (
4780 document_id IN VARCHAR2,
4781 display_type IN VARCHAR2,
4782 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
4783 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
4784 ) IS
4785 itemtype VARCHAR2 (30);
4786 itemkey VARCHAR2 (30);
4787 l_approval_id NUMBER;
4788 l_rule_description VARCHAR2 (240);
4789 l_approval_level VARCHAR2 (240);
4790 l_attribute_tbl aso_attribute_label_tbl_type;
4791 l_ruletypeout VARCHAR2 (240);
4792 l_conditionidsout ame_util.idlist;
4793 l_approvaltypenameout VARCHAR2 (240);
4794 l_approvaltypedescriptionout VARCHAR2 (240);
4795
4796 CURSOR get_rule_details (
4797 c_approval_id NUMBER
4798 ) IS
4799 SELECT oam_rule_id
4800 FROM aso_apr_rules
4801 WHERE object_approval_id = c_approval_id;
4802 BEGIN
4803 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4804 aso_debug_pub.ADD (
4805 'Begin RULE_DETAILS_DOC procedure ',
4806 1,
4807 'N'
4808 );
4809 END IF;
4810 itemtype := NVL (
4811 SUBSTR (
4812 document_id,
4813 1,
4814 INSTR (
4815 document_id,
4816 ':'
4817 ) - 1
4818 ),
4819 'ASOAPPRV'
4820 );
4821 itemkey := SUBSTR (
4822 document_id,
4823 INSTR (
4824 document_id,
4825 ':'
4826 ) + 1
4827 ) || 'HED';
4828 l_approval_id := wf_engine.getitemattrnumber (
4829 itemtype => itemtype,
4830 itemkey => itemkey,
4831 aname => 'APPROVALID'
4832 );
4833 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4834 aso_debug_pub.ADD (
4835 'ItemType is:' || itemtype,
4836 1,
4837 'N'
4838 );
4839 aso_debug_pub.ADD (
4840 'ItemKey is :' || itemkey,
4841 1,
4842 'N'
4843 );
4844 aso_debug_pub.ADD (
4845 'Approval ID :' || l_approval_id,
4846 1,
4847 'N'
4848 );
4849 END IF;
4850 -- get the attribute label
4851
4852 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4853 aso_debug_pub.ADD (
4854 'Calling the get_attribute_label procedure ',
4855 1,
4856 'N'
4857 );
4858 END IF;
4859 get_attribute_label (
4860 l_approval_id,
4861 l_attribute_tbl
4862 );
4863
4864 -- Create an html text buffer
4865 IF (display_type = 'text/html')
4866 THEN
4867 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4868 aso_debug_pub.ADD (
4869 'Display type is text/html',
4870 1,
4871 'N'
4872 );
4873 END IF;
4874 document := document
4875 || '<span class=sectionHeader1>'
4876 || l_attribute_tbl (
4877 14
4878 )
4879 || '</span>';
4880 document :=
4881 document
4882 || '<table class=OraBGAccentDark cellspacing=1 cellpadding=1 width="75%" border=0>';
4883 document :=
4884 document
4885 || '<tr> <td class="tableSmallHeaderCell" align="center">'
4886 || l_attribute_tbl (
4887 15
4888 )
4889 || '</td>';
4890 document := document
4891 || '<td class="tableSmallHeaderCell" align="center">'
4892 || l_attribute_tbl (
4893 16
4894 )
4895 || '</td></tr>';
4896
4897 FOR i IN get_rule_details (
4898 l_approval_id
4899 )
4900 LOOP
4901 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4902 aso_debug_pub.ADD (
4903 'Calling AME get applicable rules procedure',
4904 1,
4905 'N'
4906 );
4907 END IF;
4908 ame_api.getruledetails1 (
4909 ruleidin => i.oam_rule_id,
4910 ruletypeout => l_ruletypeout,
4911 ruledescriptionout => l_rule_description,
4912 conditionidsout => l_conditionidsout,
4913 approvaltypenameout => l_approvaltypenameout,
4914 approvaltypedescriptionout => l_approvaltypedescriptionout,
4915 approvaldescriptionout => l_approval_level
4916 );
4917 document := document
4918 || '<tr> <td class="tableDataCell">'
4919 || l_rule_description
4920 || '</td>';
4921 document := document
4922 || '<td class="tableDataCell">'
4923 || l_approval_level
4924 || '</td></tr>';
4925 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4926 aso_debug_pub.ADD (
4927 'Rule Description is ' || l_rule_description,
4928 1,
4929 'N'
4930 );
4931 aso_debug_pub.ADD (
4932 'Approval level is ' || l_approval_level,
4933 1,
4934 'N'
4935 );
4936 END IF;
4937 END LOOP;
4938
4939 document := document || '</table>';
4940 document_type := 'text/html';
4941 END IF;
4942
4943 -- Create a plain text buffer
4944
4945 IF (display_type = 'text/plain')
4946 THEN
4947 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4948 aso_debug_pub.ADD (
4949 'Display type is text/plain',
4950 1,
4951 'N'
4952 );
4953 END IF;
4954 document := document || fnd_global.local_chr (
4955 10
4956 );
4957 document := document || l_attribute_tbl (
4958 14
4959 );
4960 document := document || fnd_global.local_chr (
4961 10
4962 );
4963
4964 FOR i IN get_rule_details (
4965 l_approval_id
4966 )
4967 LOOP
4968 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
4969 aso_debug_pub.ADD (
4970 'Calling AME get applicable rules procedure',
4971 1,
4972 'N'
4973 );
4974 END IF;
4975 ame_api.getruledetails1 (
4976 ruleidin => i.oam_rule_id,
4977 ruletypeout => l_ruletypeout,
4978 ruledescriptionout => l_rule_description,
4979 conditionidsout => l_conditionidsout,
4980 approvaltypenameout => l_approvaltypenameout,
4981 approvaltypedescriptionout => l_approvaltypedescriptionout,
4982 approvaldescriptionout => l_approval_level
4983 );
4984 document := document || l_attribute_tbl (
4985 15
4986 );
4987 document := document || ': ';
4988 document := document || l_rule_description;
4989 document := document || fnd_global.local_chr (
4990 10
4991 );
4992 document := document || l_attribute_tbl (
4993 16
4994 );
4995 document := document || ': ';
4996 document := document || l_approval_level;
4997 END LOOP;
4998
4999 document_type := 'text/plain';
5000 END IF;
5001
5002 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5003 aso_debug_pub.ADD (
5004 'End RULE_DETAILS_DOC procedure ',
5005 1,
5006 'N'
5007 );
5008 END IF;
5009 EXCEPTION
5010 WHEN OTHERS
5011 THEN
5012 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5013 aso_debug_pub.ADD (
5014 'Exception in RULE_DETAILS_DOC SqlCode :' || SQLERRM,
5015 1,
5016 'N'
5017 );
5018 END IF;
5019 wf_core.CONTEXT (
5020 'ASOAPPRV',
5021 'RULE_DETAILS_DOC',
5022 itemtype,
5023 itemkey
5024 );
5025 RAISE;
5026 END rule_details_doc;
5027
5028 PROCEDURE quote_detail_url (
5029 document_id IN VARCHAR2,
5030 display_type IN VARCHAR2,
5031 document IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
5032 document_type IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
5033 ) IS
5034 itemtype VARCHAR2 (30);
5035 itemkey VARCHAR2 (30);
5036 l_approval_id NUMBER;
5037 -- hyang performance fix bug 2860045
5038 l_quote_header_id NUMBER;
5039 l_jsp_name VARCHAR2 (2000);
5040 l_url VARCHAR2 (2000);
5041 l_attribute_tbl aso_attribute_label_tbl_type;
5042 l_quote_number NUMBER;
5043 l_party_number VARCHAR2(30);
5044 l_cust_account_id NUMBER;
5045 l_party_type VARCHAR2 (50);
5046 l_org_id NUMBER;
5047 l_notification_id NUMBER;
5048
5049 -- hyang performance fix bug 2860045
5050 CURSOR get_object_details (
5051 c_approval_id NUMBER
5052 ) IS
5053 SELECT quote_header_id, quote_number,qha.org_id
5054 FROM aso_quote_headers_all qha, aso_apr_obj_approvals aoa
5055 WHERE qha.quote_header_id = aoa.object_id
5056 AND aoa.object_approval_id = c_approval_id;
5057
5058 -- bug 3934660 replace qha.party_id with cust_party_id
5059
5060 CURSOR get_quote_details (
5061 c_quote_header_id NUMBER
5062 ) IS
5063 SELECT hca.cust_account_id, hp.party_type
5064 FROM aso_quote_headers_all qha,
5065 hz_parties hp,
5066 hz_cust_accounts hca
5067 WHERE qha.quote_header_id = c_quote_header_id
5068 AND nvl(qha.cust_account_id,0 ) = hca.cust_account_id (+)
5069 AND qha.cust_party_id = hp.party_id;
5070
5071 BEGIN
5072 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5073 aso_debug_pub.ADD (
5074 'Begin QUOTE_DETAIL_URL procedure ',
5075 1,
5076 'N'
5077 );
5078 END IF;
5079 itemtype := NVL (
5080 SUBSTR (
5081 document_id,
5082 1,
5083 INSTR (
5084 document_id,
5085 ':'
5086 ) - 1
5087 ),
5088 'ASOAPPRV'
5089 );
5090 itemkey := SUBSTR (
5091 document_id,
5092 INSTR (
5093 document_id,
5094 ':'
5095 ) + 1
5096 ) || 'HED';
5097 l_approval_id := wf_engine.getitemattrnumber (
5098 itemtype => itemtype,
5099 itemkey => itemkey,
5100 aname => 'APPROVALID'
5101 );
5102 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5103 aso_debug_pub.ADD (
5104 'ItemType is:' || itemtype,
5105 1,
5106 'N'
5107 );
5108 aso_debug_pub.ADD (
5109 'ItemKey is :' || itemkey,
5110 1,
5111 'N'
5112 );
5113 aso_debug_pub.ADD (
5114 'Approval ID :' || l_approval_id,
5115 1,
5116 'N'
5117 );
5118 END IF;
5119 -- get the quote header id
5120 -- hyang performance fix, added l_quote_header_id, bug 2860045
5121 OPEN get_object_details (
5122 l_approval_id
5123 );
5124 FETCH get_object_details INTO l_quote_header_id, l_quote_number,l_org_id;
5125 CLOSE get_object_details;
5126 OPEN get_quote_details (
5127 l_quote_header_id
5128 );
5129 FETCH get_quote_details INTO l_cust_account_id,
5130 l_party_type;
5131 CLOSE get_quote_details;
5132
5133 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5134 aso_debug_pub.ADD (
5135 'Quote header ID is ' || l_quote_header_id,
5136 1,
5137 'N'
5138 );
5139 END IF;
5140 -- get the server address
5141 l_url := fnd_web_config.jsp_agent (
5142 );
5143 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5144 aso_debug_pub.ADD (
5145 'URL ID is ' || l_url,
5146 1,
5147 'N'
5148 );
5149 END IF;
5150 -- get the jsp name
5151
5152 l_jsp_name := 'qotSZzpAppsLink.jsp?';
5153 l_jsp_name := l_jsp_name || 'qotFrmMainFile=qotSZzdContainer.jsp';
5154 l_jsp_name := l_jsp_name
5155 || fnd_global.local_chr (
5156 38
5157 )
5158 || 'qotFrmDspFile=qotSCocOverview.jsp';
5159 l_jsp_name := l_jsp_name
5160 || fnd_global.local_chr (
5161 38
5162 )
5163 || 'qotFrmRefFile=qotSCocOverview.jsp';
5164 l_jsp_name := l_jsp_name
5165 || fnd_global.local_chr (
5166 38
5167 )
5168 || 'qotDetCode=QUOTE';
5169 l_jsp_name := l_jsp_name
5170 || fnd_global.local_chr (
5171 38
5172 )
5173 || 'qotPtyType='
5174 || l_party_type;
5175 l_jsp_name := l_jsp_name
5176 || fnd_global.local_chr (
5177 38
5178 )
5179 || 'qotHdrId='
5180 || l_quote_header_id;
5181 l_jsp_name := l_jsp_name
5182 || fnd_global.local_chr (
5183 38
5184 )
5185 || 'qotHdrAcctId='
5186 || l_cust_account_id;
5187 l_jsp_name := l_jsp_name
5188 || fnd_global.local_chr (
5189 38
5190 )
5191 || 'qotHdrNbr='
5192 || l_quote_number;
5193 l_jsp_name := l_jsp_name
5194 || fnd_global.local_chr (
5195 38
5196 )
5197 || 'qotReqSetCookie=Y';
5198 l_jsp_name := l_jsp_name
5199 || fnd_global.local_chr (
5200 38
5201 )
5202 || 'qotFromApvlLink=Y';
5203
5204 -- bug 3178070
5205 l_jsp_name := l_jsp_name
5206 || fnd_global.local_chr (
5207 38
5208 )
5209 || 'qotApvOrgId='
5210 || l_org_id;
5211
5212 l_jsp_name := l_jsp_name
5213 || fnd_global.local_chr (
5214 38
5215 )
5216 || 'qotApvNotifId=NID';
5217
5218
5219
5220
5221 -- get the attribute label
5222 get_attribute_label (
5223 l_approval_id,
5224 l_attribute_tbl
5225 );
5226
5227 -- Create an html text buffer
5228 IF (display_type = 'text/html')
5229 THEN
5230 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5231 aso_debug_pub.ADD (
5232 'Display type is text/html',
5233 1,
5234 'N'
5235 );
5236 END IF;
5237 document := '<a href = "'
5238 || l_url
5239 || l_jsp_name
5240 || '">'
5241 || l_attribute_tbl (
5242 1
5243 )
5244 || '</a>';
5245 document_type := 'text/html';
5246 END IF;
5247
5248 -- Create a plain text buffer
5249
5250 IF (display_type = 'text/plain')
5251 THEN
5252 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5253 aso_debug_pub.ADD (
5254 'Display type is text/plain',
5255 1,
5256 'N'
5257 );
5258 END IF;
5259 NULL;
5260 document_type := 'text/plain';
5261 END IF;
5262
5263 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5264 aso_debug_pub.ADD (
5265 'End QUOTE_DETAIL_URL procedure ',
5266 1,
5267 'N'
5268 );
5269 END IF;
5270 EXCEPTION
5271 WHEN OTHERS
5272 THEN
5273 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5274 aso_debug_pub.ADD (
5275 'Exception in QUOTE_DETAIL_URL SqlCode :' || SQLERRM,
5276 1,
5277 'N'
5278 );
5279 END IF;
5280 wf_core.CONTEXT (
5281 'ASOAPPRV',
5282 'QUOTE_DETAIL_URL',
5283 itemtype,
5284 itemkey
5285 );
5286 RAISE;
5287 END quote_detail_url;
5288
5289 PROCEDURE get_attribute_label (
5290 p_approval_id IN NUMBER,
5291 p_attribute_tbl OUT NOCOPY /* file.sql.39 change */ aso_attribute_label_tbl_type
5292 ) IS
5293 l_application_id NUMBER;
5294
5295 CURSOR get_application_id (
5296 c_approval_id NUMBER
5297 ) IS
5298 SELECT application_id
5299 FROM aso_apr_obj_approvals
5300 WHERE object_approval_id = c_approval_id;
5301
5302 -- hyang, bug 2860045, performance fix.
5303 CURSOR get_label (
5304 c_application_id NUMBER
5305 ) IS
5306 SELECT attribute_label_long
5307 FROM ak_region_items ara, ak_attributes_tl aat
5308 WHERE region_code = 'ASO_APR_NOTIFICATION'
5309 and region_application_id = c_application_id
5310 AND AAT.ATTRIBUTE_APPLICATION_ID = ARA.ATTRIBUTE_APPLICATION_ID
5311 AND AAT.ATTRIBUTE_CODE = ARA.ATTRIBUTE_CODE
5312 AND AAT.LANGUAGE = USERENV('LANG')
5313 ORDER by display_sequence;
5314 BEGIN
5315 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5316 aso_debug_pub.ADD (
5317 'begin GET_ATTRIBUTE_LABEL procedure ',
5318 1,
5319 'N'
5320 );
5321 END IF;
5322 -- get the application id
5323 OPEN get_application_id (
5324 p_approval_id
5325 );
5326 FETCH get_application_id INTO l_application_id;
5327 CLOSE get_application_id;
5328 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5329 aso_debug_pub.ADD (
5330 'Application ID is ' || l_application_id,
5331 1,
5332 'N'
5333 );
5334 END IF;
5335 p_attribute_tbl := aso_attribute_label_tbl_type (
5336 );
5337
5338 -- fetch the labels and populate the PL/SQL table
5339
5340 FOR i IN get_label (
5341 697
5342 )
5343 LOOP
5344 p_attribute_tbl.EXTEND;
5345 p_attribute_tbl (
5346 p_attribute_tbl.COUNT
5347 ) := i.attribute_label_long;
5348 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5349 aso_debug_pub.ADD (
5350 'Label is ' || p_attribute_tbl (
5351 p_attribute_tbl.COUNT
5352 ),
5353 1,
5354 'N'
5355 );
5356 END IF;
5357 END LOOP;
5358
5359 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5360 aso_debug_pub.ADD (
5361 'Count of labels is ' || p_attribute_tbl.COUNT,
5362 1,
5363 'N'
5364 );
5365 aso_debug_pub.ADD (
5366 'End GET_ATTRIBUTE_LABEL procedure ',
5367 1,
5368 'N'
5369 );
5370 END IF;
5371 EXCEPTION
5372 WHEN OTHERS
5373 THEN
5374 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5375 aso_debug_pub.ADD (
5376 'Exception in GET_ATTRIBUTE_LABEL SqlCode :' || SQLERRM,
5377 1,
5378 'N'
5379 );
5380 END IF;
5381 wf_core.CONTEXT (
5382 'ASOAPPRV',
5383 'GET_ATTRIBUTE_LABEL',
5384 SQLERRM
5385 );
5386 RAISE;
5387 END get_attribute_label;
5388
5389
5390 FUNCTION GetRunFuncURL
5391 ( p_function_name IN VARCHAR2
5392 , p_resp_appl_id IN NUMBER DEFAULT NULL
5393 , p_resp_id IN NUMBER DEFAULT NULL
5394 , p_security_group_id IN NUMBER DEFAULT NULL
5395 , p_parameters IN VARCHAR2 DEFAULT NULL
5396 ) RETURN VARCHAR2
5397 IS
5398
5399 l_function_id NUMBER ;
5400 l_resp_appl_id NUMBER := p_resp_appl_id;
5401 l_resp_id NUMBER := p_resp_id ;
5402 l_security_group_id NUMBER := p_security_group_id;
5403
5404 BEGIN
5405
5406 l_function_id := fnd_function.get_function_id(p_function_name) ;
5407
5408
5409 IF p_resp_appl_id IS NULL THEN
5410 l_resp_appl_id := -1 ;
5411 END IF ;
5412
5413
5414 IF p_resp_id IS NULL THEN
5415 l_resp_id := -1 ;
5416 END IF ;
5417
5418 IF p_security_group_id IS NULL THEN
5419 l_security_group_id := -1 ;
5420 END IF ;
5421
5422 -- Call Fnd API
5423 RETURN fnd_run_function.get_run_function_url
5424 ( p_function_id => l_function_id
5425 , p_resp_appl_id => l_resp_appl_id
5426 , p_resp_id => l_resp_id
5427 , p_security_group_id => l_security_group_id
5428 , p_parameters => p_parameters ) ;
5429
5430
5431 END GetRunFuncURL ;
5432
5433
5434 PROCEDURE set_attributes (
5435 itemtype IN VARCHAR2,
5436 itemkey IN VARCHAR2,
5437 actid IN NUMBER,
5438 funcmode IN VARCHAR2,
5439 resultout IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
5440 ) IS
5441
5442 l_approval_object VARCHAR2 (4000);
5443 l_approval_id NUMBER;
5444 l_org_id NUMBER;
5445 l_ampsign VARCHAR2(1) := fnd_global.local_chr(38);
5446 l_url VARCHAR2(32000);
5447
5448 -- bug 7657061
5449 l_resp_appl_id NUMBER := 880;
5450 l_resp_id NUMBER;
5451
5452 CURSOR OBJECT (
5453 c_approval_id NUMBER
5454 ) IS
5455 SELECT quote_name, quote_number,org_id,quote_header_id
5456 FROM aso_quote_headers_all qha, aso_apr_obj_approvals aoa
5457 WHERE qha.quote_header_id = aoa.object_id
5458 AND aoa.object_approval_id = c_approval_id;
5459
5460 BEGIN
5461 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5462 aso_debug_pub.ADD (
5463 'Begin set attribute Process',
5464 1,
5465 'N'
5466 );
5467 END IF;
5468
5469 IF funcmode = 'RUN'
5470 THEN
5471 l_approval_id := wf_engine.getitemattrnumber (
5472 itemtype,
5473 itemkey,
5474 'APPROVALID'
5475 );
5476
5477 FOR i IN OBJECT (
5478 l_approval_id
5479 )
5480 LOOP
5481 l_approval_object := i.quote_name;
5482 l_org_id := i.org_id;
5483
5484 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5485 aso_debug_pub.ADD (
5486 'Quote name :' || l_approval_object,
5487 1,
5488 'N'
5489 );
5490 END IF;
5491 wf_engine.setitemattrtext (
5492 itemtype => itemtype,
5493 itemkey => itemkey,
5494 aname => 'APPROVAL_OBJECT',
5495 avalue => l_approval_object
5496 );
5497
5498 wf_engine.setitemattrnumber (
5499 itemtype => itemtype,
5500 itemkey => itemkey,
5501 aname => 'ORGID',
5502 avalue => l_org_id
5503 );
5504
5505 wf_engine.setitemattrnumber (
5506 itemtype => itemtype,
5507 itemkey => itemkey,
5508 aname => 'QTEHDRID',
5509 avalue => i.quote_header_id
5510 );
5511
5512 wf_engine.setitemattrnumber (
5513 itemtype => itemtype,
5514 itemkey => itemkey,
5515 aname => 'QTENUMBER',
5516 avalue => i.quote_number
5517 );
5518
5519
5520 select nvl(fnd_profile.value('ASO_QUOTE_APPROVER_RESP'),-1) into l_resp_id from dual; -- bug 7657061
5521
5522 -- bug 5350149
5523 l_url := aso_apr_wf_pvt.GetRunFuncURL(
5524 p_function_name => 'QOT_OAUI_QUOTE_DETAILS',
5525 p_resp_appl_id => l_resp_appl_id, -- bug 7657061
5526 p_resp_id => l_resp_id, -- bug 7657061
5527 p_parameters => l_ampsign||l_ampsign||'QotIntgEvtSrc=ApvlNotif'||l_ampsign||'QotIntgEvt=Event.QuoteDet'||l_ampsign||'QotIntgEvtVal='
5528 ||i.quote_header_id||l_ampsign||'QotIntgEvtVal1='||i.quote_number||l_ampsign||'addBreadCrumb=Y') ;
5529
5530
5531 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5532 aso_debug_pub.ADD ('RESP_APPL_ID: ' || l_resp_appl_id,1,'N'); -- bug 7657061
5533 aso_debug_pub.ADD ('RESP_ID: ' || l_resp_id,1,'N'); -- bug 7657061
5534 aso_debug_pub.ADD ('l_url: '||substr(l_url,1,240),1,'N');
5535 END IF;
5536
5537
5538 wf_engine.setitemattrtext (
5539 itemtype => itemtype,
5540 itemkey => itemkey,
5541 aname => 'OAQTEDETAILLNK',
5542 avalue => l_url
5543 );
5544
5545 END LOOP;
5546 resultout := 'COMPLETE';
5547 END IF;
5548 EXCEPTION
5549 WHEN OTHERS
5550 THEN
5551 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5552 aso_debug_pub.ADD (
5553 'Exception in Set Attributes SqlCode :' || SQLERRM,
5554 1,
5555 'N'
5556 );
5557 END IF;
5558 wf_core.CONTEXT (
5559 'ASOAPPRV',
5560 'set_attributes',
5561 itemtype,
5562 itemkey
5563 );
5564 RAISE;
5565
5566 END;
5567
5568 PROCEDURE update_approval_status (
5569 p_update_header_or_detail_flag IN VARCHAR2,
5570 p_object_approval_id IN NUMBER,
5571 p_approval_det_id IN NUMBER,
5572 p_status IN VARCHAR2,
5573 note IN VARCHAR2
5574 ) is
5575 begin
5576 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5577 aso_debug_pub.ADD (
5578 'Start update_approval_status procedure ',
5579 1,
5580 'N'
5581 );
5582
5583 aso_debug_pub.ADD (
5584 'Flag is :' || p_update_header_or_detail_flag,
5585 1,
5586 'N'
5587 );
5588 aso_debug_pub.ADD (
5589 'Object Approval ID is :' || p_object_approval_id,
5590 1,
5591 'N'
5592 );
5593 aso_debug_pub.ADD (
5594 'Approval Detail ID is :' || p_approval_det_id,
5595 1,
5596 'N'
5597 );
5598 aso_debug_pub.ADD (
5599 'Status is :' || p_status,
5600 1,
5601 'N'
5602 );
5603
5604 END IF;
5605
5606 IF p_update_header_or_detail_flag = 'HEADER' THEN
5607 IF (p_status = 'PEND')
5608 THEN
5609 UPDATE aso_apr_obj_approvals
5610 SET approval_status = p_status,
5611 last_update_date = SYSDATE,
5612 last_updated_by = g_user_id,
5613 last_update_login = g_user_id
5614 WHERE object_approval_id = p_object_approval_id;
5615 ELSE
5616 UPDATE aso_apr_obj_approvals
5617 SET approval_status = p_status,
5618 last_update_date = SYSDATE,
5619 end_date = SYSDATE,
5620 last_updated_by = g_user_id,
5621 last_update_login = g_user_id
5622 WHERE object_approval_id = p_object_approval_id;
5623 END IF;
5624
5625 END IF;
5626
5627 IF p_update_header_or_detail_flag = 'DETAIL' THEN
5628 UPDATE aso_apr_approval_details
5629 SET approver_status = p_status,
5630 date_received = SYSDATE,
5631 last_update_date = SYSDATE,
5632 approver_comments = note,
5633 last_updated_by = fnd_global.user_id,
5634 last_update_login = fnd_global.user_id
5635 WHERE approval_det_id = p_approval_det_id;
5636 END IF;
5637
5638 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5639 aso_debug_pub.ADD (
5640 'End update_approval_status procedure ',
5641 1,
5642 'N'
5643 );
5644 END IF;
5645
5646 end;
5647
5648
5649 END aso_apr_wf_pvt;