DBA Data[Home] [Help]

PACKAGE BODY: APPS.XDPSTATUS

Source


1 PACKAGE BODY XDPSTATUS AS
2 /* $Header: XDPSTATB.pls 120.1 2005/06/09 00:32:17 appldev  $ */
3 
4 
5 /****
6  All Private Procedures for the Package
7 ****/
8 
9 Procedure SetOrderStatus(itemtype in varchar2,
10                          itemkey in varchar2);
11 
12 Procedure SendOrderStatus(itemtype in varchar2,
13                          itemkey in varchar2,
14                          actid in number);
15 
16 Procedure SetBundleStatus(itemtype in varchar2,
17                          itemkey in varchar2);
18 
19 Procedure SetLineStatus(itemtype in varchar2,
20                         itemkey in varchar2);
21 
22 Procedure SendLineStatus(itemtype in varchar2,
23                          itemkey in varchar2,
24                          actid in number);
25 
26 Procedure SetPackageStatus(itemtype in varchar2,
27                            itemkey in varchar2);
28 
29 /***
30 Procedure SetWorkitemStatus(itemtype in varchar2,
31                            itemkey in varchar2);
32 ***/
33 
34 Procedure SetWIStatusSuccess(itemtype in varchar2,
35                              itemkey in varchar2);
36 
37 Procedure SaveWorkitem(itemtype in varchar2,
38                        itemkey in varchar2,
39                        actid in number);
40 
41 Procedure SendWorkitemStatus(itemtype in varchar2,
42                              itemkey in varchar2,
43                              actid in number);
44 
45 Procedure SetFAStatus(itemtype in varchar2,
46                       itemkey in varchar2,
47                       actid in number);
48 
49 Procedure SetFeExecStatus(itemtype in varchar2,
50                           itemkey in varchar2);
51 
52 Procedure SendFeProvStatus(itemtype in varchar2,
53                            itemkey in varchar2,
54                            actid in number);
55 
56 Function GetResubmissionJobID (itemtype in varchar2,
57                                itemkey in varchar2) return number;
58 
59 Procedure UpdateFAStatus(faid in number, status in varchar2, provmode in varchar2);
60 
61 PROCEDURE SetErrorStatus(itemtype IN VARCHAR2,
62                          itemkey  IN VARCHAR2,
63                          actid    IN NUMBER);
64 
65 PROCEDURE SetNodeWIStatus(itemtype IN VARCHAR2,
66                           itemkey  IN VARCHAR2,
67                           actid    IN NUMBER);
68 
69 
70 PROCEDURE SetNodeLineStatus(itemtype IN VARCHAR2,
71                           itemkey  IN VARCHAR2,
72                           actid    IN NUMBER);
73 
74 /***********************************************
75 * END of Private Procedures/Function Definitions
76 ************************************************/
77 
78 
79 
80 --  SET_ERROR_STATUS
81 --   Resultout
82 --     Activity Performed   - Activity was completed without any errors
83 --
84 -- Your Description here:
85 
86 Procedure SET_ERROR_STATUS (itemtype        in varchar2,
87 			    itemkey         in varchar2,
88 			    actid           in number,
89 			    funcmode        in varchar2,
90 			    resultout       OUT NOCOPY varchar2 ) IS
91 
92 BEGIN
93 -- RUN mode - normal process execution
94 --
95 	IF (funcmode = 'RUN') THEN
96                 SetErrorStatus(itemtype, itemkey,actid);
97 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
98 	END IF;
99 -- CANCEL mode - activity 'compensation'
100 --
101 -- This is in the event that the activity must be undone
102 -- for example when a process is reset to an earlier point
103 -- due to a loop back.
104 --
105 
106         IF (funcmode = 'CANCEL') THEN
107                 resultout := 'COMPLETE';
108                 return;
109         END IF;
110 
111         IF (funcmode = 'RESPOND') THEN
112                 resultout := 'COMPLETE';
113                 return;
114         END IF;
115 
116         IF (funcmode = 'FORWARD') THEN
117                 resultout := 'COMPLETE';
118                 return;
119         END IF;
120 
121         IF (funcmode = 'TRANSFER') THEN
122                 return;
123         END IF;
124 
125         IF (funcmode = 'TIMEOUT') THEN
126                 resultout := 'COMPLETE';
127                 return;
128         END IF;
129 
130         IF (funcmode = 'others') THEN
131                 resultout := ' ';
132                 return;
133         END IF;
134 
135 
136 EXCEPTION
137 WHEN OTHERS THEN
138  wf_core.context('XDPSTATUS', 'SET_ERROR_STATUS', itemtype, itemkey, to_char(actid), funcmode);
139  raise;
140 END SET_ERROR_STATUS;
141 
142 --  SET_ORDER_STATUS
143 --   Resultout
144 --     Activity Performed   - Activity was completed without any errors
145 --
146 -- Your Description here:
147 
148 Procedure SET_ORDER_STATUS (itemtype        in varchar2,
149 			itemkey         in varchar2,
150 			actid           in number,
151 			funcmode        in varchar2,
152 			resultout       OUT NOCOPY varchar2 ) IS
153 
154 BEGIN
155 -- RUN mode - normal process execution
156 --
157 	IF (funcmode = 'RUN') THEN
158                 SetOrderStatus(itemtype, itemkey);
159 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
160 	END IF;
161 -- CANCEL mode - activity 'compensation'
162 --
163 -- This is in the event that the activity must be undone
164 -- for example when a process is reset to an earlier point
165 -- due to a loop back.
166 --
167 
168         IF (funcmode = 'CANCEL') THEN
169                 resultout := 'COMPLETE';
170                 return;
171         END IF;
172 
173         IF (funcmode = 'RESPOND') THEN
174                 resultout := 'COMPLETE';
175                 return;
176         END IF;
177 
178         IF (funcmode = 'FORWARD') THEN
179                 resultout := 'COMPLETE';
180                 return;
181         END IF;
182 
183         IF (funcmode = 'TRANSFER') THEN
184                 return;
185         END IF;
186 
187         IF (funcmode = 'TIMEOUT') THEN
188                 resultout := 'COMPLETE';
189                 return;
190         END IF;
191 
192         IF (funcmode = 'others') THEN
193                 resultout := ' ';
194                 return;
195         END IF;
196 
197 
198 EXCEPTION
199 WHEN OTHERS THEN
200  wf_core.context('XDPSTATUS', 'SET_ORDER_STATUS', itemtype, itemkey, to_char(actid), funcmode);
201  raise;
202 END SET_ORDER_STATUS;
203 
204 
205 --  SEND_ORDER_STATUS
206 --   Resultout
207 --     Activity Performed   - Activity was completed without any errors
208 --
209 -- Your Description here:
210 
211 Procedure SEND_ORDER_STATUS (itemtype        in varchar2,
212 			itemkey         in varchar2,
213 			actid           in number,
214 			funcmode        in varchar2,
215 			resultout       OUT NOCOPY varchar2 ) IS
216 
217 BEGIN
218 -- RUN mode - normal process execution
219 --
220 	IF (funcmode = 'RUN') THEN
221                 SendOrderStatus(itemtype, itemkey, actid);
222 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
223 	END IF;
224 -- CANCEL mode - activity 'compensation'
225 --
226 -- This is in the event that the activity must be undone
227 -- for example when a process is reset to an earlier point
228 -- due to a loop back.
229 --
230 
231         IF (funcmode = 'CANCEL') THEN
232                 resultout := 'COMPLETE';
233                 return;
234         END IF;
235 
236         IF (funcmode = 'RESPOND') THEN
237                 resultout := 'COMPLETE';
238                 return;
239         END IF;
240 
241         IF (funcmode = 'FORWARD') THEN
242                 resultout := 'COMPLETE';
243                 return;
244         END IF;
245 
246         IF (funcmode = 'TRANSFER') THEN
247                 resultout := 'COMPLETE';
248                 return;
249         END IF;
250 
251         IF (funcmode = 'TIMEOUT') THEN
252                 resultout := 'COMPLETE';
253                 return;
254         END IF;
255 
256         IF (funcmode = 'others') THEN
257                 resultout := ' ';
258                 return;
259         END IF;
260 
261 EXCEPTION
262 WHEN OTHERS THEN
263  wf_core.context('XDPSTATUS', 'SEND_ORDER_STATUS', itemtype, itemkey, to_char(actid), funcmode);
264  raise;
265 END SEND_ORDER_STATUS;
266 
267 
268 
269 --  SEND_LINE_STATUS
270 --   Resultout
271 --     Activity Performed   - Activity was completed without any errors
272 --
273 -- Your Description here:
274 
275 Procedure SEND_LINE_STATUS (itemtype        in varchar2,
276 			itemkey         in varchar2,
277 			actid           in number,
278 			funcmode        in varchar2,
279 			resultout       OUT NOCOPY varchar2 ) IS
280 
281 BEGIN
282 -- RUN mode - normal process execution
283 --
284 	IF (funcmode = 'RUN') THEN
285                 SendLineStatus(itemtype, itemkey, actid);
286 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
287 	END IF;
288 -- CANCEL mode - activity 'compensation'
289 --
290 -- This is in the event that the activity must be undone
291 -- for example when a process is reset to an earlier point
292 -- due to a loop back.
293 --
294 
295         IF (funcmode = 'CANCEL') THEN
296                 resultout := 'COMPLETE';
297                 return;
298         END IF;
299 
300         IF (funcmode = 'RESPOND') THEN
301                 resultout := 'COMPLETE';
302                 return;
303         END IF;
304 
305         IF (funcmode = 'FORWARD') THEN
306                 resultout := 'COMPLETE';
307                 return;
308         END IF;
309 
310         IF (funcmode = 'TRANSFER') THEN
311                 resultout := 'COMPLETE';
312                 return;
313         END IF;
314 
315         IF (funcmode = 'TIMEOUT') THEN
316                 resultout := 'COMPLETE';
317                 return;
318         END IF;
319 
320         IF (funcmode = 'others') THEN
321                 resultout := ' ';
322                 return;
323         END IF;
324 
325 EXCEPTION
326 WHEN OTHERS THEN
327  wf_core.context('XDPSTATUS', 'SEND_LINE_STATUS', itemtype, itemkey, to_char(actid), funcmode);
328  raise;
329 END SEND_LINE_STATUS;
330 
331 
332 
333 --  SET_BUNDLE_STATUS
334 --   Resultout
335 --     Activity Performed   - Activity was completed without any errors
336 --
337 -- Your Description here:
338 
339 Procedure SET_BUNDLE_STATUS (itemtype        in varchar2,
340 			itemkey         in varchar2,
341 			actid           in number,
342 			funcmode        in varchar2,
343 			resultout       OUT NOCOPY varchar2 ) IS
344 
345 BEGIN
346 -- RUN mode - normal process execution
347 --
348 	IF (funcmode = 'RUN') THEN
349                 SetBundleStatus(itemtype, itemkey);
350 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
351 	END IF;
352 -- CANCEL mode - activity 'compensation'
353 --
354 -- This is in the event that the activity must be undone
355 -- for example when a process is reset to an earlier point
356 -- due to a loop back.
357 --
358 
359         IF (funcmode = 'CANCEL') THEN
360                 resultout := 'COMPLETE';
361                 return;
362         END IF;
363 
364         IF (funcmode = 'RESPOND') THEN
365                 resultout := 'COMPLETE';
366                 return;
367         END IF;
368 
369         IF (funcmode = 'FORWARD') THEN
370                 resultout := 'COMPLETE';
371                 return;
372         END IF;
373 
374         IF (funcmode = 'TRANSFER') THEN
375                 return;
376         END IF;
377 
378         IF (funcmode = 'TIMEOUT') THEN
379                 resultout := 'COMPLETE';
380                 return;
381         END IF;
382 
383         IF (funcmode = 'others') THEN
384                 resultout := ' ';
385                 return;
386         END IF;
387 
388 
389 EXCEPTION
390 WHEN OTHERS THEN
391  wf_core.context('XDPSTATUS', 'SET_BUNDLE_STATUS', itemtype, itemkey, to_char(actid), funcmode);
392  raise;
393 END SET_BUNDLE_STATUS;
394 
395 
396 --  SET_LINE_STATUS
397 --   Resultout
398 --     Activity Performed   - Activity was completed without any errors
399 --
400 -- Your Description here:
401 
402 Procedure SET_LINE_STATUS (itemtype        in varchar2,
403 			itemkey         in varchar2,
404 			actid           in number,
405 			funcmode        in varchar2,
406 			resultout       OUT NOCOPY varchar2 ) IS
407 
408 BEGIN
409 -- RUN mode - normal process execution
410 --
411 	IF (funcmode = 'RUN') THEN
412                 SetLineStatus(itemtype, itemkey);
413 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
414 	END IF;
415 -- CANCEL mode - activity 'compensation'
416 --
417 -- This is in the event that the activity must be undone
418 -- for example when a process is reset to an earlier point
419 -- due to a loop back.
420 --
421 
422         IF (funcmode = 'CANCEL') THEN
423                 resultout := 'COMPLETE';
424                 return;
425         END IF;
426 
427         IF (funcmode = 'RESPOND') THEN
428                 resultout := 'COMPLETE';
429                 return;
430         END IF;
431 
432         IF (funcmode = 'FORWARD') THEN
433                 resultout := 'COMPLETE';
434                 return;
435         END IF;
436 
437         IF (funcmode = 'TRANSFER') THEN
438                 return;
439         END IF;
440 
441         IF (funcmode = 'TIMEOUT') THEN
442                 resultout := 'COMPLETE';
443                 return;
444         END IF;
445 
446         IF (funcmode = 'others') THEN
447                 resultout := ' ';
448                 return;
449         END IF;
450 
451 
452 EXCEPTION
453 WHEN OTHERS THEN
454  wf_core.context('XDPSTATUS', 'SET_LINE_STATUS', itemtype, itemkey, to_char(actid), funcmode);
455  raise;
456 END SET_LINE_STATUS;
457 
458 
459 
460 
461 --  SET_PACKAGE_STATUS
462 --   Resultout
463 --     Activity Performed   - Activity was completed without any errors
464 --
465 -- Your Description here:
466 
467 Procedure SET_PACKAGE_STATUS (itemtype        in varchar2,
468 			itemkey         in varchar2,
469 			actid           in number,
470 			funcmode        in varchar2,
471 			resultout       OUT NOCOPY varchar2 ) IS
472 
473 BEGIN
474 -- RUN mode - normal process execution
475 --
476 	IF (funcmode = 'RUN') THEN
477                 SetPackageStatus(itemtype, itemkey);
478 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
479 	END IF;
480 -- CANCEL mode - activity 'compensation'
481 --
482 -- This is in the event that the activity must be undone
483 -- for example when a process is reset to an earlier point
484 -- due to a loop back.
485 --
486 
487         IF (funcmode = 'CANCEL') THEN
488                 resultout := 'COMPLETE';
489                 return;
490         END IF;
491 
492         IF (funcmode = 'RESPOND') THEN
493                 resultout := 'COMPLETE';
494                 return;
495         END IF;
496 
497         IF (funcmode = 'FORWARD') THEN
498                 resultout := 'COMPLETE';
499                 return;
500         END IF;
501 
502         IF (funcmode = 'TRANSFER') THEN
503                 return;
504         END IF;
505 
506         IF (funcmode = 'TIMEOUT') THEN
507                 resultout := 'COMPLETE';
508                 return;
509         END IF;
510 
511         IF (funcmode = 'others') THEN
512                 resultout := ' ';
513                 return;
514         END IF;
515 
516 
517 EXCEPTION
518 WHEN OTHERS THEN
519  wf_core.context('XDPSTATUS', 'SET_PACKAGE_STATUS', itemtype, itemkey, to_char(actid), funcmode);
520  raise;
521 END SET_PACKAGE_STATUS;
522 
523 
524 
525 
526 --  l_OrderID
527 --   Resultout
528 --     Activity Performed   - Activity was completed without any errors
529 --
530 -- Your Description here:
531 
532 Procedure SET_WORKITEM_STATUS (itemtype        in varchar2,
533 			itemkey         in varchar2,
534 			actid           in number,
535 			funcmode        in varchar2,
536 			resultout       OUT NOCOPY varchar2 ) IS
537 
538 BEGIN
539 -- RUN mode - normal process execution
540 --
541         IF (funcmode = 'RUN') THEN
542                 SetWorkitemStatus(itemtype, itemkey);
543                 resultout := 'COMPLETE:ACTIVITY_PERFORMED';
544         END IF;
545 -- CANCEL mode - activity 'compensation'
546 --
547 -- This is in the event that the activity must be undone
548 -- for example when a process is reset to an earlier point
549 -- due to a loop back.
550 --
551 
552 
553         IF (funcmode = 'RESPOND') THEN
554                 resultout := 'COMPLETE';
555                 return;
556         END IF;
557 
558         IF (funcmode = 'FORWARD') THEN
559                 resultout := 'COMPLETE';
560                 return;
561         END IF;
562 
563         IF (funcmode = 'TRANSFER') THEN
564                 resultout := 'COMPLETE';
565                 return;
566         END IF;
567 
568         IF (funcmode = 'TIMEOUT') THEN
569                 resultout := 'COMPLETE';
570                 return;
571         END IF;
572 
573         IF (funcmode = 'others') THEN
574                 resultout := ' ';
575                 return;
576         END IF;
577 
578 EXCEPTION
579 WHEN OTHERS THEN
580  wf_core.context('XDPSTATUS', 'SET_WORKITEM_STATUS', itemtype, itemkey, to_char(actid), funcmode);
581  raise;
582 END SET_WORKITEM_STATUS;
583 
584 
585 --  SET_WI_STATUS_SUCCESS
586 --   Resultout
587 --     Activity Performed   - Activity was completed without any errors
588 --
589 -- Your Description here:
590 
591 Procedure SET_WI_STATUS_SUCCESS (itemtype        in varchar2,
592 			itemkey         in varchar2,
593 			actid           in number,
594 			funcmode        in varchar2,
595 			resultout       OUT NOCOPY varchar2 ) IS
596 
597 BEGIN
598 -- RUN mode - normal process execution
599 --
600         IF (funcmode = 'RUN') THEN
601                 SetWIStatusSuccess(itemtype, itemkey);
602                 resultout := 'COMPLETE:ACTIVITY_PERFORMED';
603         END IF;
604 -- CANCEL mode - activity 'compensation'
605 --
606 -- This is in the event that the activity must be undone
607 -- for example when a process is reset to an earlier point
608 -- due to a loop back.
609 --
610 
611 
612         IF (funcmode = 'RESPOND') THEN
613                 resultout := 'COMPLETE';
614                 return;
615         END IF;
616 
617         IF (funcmode = 'FORWARD') THEN
618                 resultout := 'COMPLETE';
619                 return;
620         END IF;
621 
622         IF (funcmode = 'TRANSFER') THEN
623                 resultout := 'COMPLETE';
624                 return;
625         END IF;
626 
627         IF (funcmode = 'TIMEOUT') THEN
628                 resultout := 'COMPLETE';
629                 return;
630         END IF;
631 
632         IF (funcmode = 'others') THEN
633                 resultout := ' ';
634                 return;
635         END IF;
636 
637 EXCEPTION
638 WHEN OTHERS THEN
639  wf_core.context('XDPSTATUS', 'SET_WI_STATUS_SUCCESS', itemtype, itemkey, to_char(actid), funcmode);
640  raise;
641 END SET_WI_STATUS_SUCCESS;
642 
643 
644 
645 
646 --  SEND_WORKITEM_STATUS
647 --   Resultout
648 --     Activity Performed   - Activity was completed without any errors
649 --
650 -- Your Description here:
651 
652 Procedure SEND_WORKITEM_STATUS (itemtype        in varchar2,
653 			itemkey         in varchar2,
654 			actid           in number,
655 			funcmode        in varchar2,
656 			resultout       OUT NOCOPY varchar2 ) IS
657 BEGIN
658 -- RUN mode - normal process execution
659 --
660 	IF (funcmode = 'RUN') THEN
661                 SendWorkitemStatus(itemtype, itemkey, actid);
662 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
663 
664 	END IF;
665 -- CANCEL mode - activity 'compensation'
666 --
667 -- This is in the event that the activity must be undone
668 -- for example when a process is reset to an earlier point
669 -- due to a loop back.
670 --
671 
672         IF (funcmode = 'CANCEL') THEN
673                 resultout := 'COMPLETE';
674                 return;
675         END IF;
676 
677         IF (funcmode = 'RESPOND') THEN
678                 resultout := 'COMPLETE';
679                 return;
680         END IF;
681 
682         IF (funcmode = 'FORWARD') THEN
683                 resultout := 'COMPLETE';
684                 return;
685         END IF;
686 
687         IF (funcmode = 'TRANSFER') THEN
688                 resultout := 'COMPLETE';
689                 return;
690         END IF;
691 
692         IF (funcmode = 'TIMEOUT') THEN
693                 resultout := 'COMPLETE';
694                 return;
695         END IF;
696 
697         IF (funcmode = 'others') THEN
698                 resultout := ' ';
699                 return;
700         END IF;
701 
702 EXCEPTION
703 WHEN OTHERS THEN
704  wf_core.context('XDPSTATUS', 'SEND_WORKITEM_STATUS', itemtype, itemkey, to_char(actid), funcmode);
705  raise;
706 END SEND_WORKITEM_STATUS;
707 
708 
709 --  SAVE_WORKITEM
710 --   Resultout
711 --     Activity Performed   - Activity was completed without any errors
712 --
713 -- Your Description here:
714 
715 Procedure SAVE_WORKITEM (itemtype        in varchar2,
716 			itemkey         in varchar2,
717 			actid           in number,
718 			funcmode        in varchar2,
719 			resultout       OUT NOCOPY varchar2 ) IS
720 
721 BEGIN
722 -- RUN mode - normal process execution
723 --
724         IF (funcmode = 'RUN') THEN
725                 SaveWorkitem(itemtype, itemkey, actid);
726                 resultout := 'COMPLETE:ACTIVITY_PERFORMED';
727         END IF;
728 -- CANCEL mode - activity 'compensation'
729 --
730 -- This is in the event that the activity must be undone
731 -- for example when a process is reset to an earlier point
732 -- due to a loop back.
733 --
734 
735 
736         IF (funcmode = 'RESPOND') THEN
737                 resultout := 'COMPLETE';
738                 return;
739         END IF;
740 
741         IF (funcmode = 'FORWARD') THEN
742                 resultout := 'COMPLETE';
743                 return;
744         END IF;
745 
746         IF (funcmode = 'TRANSFER') THEN
747                 resultout := 'COMPLETE';
748                 return;
749         END IF;
750 
751         IF (funcmode = 'TIMEOUT') THEN
752                 resultout := 'COMPLETE';
753                 return;
754         END IF;
755 
756         IF (funcmode = 'others') THEN
757                 resultout := ' ';
758                 return;
759         END IF;
760 
761 EXCEPTION
762 WHEN OTHERS THEN
763  wf_core.context('XDPSTATUS', 'SAVE_WORKITEM', itemtype, itemkey, to_char(actid), funcmode);
764  raise;
765 END SAVE_WORKITEM;
766 
767 
768 --  SET_FA_STATUS
769 --   Resultout
770 --     Activity Performed   - Activity was completed without any errors
771 --
772 -- Your Description here:
773 
774 Procedure SET_FA_STATUS (itemtype        in varchar2,
775 			itemkey         in varchar2,
776 			actid           in number,
777 			funcmode        in varchar2,
778 			resultout       OUT NOCOPY varchar2 ) IS
779 
780 BEGIN
781 -- RUN mode - normal process execution
782 --
783 	IF (funcmode = 'RUN') THEN
784                 SetFAStatus(itemtype, itemkey, actid);
785 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
786 	END IF;
787 -- CANCEL mode - activity 'compensation'
788 --
789 -- This is in the event that the activity must be undone
790 -- for example when a process is reset to an earlier point
791 -- due to a loop back.
792 --
793 
794         IF (funcmode = 'CANCEL') THEN
795                 resultout := 'COMPLETE';
796                 return;
797         END IF;
798 
799         IF (funcmode = 'RESPOND') THEN
800                 resultout := 'COMPLETE';
801                 return;
802         END IF;
803 
804         IF (funcmode = 'FORWARD') THEN
805                 resultout := 'COMPLETE';
806                 return;
807         END IF;
808 
809         IF (funcmode = 'TRANSFER') THEN
810                 resultout := 'COMPLETE';
811                 return;
812         END IF;
813 
814         IF (funcmode = 'TIMEOUT') THEN
815                 resultout := 'COMPLETE';
816                 return;
817         END IF;
818 
819         IF (funcmode = 'others') THEN
820                 resultout := ' ';
821                 return;
822         END IF;
823 
824 EXCEPTION
825 WHEN OTHERS THEN
826  wf_core.context('XDPSTATUS', 'SET_FA_STATUS', itemtype, itemkey, to_char(actid), funcmode);
827  raise;
828 END SET_FA_STATUS;
829 
830 
831 
832 -- SEND_FE_PROV_STATUS
833 --   Resultout
834 --     Activity Performed   - Activity was completed without any errors
835 --
836 -- Your Description here:
837 
838 Procedure SEND_FE_PROV_STATUS (itemtype        in varchar2,
839 			itemkey         in varchar2,
840 			actid           in number,
841 			funcmode        in varchar2,
842 			resultout       OUT NOCOPY varchar2 ) IS
843 
844 BEGIN
845 -- RUN mode - normal process execution
846 --
847 	IF (funcmode = 'RUN') THEN
848                 SendFeProvStatus(itemtype, itemkey, actid);
849 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
850 	END IF;
851 -- CANCEL mode - activity 'compensation'
852 --
853 -- This is in the event that the activity must be undone
854 -- for example when a process is reset to an earlier point
855 -- due to a loop back.
856 --
857 
858         IF (funcmode = 'CANCEL') THEN
859                 resultout := 'COMPLETE';
860                 return;
861         END IF;
862 
863         IF (funcmode = 'RESPOND') THEN
864                 resultout := 'COMPLETE';
865                 return;
866         END IF;
867 
868         IF (funcmode = 'FORWARD') THEN
869                 resultout := 'COMPLETE';
870                 return;
871         END IF;
872 
873         IF (funcmode = 'TRANSFER') THEN
874                 resultout := 'COMPLETE';
875                 return;
876         END IF;
877 
878         IF (funcmode = 'TIMEOUT') THEN
879                 resultout := 'COMPLETE';
880                 return;
881         END IF;
882 
883         IF (funcmode = 'others') THEN
884                 resultout := ' ';
885                 return;
886         END IF;
887 
888 EXCEPTION
889 WHEN OTHERS THEN
890  wf_core.context('XDPSTATUS', 'SEND_FE_PROV_STATUS', itemtype, itemkey, to_char(actid), funcmode);
891  raise;
892 END SEND_FE_PROV_STATUS;
893 
894 
895 
896 --  SET_FE_EXEC_STATUS
897 --   Resultout
898 --     Activity Performed   - Activity was completed without any errors
899 --
900 -- Your Description here:
901 
902 Procedure SET_FE_EXEC_STATUS (itemtype        in varchar2,
903 			itemkey         in varchar2,
904 			actid           in number,
905 			funcmode        in varchar2,
906 			resultout       OUT NOCOPY varchar2 ) IS
907 
908 BEGIN
909 -- RUN mode - normal process execution
910 --
911 	IF (funcmode = 'RUN') THEN
912                 SetFeExecStatus(itemtype, itemkey);
913 		resultout := 'COMPLETE:ACTIVITY_PERFORMED';
914 	END IF;
915 -- CANCEL mode - activity 'compensation'
916 --
917 -- This is in the event that the activity must be undone
918 -- for example when a process is reset to an earlier point
919 -- due to a loop back.
920 --
921 
922         IF (funcmode = 'CANCEL') THEN
923                 resultout := 'COMPLETE';
924                 return;
925         END IF;
926 
927         IF (funcmode = 'RESPOND') THEN
928                 resultout := 'COMPLETE';
929                 return;
930         END IF;
931 
932         IF (funcmode = 'FORWARD') THEN
933                 resultout := 'COMPLETE';
934                 return;
935         END IF;
936 
937         IF (funcmode = 'TRANSFER') THEN
938                 resultout := 'COMPLETE';
939                 return;
940         END IF;
941 
942         IF (funcmode = 'TIMEOUT') THEN
943                 resultout := 'COMPLETE';
944                 return;
945         END IF;
946 
947         IF (funcmode = 'others') THEN
948                 resultout := ' ';
949                 return;
950         END IF;
951 
952 EXCEPTION
953 WHEN OTHERS THEN
954  wf_core.context('XDPSTATUS', 'SET_FE_EXEC_STATUS', itemtype, itemkey, to_char(actid), funcmode);
955  raise;
956 END SET_FE_EXEC_STATUS;
957 
958 
959 --  SET_FE_PROV_STATE
960 --   Resultout
961 --     Activity Performed   - Activity was completed without any errors
962 --
963 -- Your Description here:
964 
965 Procedure SET_FE_PROV_STATE (itemtype        in varchar2,
966 			itemkey         in varchar2,
967 			actid           in number,
968 			funcmode        in varchar2,
969 			resultout       OUT NOCOPY varchar2 ) IS
970 
971 BEGIN
972 -- RUN mode - normal process execution
973 --
974         IF (funcmode = 'RUN') THEN
975                 resultout := 'COMPLETE:ACTIVITY_PERFORMED';
976         END IF;
977 -- CANCEL mode - activity 'compensation'
978 --
979 -- This is in the event that the activity must be undone
980 -- for example when a process is reset to an earlier point
981 -- due to a loop back.
982 --
983 
984 
985         IF (funcmode = 'RESPOND') THEN
986                 resultout := 'COMPLETE';
987                 return;
988         END IF;
989 
990         IF (funcmode = 'FORWARD') THEN
991                 resultout := 'COMPLETE';
992                 return;
993         END IF;
994 
995         IF (funcmode = 'TRANSFER') THEN
996                 resultout := 'COMPLETE';
997                 return;
998         END IF;
999 
1000         IF (funcmode = 'TIMEOUT') THEN
1001                 resultout := 'COMPLETE';
1002                 return;
1003         END IF;
1004 
1005         IF (funcmode = 'others') THEN
1006                 resultout := ' ';
1007                 return;
1008         END IF;
1009 
1010 EXCEPTION
1011 WHEN OTHERS THEN
1012  wf_core.context('XDPSTATUS', 'SET_FE_PROV_STATE', itemtype, itemkey, to_char(actid), funcmode);
1013  raise;
1014 END SET_FE_PROV_STATE;
1015 
1016 --This procedure sets the Line item status to the status
1017 --that is assigned to the node in the workflow..
1018 Procedure SET_NODE_LINE_STATUS (itemtype        in varchar2,
1019                             itemkey         in varchar2,
1020                             actid           in number,
1021                             funcmode        in varchar2,
1022                             resultout       OUT NOCOPY varchar2 ) IS
1023 
1024 BEGIN
1025 -- RUN mode - normal process execution
1026 --
1027         IF (funcmode = 'RUN') THEN
1028                 SetNodeLineStatus(itemtype, itemkey,actid);
1029                 resultout := 'COMPLETE';
1030         ELSE
1031                 resultout := 'COMPLETE';
1032                 return;
1033         END IF;
1034 
1035 
1036 EXCEPTION
1037 WHEN OTHERS THEN
1038  wf_core.context('XDPSTATUS', 'SET_NODE_LINE_STATUS', itemtype, itemkey, to_char(actid), funcmode);
1039  raise;
1040 END SET_NODE_LINE_STATUS;
1041 --This procedure sets the work item status to the status
1042 --that is assigned to the node in the workflow..
1043 Procedure SET_NODE_WI_STATUS (itemtype        in varchar2,
1044                             itemkey         in varchar2,
1045                             actid           in number,
1046                             funcmode        in varchar2,
1047                             resultout       OUT NOCOPY varchar2 ) IS
1048 
1049 BEGIN
1050 -- RUN mode - normal process execution
1051 --
1052         IF (funcmode = 'RUN') THEN
1053                 SetNodeWIStatus(itemtype, itemkey,actid);
1054                 resultout := 'COMPLETE';
1055         ELSE
1056                 resultout := 'COMPLETE';
1057                 return;
1058         END IF;
1059 
1060 
1061 EXCEPTION
1062 WHEN OTHERS THEN
1063  wf_core.context('XDPSTATUS', 'SET_NODE_WI_STATUS', itemtype, itemkey, to_char(actid), funcmode);
1064  raise;
1065 END SET_NODE_WI_STATUS;
1066 
1067 
1068 
1069 
1070 Function GetResubmissionJobID (itemtype in varchar2,
1071                                itemkey in varchar2) return number is
1072  l_JobID number;
1073  e_UnhandledException exception;
1074 begin
1075  begin
1076    l_JobID := wf_engine.GetItemAttrNumber(itemtype => GetResubmissionJobID.itemtype,
1077                                           itemkey => GetResubmissionJobID.itemkey,
1078                                           aname => 'RESUBMISSION_JOB_ID');
1079 
1080  exception
1081  when others then
1082   if sqlcode = -20002 then
1083       l_JobID := 0;
1084       wf_core.clear;
1085   else
1086     raise e_UnhandledException;
1087   end if;
1088  end;
1089 
1090  return l_JobID;
1091 
1092 End GetResubmissionJobID;
1093 
1094 PROCEDURE SetErrorStatus(itemtype IN VARCHAR2,
1095                          itemkey  IN VARCHAR2,
1096                          actid    IN NUMBER)
1097 IS
1098 
1099  l_error_itemtype  VARCHAR2(240);
1100  l_error_itemkey   VARCHAR2(240);
1101  l_OrderID         NUMBER;
1102  l_lineitemId      NUMBER ;
1103  l_WIInstanceID    NUMBER ;
1104  l_FAInstanceID    NUMBER ;
1105  l_order_count     NUMBER;
1106  l_line_count      NUMBER;
1107  l_pkg_count       NUMBER;
1108  l_workitem_count  NUMBER;
1109  l_fa_count        NUMBER;
1110  l_status          VARCHAR2(40);
1111  l_url             VARCHAR2(1000);
1112 
1113 BEGIN
1114      l_error_itemtype  := WF_ENGINE.GETITEMATTRTEXT(itemtype => SetErrorStatus.itemtype,
1115                                                       itemkey  => SetErrorStatus.itemkey,
1116                                                       aname    => 'ERROR_ITEM_TYPE');
1117 
1118      l_error_itemkey   := WF_ENGINE.GETITEMATTRTEXT(itemtype => SetErrorStatus.itemtype,
1119                                                       itemkey  => SetErrorStatus.itemkey,
1120                                                       aname    => 'ERROR_ITEM_KEY');
1121 
1122      l_status          := WF_ENGINE.GetActivityattrtext(itemtype =>SetErrorStatus.itemtype,
1123                                                         itemkey  =>SetErrorStatus.itemkey,
1124                                                         actid    =>SetErrorStatus.actid,
1125                                                         aname    =>'STATUS');
1126 
1127      l_order_count     := instr(l_error_itemkey,'MAIN') ;
1128      l_line_count      := instr(l_error_itemkey,'SVC') ;
1129      l_pkg_count       := instr(l_error_itemkey,'LINE');
1130      l_workitem_count  := instr(l_error_itemkey,'WI') ;
1131      l_fa_count        := instr(l_error_itemkey,'FA') ;
1132 
1133      IF l_order_count > 0 THEN
1134         l_OrderID := WF_ENGINE.GETITEMATTRNUMBER(itemtype => l_error_itemtype,
1135                                                  itemkey  => l_error_itemkey,
1136                                                  aname    => 'ORDER_ID');
1137         UPDATE_XDP_ORDER_STATUS(l_status,l_orderID );
1138 
1139      ELSIF (l_line_count > 0 OR l_pkg_count > 0  )  THEN
1140            l_lineitemId := WF_ENGINE.GETITEMATTRNUMBER(itemtype => l_error_itemtype,
1141                                                        itemkey  => l_error_itemkey,
1142                                                        aname    => 'LINE_ITEM_ID');
1143            UPDATE_XDP_ORDER_LINE_STATUS(l_status,l_lineitemID);
1144 
1145      ELSIF (l_workitem_count > 0 AND l_fa_count = 0) THEN
1146 
1147            l_OrderID := WF_ENGINE.GETITEMATTRNUMBER(itemtype => l_error_itemtype,
1148                                                  itemkey  => l_error_itemkey,
1149                                                  aname    => 'ORDER_ID');
1150 
1151            l_WIInstanceID := wf_engine.GetItemAttrNumber(itemtype => l_error_itemtype,
1152                                                          itemkey  => l_error_itemkey,
1153                                                          aname    => 'WORKITEM_INSTANCE_ID');
1154 
1155            UPDATE_XDP_WORKITEM_STATUS(l_status,l_WIInstanceID);
1156 
1157            XDP_NOTIFICATIONS.Get_WI_Update_URL(l_WIInstanceID,
1158                                                l_OrderID,
1159                                                itemtype,
1160                                                itemKey,
1161                                                l_url);
1162            --10/04/2002 HBCHUNG
1163            --setting Notification URL
1164            wf_engine.SetItemAttrText(itemtype => itemtype,
1165                                       itemkey => itemkey,
1166                                         aname => 'ERROR_WI_UPDATE_URL',
1167                                        avalue => l_url);
1168 
1169 
1170 
1171      ELSIF l_fa_count > 0 THEN
1172            l_FAInstanceID := wf_engine.GetItemAttrNumber(itemtype => l_error_itemtype,
1173                                                          itemkey  => l_error_itemkey,
1174                                                          aname    => 'FA_INSTANCE_ID');
1175            UPDATE_XDP_FA_STATUS(l_status,l_FAInstanceID);
1176      END IF;
1177 
1178 EXCEPTION
1179      WHEN others THEN
1180           wf_core.context('XDPSTATUS', 'SetErrorStatus', itemtype, itemkey, null,null);
1181           RAISE;
1182 END SetErrorStatus;
1183 
1184 PROCEDURE SETORDERSTATUS(itemtype IN VARCHAR2,
1185                          itemkey IN VARCHAR2)
1186 IS
1187  l_OrderID        NUMBER;
1188  l_WorkitemStatus VARCHAR2(30);
1189  l_Status         VARCHAR2(30);
1190  l_AbortCount     NUMBER := 0;
1191  l_ErrorCount     NUMBER := 0;
1192  l_overridecount  NUMBER :=  0;
1193  l_Counter        NUMBER := 0;
1194  l_status_code    VARCHAR2(30);
1195 
1196  CURSOR c_getlines(orderid NUMBER) IS
1197   SELECT status_code
1198   FROM xdp_order_line_items
1199   WHERE order_id = orderid ;
1200 
1201 BEGIN
1202 
1203  l_OrderID := WF_ENGINE.GETITEMATTRNUMBER(itemtype => SetOrderStatus.itemtype,
1204                                           itemkey  => SetOrderStatus.itemkey,
1205                                           aname    => 'ORDER_ID');
1206 
1207 
1208   IF c_GetLines%ISOPEN THEN
1209      CLOSE c_GetLines;
1210   END IF;
1211 
1212 
1213   OPEN c_GetLines(l_OrderID);
1214 
1215   LOOP
1216     FETCH c_GetLines INTO l_Status;
1217     EXIT WHEN c_GetLines%NOTFOUND;
1218 
1219      l_Counter := l_Counter + 1;
1220 
1221      IF l_Status = 'ERROR' THEN
1222         l_ErrorCount := l_ErrorCount + 1;
1223      END IF;
1224 
1225      IF l_Status = 'ABORTED' THEN
1226         l_AbortCount := l_AbortCount + 1;
1227      END IF;
1228 
1229      IF l_Status = 'SUCCESS_WITH_OVERRIDE' THEN
1230         l_overridecount := l_overridecount + 1;
1231      END IF;
1232 
1233   END LOOP;
1234 
1235     IF  l_ErrorCount > 0 THEN
1236 
1237         UPDATE_XDP_ORDER_STATUS('ERROR' , l_orderid );
1238 
1239     ELSIF l_overridecount > 0 THEN
1240 
1241           UPDATE_XDP_ORDER_STATUS('SUCCESS_WITH_OVERRIDE' , l_orderid );
1242 
1243     ELSIF l_AbortCount > 0 AND l_Counter = l_AbortCount THEN
1244 
1245           UPDATE_XDP_ORDER_STATUS('ABORTED' , l_orderid );
1246           XDP_ENGINE.Set_Order_Param_Value(l_orderid,'FULFILLMENT_STATUS','ABORTED');
1247     ELSE
1248         UPDATE_XDP_ORDER_STATUS('SUCCESS' , l_orderid );
1249 
1250     END IF;
1251 
1252  COMMIT;
1253 EXCEPTION
1254 WHEN others THEN
1255      wf_core.context('XDPSTATUS', 'SetOrderStatus', itemtype, itemkey, null,null);
1256      RAISE;
1257 END SetOrderStatus;
1258 
1259 
1260 
1261 PROCEDURE SendOrderStatus(itemtype in varchar2,
1262                          itemkey in varchar2,
1263                          actid in number)
1264 is
1265 
1266  l_OrderID number;
1267 
1268  l_Message varchar2(80);
1269  l_SendFlag varchar2(10);
1270 
1271 begin
1272 
1273  l_SendFlag :=  wf_engine.GetActivityAttrText( itemtype => SendOrderStatus.itemtype,
1274                                                 itemkey => SendOrderStatus.itemkey,
1275                                                 actid => SendOrderStatus.actid,
1276                                                 aname => 'SEND_FLAG');
1277 
1278  /* Only if the SEND_FLAG is set to 'Y' will the message be sent */
1279 
1280  if l_SendFlag = 'Y' then
1281 
1282       l_OrderID := wf_engine.GetItemAttrNumber(itemtype => SendOrderStatus.itemtype,
1283                                              itemkey => SendOrderStatus.itemkey,
1284                                              aname => 'ORDER_ID');
1285 
1286       /* Enqueue into the Outboud Queue with the appropriate message */
1287       l_Message :=  wf_engine.GetActivityAttrText( itemtype => SendOrderStatus.itemtype,
1288                                                    itemkey => SendOrderStatus.itemkey,
1289                                                    actid => SendOrderStatus.actid,
1290                                                    aname => 'MESSAGE');
1291 
1292       if l_Message is null then
1293           l_Message := 'ORDER_STATUS';
1294       end if;
1295 
1296       /* Enqueue into the Outbound queue */
1297 
1298        /*
1299           SDP_AQ_UTILITIES.Enqeuee....
1300        */
1301 
1302   end if;
1303 
1304 exception
1305 when others then
1306    wf_core.context('XDPSTATUS', 'SendOrderStatus', itemtype, itemkey, to_char(actid),null);
1307    raise;
1308 end SendOrderStatus;
1309 
1310 
1311 
1312 
1313 
1314 PROCEDURE SETWORKITEMSTATUS(itemtype IN VARCHAR2,
1315                             itemkey  IN VARCHAR2)
1316 IS
1317  l_WIInstanceID   NUMBER;
1318  l_dummy          NUMBER;
1319  l_Counter        NUMBER := 0;
1320  l_ErrorCount     NUMBER := 0;
1321  l_AbortCount     NUMBER := 0;
1322  l_RunningCount   NUMBER := 0;
1323  l_overridecount  NUMBER :=  0;
1324  l_status_code    VARCHAR2(30);
1325  l_Status         VARCHAR2(30);
1326  l_FAInstanceID   NUMBER;
1327 
1328 
1329  CURSOR c_GetFA(WIInstanceID NUMBER) IS
1330         SELECT STATUS_CODE,
1331                FA_INSTANCE_ID
1332           FROM XDP_FA_RUNTIME_LIST
1333          WHERE WORKITEM_INSTANCE_ID = WIInstanceID ;
1334 
1335 BEGIN
1336 
1337  l_WIInstanceID := wf_engine.GetItemAttrNumber(itemtype => SetWorkitemStatus.itemtype,
1338                                                itemkey => SetWorkitemStatus.itemkey,
1339                                                aname => 'WORKITEM_INSTANCE_ID');
1340 
1341 
1342  IF c_GetFA%ISOPEN THEN
1343     CLOSE c_GetFA;
1344  END IF;
1345 
1346  OPEN c_GetFA(l_WIInstanceID);
1347 
1348  LOOP
1349    FETCH c_GetFA
1350     INTO l_Status, l_FAInstanceID ;
1351     EXIT WHEN c_GetFA%NOTFOUND;
1352      l_Counter := l_Counter + 1;
1353      IF l_Status = 'ERROR' THEN
1354         l_ErrorCount := l_ErrorCount + 1;
1355      END IF;
1356 
1357      IF l_Status = 'ABORTED' THEN
1358         l_AbortCount := l_AbortCount + 1;
1359      END IF;
1360 
1361      IF l_Status = 'SUCCESS_WITH_OVERRIDE' THEN
1362         l_overridecount := l_overridecount + 1;
1363      END IF;
1364 
1365  END LOOP;
1366 
1367  CLOSE c_GetFA;
1368 
1369             IF  l_ErrorCount > 0 then
1370 
1371                 UPDATE_XDP_WORKITEM_STATUS('ERROR' , l_WIInstanceid );
1372 
1373             ELSIF  l_overridecount > 0 then
1374 
1375                 UPDATE_XDP_WORKITEM_STATUS('SUCCESS_WITH_OVERRIDE' , l_WIInstanceid );
1376 
1377             ELSIF l_AbortCount > 0  AND l_AbortCount = l_Counter then
1378 
1379                 UPDATE_XDP_WORKITEM_STATUS('ABORTED' , l_WIInstanceid );
1380 
1381             ELSE
1382                 UPDATE_XDP_WORKITEM_STATUS('SUCCESS' , l_WIInstanceid );
1383         END IF;
1384 
1385 EXCEPTION
1386      WHEN others THEN
1387           wf_core.context('XDPSTATUS', 'SetWorkitemStatus', itemtype, itemkey, null,null);
1388           RAISE;
1389 END SETWORKITEMSTATUS;
1390 
1391 
1392 
1393 PROCEDURE SetWIStatusSuccess (itemtype IN VARCHAR2,
1394                               itemkey  IN VARCHAR2)
1395 IS
1396  l_WIInstanceID NUMBER;
1397 BEGIN
1398 
1399  l_WIInstanceID := wf_engine.GetItemAttrNumber(itemtype => SetWIStatusSuccess.itemtype,
1400                                                itemkey  => SetWIStatusSuccess.itemkey,
1401                                                aname    => 'WORKITEM_INSTANCE_ID');
1402 
1403  UPDATE_XDP_WORKITEM_STATUS('SUCCESS' , l_WIInstanceID );
1404 
1405 EXCEPTION
1406      WHEN others THEN
1407           wf_core.context('XDPSTATUS', 'SetWIStatusSuccess', itemtype, itemkey, null,null);
1408           RAISE;
1409 END SetWIStatusSuccess;
1410 
1411 
1412 
1413 
1414 Procedure SendWorkitemStatus(itemtype in varchar2,
1415                          itemkey in varchar2,
1416                          actid in number)
1417 is
1418 
1419  l_OrderID number;
1420  l_WorkitemStatus varchar2(80);
1421  l_WIInstanceID number;
1422 
1423  l_Message varchar2(80);
1424  l_SendFlag varchar2(10);
1425 
1426 begin
1427 
1428  l_SendFlag :=  wf_engine.GetActivityAttrText( itemtype => SendWorkitemStatus.itemtype,
1429                                                 itemkey => SendWorkitemStatus.itemkey,
1430                                                 actid => SendWorkitemStatus.actid,
1431                                                 aname => 'SEND_FLAG');
1432 
1433 
1434  /* Only if the SEND_FLAG is 'Y' will  the message be sent */
1435 
1436  if l_SendFlag = 'Y' then
1437 
1438       l_OrderID := wf_engine.GetItemAttrNumber(itemtype => SendWorkitemStatus.itemtype,
1439                                                itemkey => SendWorkitemStatus.itemkey,
1440                                                aname => 'ORDER_ID');
1441 
1442       l_WIInstanceID := wf_engine.GetItemAttrNumber(itemtype => SendWorkitemStatus.itemtype,
1443                                                     itemkey => SendWorkitemStatus.itemkey,
1444                                                     aname => 'WORKITEM_INSTANCE_ID');
1445 
1446 
1447         /* Enqueue into the Outboud Queue with the appropriate message */
1448         l_Message :=  wf_engine.GetActivityAttrText( itemtype => SendWorkitemStatus.itemtype,
1449                                                      itemkey => SendWorkitemStatus.itemkey,
1450                                                      actid => SendWorkitemStatus.actid,
1451                                                      aname => 'MESSAGE');
1452 
1453         if l_Message is null then
1454             l_Message := 'WORKITEM_STATUS';
1455         end if;
1456 
1457         /* Enqueue into the Outbound queue */
1458 
1459          /*
1460             SDP_AQ_UTILITIES.Enqeuee....
1461          */
1462 
1463  end if;
1464 
1465 
1466 
1467 exception
1468 when others then
1469    wf_core.context('XDPSTATUS', 'SendWorkitemStatus', itemtype, itemkey, to_char(actid),null);
1470    raise;
1471 end SendWorkitemStatus;
1472 
1473 
1474 
1475 
1476 PROCEDURE SetFAStatus(itemtype IN VARCHAR2,
1477                       itemkey  IN VARCHAR2,
1478                       actid    IN NUMBER)
1479 IS
1480 
1481  l_FAStatus          VARCHAR2(80);
1482  l_FAInstanceID      NUMBER;
1483  l_WIInstanceID      NUMBER;
1484  l_OrderID           NUMBER;
1485  l_LineItemID        NUMBER;
1486  l_ResubmissionJobID NUMBER;
1487  ErrCode             NUMBER;
1488  ErrStr              VARCHAR(2000);
1489  l_Event             VARCHAR2(80);
1490  l_ProvMode          VARCHAR2(80);
1491  x_progress          VARCHAR2(2000);
1492 
1493  e_SetFAStatusException EXCEPTION;
1494 
1495 BEGIN
1496 
1497  l_FAInstanceID := wf_engine.GetItemAttrNumber(itemtype => SetFAStatus.itemtype,
1498                                                itemkey => SetFAStatus.itemkey,
1499                                                aname => 'FA_INSTANCE_ID');
1500 
1501  l_OrderID := wf_engine.GetItemAttrNumber(itemtype => SetFAStatus.itemtype,
1502                                                itemkey => SetFAStatus.itemkey,
1503                                                aname => 'ORDER_ID');
1504 
1505  l_WIInstanceID := wf_engine.GetItemAttrNumber(itemtype => SetFAStatus.itemtype,
1506                                                itemkey => SetFAStatus.itemkey,
1507                                                aname => 'WORKITEM_INSTANCE_ID');
1508 
1509  l_LineItemID := wf_engine.GetItemAttrNumber(itemtype => SetFAStatus.itemtype,
1510                                                itemkey => SetFAStatus.itemkey,
1511                                                aname => 'LINE_ITEM_ID');
1512 
1513    l_FAStatus := wf_engine.GetActivityAttrText( itemtype => SetFAStatus.itemtype,
1514                                                 itemkey => SetFAStatus.itemkey,
1515                                                 actid => SetFAStatus.actid,
1516                                                 aname => 'FA_STATUS');
1517 
1518    l_ResubmissionJobID := GetResubmissionJobID(itemtype => SetFAStatus.itemtype,
1519                                               itemkey => SetFAStatus.itemkey);
1520 
1521    l_Event := wf_engine.GetActivityAttrText( itemtype => SetFAStatus.itemtype,
1522                                                 itemkey => SetFAStatus.itemkey,
1523                                                 actid => SetFAStatus.actid,
1524                                                 aname => 'NOTIF_RESPONSE');
1525 
1526   /* Check if the FA is aborted. If so set the status of execution and abort yourself*/
1527 
1528   IF XDPCORE_FA.IsFAAborted(l_FAInstanceID) = TRUE THEN
1529 
1530      UPDATE_XDP_FA_STATUS(l_FAStatus,l_FAInstanceID);
1531 
1532       wf_engine.AbortProcess(itemtype => SetFAStatus.itemtype,
1533                              itemkey => SetFAStatus.itemkey);
1534 
1535       return;
1536   else
1537      /*
1538      ** If the Processing of the FA is Order Resubmission Only the FA Status is to be updated
1539      ** The complete Order status/state logic is to be ignored
1540      */
1541 
1542      IF l_ResubmissionJobID <>0 THEN
1543         SetFActionStatus(l_OrderID, l_LineItemID, l_WIInstanceID, l_FAInstanceID, 'FA_RE_EXECUTION', l_Event, 'FA_'||l_FAStatus, SetFAStatus.itemtype,SetFAStatus.itemkey,ErrCode, ErrStr);
1544      ELSE
1545         SetFActionStatus(l_OrderID, l_LineItemID, l_WIInstanceID, l_FAInstanceID, 'FA_EXECUTION', l_Event, 'FA_'||l_FAStatus, SetFAStatus.itemtype,SetFAStatus.itemkey,ErrCode, ErrStr);
1546      END IF;
1547 
1548      IF ErrCode <>0 THEN
1549         x_progress := 'In XDP_STATUS.SetFActionStatus. Error when updating status. Error: ' || SUBSTR(ErrStr, 1, 1500);
1550         RAISE e_SetFAStatusException;
1551      END IF;
1552 
1553  END If;
1554 
1555 
1556 EXCEPTION
1557      WHEN e_SetFAStatusException THEN
1558           wf_core.context('XDPSTATUS', 'SetFAStatus', itemtype, itemkey, to_char(actid), x_progress);
1559           RAISE;
1560      WHEN others THEN
1561         wf_core.context('XDPSTATUS', 'SetFAStatus', itemtype, itemkey, to_char(actid),null);
1562         RAISE;
1563 END SetFAStatus;
1564 
1565 
1566 
1567 Procedure SetFeExecStatus(itemtype in varchar2,
1568                           itemkey in varchar2)
1569 is
1570 begin
1571 
1572  null;
1573 
1574 exception
1575 when others then
1576    wf_core.context('XDPSTATUS', 'SetFeExecStatus', itemtype, itemkey, null,null);
1577    raise;
1578 end SetFeExecStatus;
1579 
1580 
1581 
1582 
1583 Procedure SendFeProvStatus(itemtype in varchar2,
1584                            itemkey in varchar2,
1585                            actid in number)
1586 
1587 is
1588 
1589  l_OrderID number;
1590  l_WIInstanceID number;
1591  l_FAInstanceID number;
1592  l_dummy1 number;
1593 
1594  l_FaCaller varchar2(10);
1595  l_ErrCode number;
1596  l_ErrDescription varchar2(800);
1597 
1598  l_Message varchar2(80);
1599  l_SendFlag varchar2(10);
1600  l_FeExecStatus varchar2(40);
1601  l_FAStatus varchar2(40);
1602 
1603  cursor cur_fa_status( cp_FAInstanceID in VARCHAR2 ) IS
1604  SELECT status_code
1605    FROM xdp_fa_runtime_list
1606   WHERE fa_instance_id = cp_FAInstanceID;
1607 
1608  e_SendMessageException exception;
1609 
1610  x_progress varchar2(2000);
1611 
1612 begin
1613 
1614   l_FAInstanceID := wf_engine.GetItemAttrNumber(itemtype => SendFeProvStatus.itemtype,
1615                                                 itemkey => SendFeProvStatus.itemkey,
1616                                                 aname => 'FA_INSTANCE_ID');
1617 
1618   --From now on we will get this from runtime table.
1619   --Before we are doing it using Activity Attribute..
1620   FOR lv_fa_rec in cur_fa_status( l_FAInstanceID ) LOOP
1621     l_FeExecStatus :=  lv_fa_rec.STATUS_CODE;
1622   END LOOP;
1623 
1624   -- We reach this node only when the FA is success or
1625   -- Aborted. In Success with override case we have to publish
1626   -- this as SUCCESS case only, then only the user defined
1627   -- workflows will go thru as there will be either
1628   -- SUCCESS or ABORTED  transitions..
1629   IF l_FeExecStatus <> 'ABORTED' THEN
1630     l_FeExecStatus := 'SUCCESS';
1631   END IF;
1632 
1633   /* Check if the FA is aborted. If so set the status of execution and abort yourself*/
1634 
1635   if XDPCORE_FA.IsFAAborted(l_FAInstanceID) = TRUE then
1636 
1637      UPDATE_XDP_FA_STATUS(l_FeExecStatus,l_FAInstanceID);
1638 
1639       wf_engine.AbortProcess(itemtype => SendFeProvStatus.itemtype,
1640                              itemkey => SendFeProvStatus.itemkey);
1641 
1642   else
1643 
1644      l_SendFlag :=  wf_engine.GetActivityAttrText( itemtype => SendFeProvStatus.itemtype,
1645                                                    itemkey => SendFeProvStatus.itemkey,
1646                                                    actid => SendFeProvStatus.actid,
1647                                                    aname => 'SEND_FLAG');
1648 
1649      /* Only if the Send Flag has been set to be 'Y' the message will be sent */
1650      if l_SendFlag = 'Y' then
1651 
1652         l_WIInstanceID := wf_engine.GetItemAttrNumber(itemtype => SendFeProvStatus.itemtype,
1653                                                       itemkey => SendFeProvStatus.itemkey,
1654                                                       aname => 'WORKITEM_INSTANCE_ID');
1655 
1656 
1657 
1658         l_OrderID := wf_engine.GetItemAttrNumber(itemtype => SendFeProvStatus.itemtype,
1659                                                  itemkey => SendFeProvStatus.itemkey,
1660                                                  aname => 'ORDER_ID');
1661 
1662 
1663         l_Message :=  wf_engine.GetActivityAttrText( itemtype => SendFeProvStatus.itemtype,
1664                                                      itemkey => SendFeProvStatus.itemkey,
1665                                                      actid => SendFeProvStatus.actid,
1666                                                      aname => 'MESSAGE');
1667 
1668            if l_Message is null then
1669                l_Message := 'FE_EXEC_DONE';
1670            end if;
1671 
1672            -- if defined publish the status that user wants..
1673            -- bug fix 2617807. In case user is not publishing the FA_STATUS(ER#2350281)
1674            -- catch 1403 and ignore..
1675            BEGIN
1676              l_FAStatus := xdp_engine.get_fa_param_value( l_FAInstanceID, 'FA_STATUS' );
1677            EXCEPTION
1678              WHEN NO_DATA_FOUND THEN
1679                NULL;
1680              WHEN OTHERS THEN
1681               RAISE;
1682            END;
1683            IF( l_FAStatus is NOT NULL ) THEN
1684              l_FeExecStatus := l_FAStatus;
1685            END IF;
1686 
1687            /* Enqueue into the Message into event manager queue */
1688 
1689             XNP_FA_DONE_U.Publish(XNP$SDP_RESULT_CODE => l_FeExecStatus,
1690                             X_MESSAGE_ID => l_dummy1,
1691                             X_ERROR_CODE => l_ErrCode,
1692                             X_ERROR_MESSAGE =>l_ErrDescription,
1693                             P_CONSUMER_LIST => null,
1694                             P_SENDER_NAME  => null,
1695                             P_RECIPIENT_LIST => null,
1696                             P_VERSION   => null,
1697                             P_REFERENCE_ID => l_FAInstanceID,
1698                             P_OPP_REFERENCE_ID => null,
1699                             P_ORDER_ID   => l_OrderID,
1700                             P_WI_INSTANCE_ID  => l_WIInstanceID,
1701                             P_FA_INSTANCE_ID=> l_FAInstanceID);
1702 
1703             if l_ErrCode <> 0 then
1704                x_progress := 'Error when trying to send FA_DONE Message. Code: ' ||
1705                               to_char(l_ErrCode) || ' Error String: ' ||
1706                               substr(l_ErrDescription, 1, 1000);
1707                Raise e_SendMessageException;
1708             end if;
1709 
1710        end if;
1711   end if;
1712 
1713 exception
1714 when e_SendMessageException then
1715    wf_core.context('XDPSTATUS', 'SendFeProvStatus', itemtype, itemkey, to_char(actid), x_progress);
1716    raise;
1717 when others then
1718    wf_core.context('XDPSTATUS', 'SendFeProvStatus', itemtype, itemkey, to_char(actid),null);
1719    raise;
1720 end SendFeProvStatus;
1721 
1722 
1723 PROCEDURE UpdateFAStatus( faid     IN NUMBER,
1724                           status   IN VARCHAR2,
1725                           provmode IN VARCHAR2)
1726 IS
1727 l_status_code   VARCHAR2(30);
1728 
1729 BEGIN
1730  IF status = 'SUCCESS' THEN
1731 
1732   /*
1733    * FA Execution is successful
1734    */
1735 
1736  /* The FA was retried and then success ful hence the status should be SUCCESS_WITH_OVERRIDE */
1737 
1738     IF provmode = 'RETRY' THEN
1739 
1740        UPDATE_XDP_FA_STATUS('SUCCESS_WITH_OVERRIDE' , faid) ;
1741     ELSE
1742        UPDATE_XDP_FA_STATUS('SUCCESS' , faid) ;
1743     END IF;
1744 
1745  ELSE
1746        UPDATE_XDP_FA_STATUS('SUCCESS' , faid) ;
1747 
1748  END IF;
1749 
1750 EXCEPTION
1751      WHEN others THEN
1752           wf_core.context('XDPSTATUS', 'UpdateFAStatus', null, null, null,null);
1753           RAISE;
1754 END UpdateFAStatus;
1755 
1756 
1757 Procedure SendLineStatus(itemtype in varchar2,
1758                          itemkey in varchar2,
1759                          actid in number)
1760 is
1761 
1762 begin
1763    null;
1764 
1765 exception
1766 when others then
1767    wf_core.context('XDPSTATUS', 'SendLineStatus', null, null, null,null);
1768    raise;
1769 end SendLineStatus;
1770 
1771 
1772 Procedure SetBundleStatus (itemtype in varchar2,
1773                            itemkey in varchar2)
1774 is
1775 
1776 begin
1777    null;
1778 
1779 exception
1780 when others then
1781    wf_core.context('XDPSTATUS', 'SetBundleStatus', null, null, null,null);
1782    raise;
1783 end SetBundleStatus;
1784 
1785 
1786 PROCEDURE SetLineStatus (itemtype IN VARCHAR2,
1787                          itemkey  IN VARCHAR2)
1788 IS
1789 
1790  l_LineItemID       NUMBER;
1791  l_WIInstanceID     NUMBER;
1792  l_OrderID          NUMBER;
1793  l_dummy            NUMBER;
1794  l_ErrorCount       NUMBER := 0;
1795  l_AbortCount       NUMBER := 0;
1796  l_Counter          NUMBER := 0;
1797  l_overridecount    NUMBER := 0;
1798  l_Status           VARCHAR2(40);
1799  l_Status_code      VARCHAR2(40);
1800 
1801 
1802  CURSOR c_GetWI(OrderID number, LineItemID number) IS
1803         SELECT STATUS_CODE,
1804                WORKITEM_INSTANCE_ID
1805           FROM XDP_FULFILL_WORKLIST
1806          WHERE ORDER_ID     = OrderID
1807            AND LINE_ITEM_ID = LineItemID ;
1808 
1809 BEGIN
1810 
1811  l_OrderID := wf_engine.GetItemAttrNumber(itemtype => SetLineStatus.itemtype,
1812                                           itemkey => SetLineStatus.itemkey,
1813                                           aname => 'ORDER_ID');
1814 
1815  l_LineItemID := wf_engine.GetItemAttrNumber(itemtype => SetLineStatus.itemtype,
1816                                              itemkey => SetLineStatus.itemkey,
1817                                              aname => 'LINE_ITEM_ID');
1818 
1819  IF c_GetWI%ISOPEN THEN
1820     CLOSE c_GetWI;
1821  END IF;
1822 
1823  OPEN c_GetWI(l_OrderID, l_LineItemID);
1824 
1825  LOOP
1826    FETCH c_GetWI INTO l_Status, l_WIInstanceID;
1827     EXIT WHEN c_GetWI%NOTFOUND;
1828 
1829      l_Counter := l_Counter + 1;
1830 
1831      IF l_Status = 'ERROR' THEN
1832         l_ErrorCount := l_ErrorCount + 1;
1833      END IF;
1834 
1835      IF l_status = 'SUCCESS_WITH_OVERRIDE' THEN
1836         l_overridecount := l_overridecount + 1 ;
1837      END IF ;
1838 
1839      IF l_Status = 'ABORTED' THEN
1840         l_AbortCount := l_AbortCount + 1;
1841      END IF;
1842 
1843  END LOOP;
1844 
1845  CLOSE c_GetWI;
1846 
1847  IF  l_ErrorCount > 0 THEN
1848      UPDATE_XDP_ORDER_LINE_STATUS('ERROR' ,  l_lineitemid );
1849 
1850  ELSIF l_AbortCount > 0  AND  l_Counter = l_AbortCount THEN
1851      UPDATE_XDP_ORDER_LINE_STATUS('ABORTED' ,  l_lineitemid );
1852 
1853  ELSIF l_overridecount > 0 THEN
1854      UPDATE_XDP_ORDER_LINE_STATUS('SUCCESS_WITH_OVERRIDE' , l_lineitemid );
1855 
1856  ELSE
1857      UPDATE_XDP_ORDER_LINE_STATUS('SUCCESS' ,  l_lineitemid );
1858 
1859  END IF;
1860 
1861 EXCEPTION
1862      WHEN others THEN
1863           wf_core.context('XDPSTATUS', 'SetLineStatus', null, null, null,null);
1864           RAISE;
1865 END SetLineStatus;
1866 
1867 
1868 
1869 Procedure SetPackageStatus (itemtype in varchar2,
1870                          itemkey in varchar2)
1871 is
1872 
1873 begin
1874    null;
1875 
1876 exception
1877 when others then
1878    wf_core.context('XDPSTATUS', 'SetPackageStatus', null, null, null,null);
1879    raise;
1880 end SetPackageStatus;
1881 
1882 
1883 Procedure SaveWorkitem (itemtype in varchar2,
1884                         itemkey in varchar2,
1885                         actid in number)
1886 IS
1887  l_WIInstanceID number;
1888 
1889  l_Status varchar2(40);
1890 
1891 BEGIN
1892 
1893 
1894   l_Status :=  wf_engine.GetActivityAttrText( itemtype => SaveWorkitem.itemtype,
1895                                               itemkey => SaveWorkitem.itemkey,
1896                                               actid => SaveWorkitem.actid,
1897                                               aname => 'WORKITEM_STATUS');
1898 
1899   l_WIInstanceID := wf_engine.GetItemAttrNumber(itemtype => SaveWorkitem.itemtype,
1900                                                 itemkey => SaveWorkitem.itemkey,
1901                                                 aname => 'WORKITEM_INSTANCE_ID');
1902 
1903   UPDATE_XDP_WORKITEM_STATUS(l_Status, l_WIINstanceID);
1904 
1905 EXCEPTION
1906      WHEN others THEN
1907         wf_core.context('XDPSTATUS', 'SaveWorkitem', itemtype, itemkey, to_char(actid), null);
1908         raise;
1909 END SaveWorkitem;
1910 
1911 
1912 Procedure SetFActionStatus (OrderID            IN NUMBER,
1913                             LineItemID         IN NUMBER,
1914                             WorkitemInstanceID IN NUMBER,
1915                             FAInstanceID       IN NUMBER,
1916                             Caller             IN VARCHAR2,
1917                             Event              IN VARCHAR2,
1918                             Status             IN VARCHAR2,
1919                             ItemType           IN VARCHAR2,
1920                             Itemkey            IN VARCHAR2,
1921                             ErrCode           OUT NOCOPY NUMBER,
1922                             ErrStr            OUT NOCOPY VARCHAR2)
1923 IS
1924  x_progress VARCHAR2(2000);
1925 
1926 BEGIN
1927 
1928  IF Caller = 'FA_EXECUTION' THEN
1929 
1930        IF Status = 'FA_ERROR' AND Event IS null THEN
1931           /* Set the Status of the FA just to be Error */
1932           SetStatusForFA(FAInstanceID, 'ERROR', null);
1933 --          SetStatusForWI(WorkitemInstanceID, 'ERROR', null);
1934 --          SetStatusForLine(OrderID, WorkitemInstanceID, LineItemID, 'ERROR', null);
1935 --          SetStatusForOrder(OrderID, 'ERROR', null);
1936        ELSIF Event = 'CONTINUE_FA_PROCESSING' THEN
1937           /* The Caller had done a Continue from the FMC */
1938           SetStatusForFA(FAInstanceID, 'SUCCESS_WITH_OVERRIDE', 'CONTINUE_FA_PROCESSING');
1939 --          SetStatusForWI(WorkitemInstanceID, 'SUCCESS', null);
1940 --          SetStatusForLine(OrderID, WorkitemInstanceID, LineItemID, 'SUCCESS', null);
1941 --          SetStatusForOrder(OrderID, 'SUCCESS', null);
1942        ELSIF Event = 'STOP_FA_PROCESSING' THEN
1943           /* User selected Abort FA Processing from FMC */
1944           SetStatusForFA(FAInstanceID, 'ABORTED', 'STOP_FA_PROCESSING');
1945 --          SetStatusForWI(WorkitemInstanceID, 'SUCCESS', null);
1946 --          SetStatusForLine(OrderID, WorkitemInstanceID, LineItemID, 'SUCCESS', null);
1947 --          SetStatusForOrder(OrderID, 'SUCCESS', null);
1948        ELSIF Status = 'FA_SUCCESS' THEN
1949           SetStatusForFA(FAInstanceID, 'SUCCESS', null);
1950 --          SetStatusForWI(WorkitemInstanceID, 'SUCCESS', null);
1951 --          SetStatusForLine(OrderID, WorkitemInstanceID, LineItemID, 'SUCCESS', null);
1952 --          SetStatusForOrder(OrderID, 'SUCCESS', null);
1953        ELSIF Status = 'FA_IN_PROGRESS' THEN
1954           SetStatusForFA(FAInstanceID,'IN_PROGRESS',null);
1955        ELSIF Status = 'FA_SYSTEM_HOLD' THEN
1956           SetStatusForFA(FAInstanceID,'SYSTEM_HOLD',null);
1957        END IF;
1958  ELSIF Caller = 'FA_RE_EXECUTION' THEN
1959        IF Status = 'FA_ERROR' AND Event IS null THEN
1960           /* Set the Status of the FA just to be Error */
1961           SetStatusForFA(FAInstanceID, 'ERROR', null);
1962        ELSIF Event = 'CONTINUE_FA_PROCESSING' THEN
1963           /* The Caller had done a Continue from the FMC */
1964           SetStatusForFA(FAInstanceID, 'SUCCESS_WITH_OVERRIDE', 'CONTINUE_FA_PROCESSING');
1965        ELSIF Event = 'STOP_FA_PROCESSING' THEN
1966           /* User selected Abort FA Processing from FMC */
1967           SetStatusForFA(FAInstanceID, 'ABORTED', 'STOP_FA_PROCESSING');
1968        ELSIF Status = 'FA_SUCCESS' THEN
1969           SetStatusForFA(FAInstanceID, 'SUCCESS', null);
1970 --          SetStatusForWI(WorkitemInstanceID, 'SUCCESS', null);
1971 --          SetStatusForLine(OrderID, WorkitemInstanceID, LineItemID, 'SUCCESS', null);
1972 --          SetStatusForOrder(OrderID, 'SUCCESS', null);
1973        ELSIF Status = 'FA_IN_PROGRESS' THEN
1974           SetStatusForFA(FAInstanceID,'IN_PROGRESS',null);
1975        ELSIF Status = 'FA_SYSTEM_HOLD' THEN
1976           SetStatusForFA(FAInstanceID,'SYSTEM_HOLD',null);
1977        END IF;
1978  ELSIF Caller = 'API_EXEC' THEN
1979    null;
1980  END IF;
1981 
1982 EXCEPTION
1983      WHEN others THEN
1984           x_progress := 'In XDPSTATUS.SetFActionStatus. Unhandled Exception. Error: ' || SUBSTR(SQLERRM, 1, 1500);
1985           wf_core.context('XDPSTATUS', 'SetFActionStatus',itemtype, itemkey, null, x_progress);
1986           RAISE;
1987 END SetFActionStatus;
1988 
1989 
1990 
1991 
1992 
1993 
1994 PROCEDURE SetStatusForFA (FAInstanceID IN NUMBER,
1995                           Status       IN VARCHAR2,
1996                           Event        IN VARCHAR2)
1997 IS
1998 
1999  l_FAStatus       VARCHAR2(40);
2000  l_FAState        VARCHAR2(40);
2001  l_fA_status_code VARCHAR2(40);
2002 
2003  CURSOR c_GetFaStat IS
2004         SELECT Status_code
2005           FROM XDP_FA_RUNTIME_LIST
2006          WHERE FA_INSTANCE_ID = FAInstanceID;
2007 --         FOR UPDATE;
2008 
2009  x_progress VARCHAR2(2000);
2010 
2011  e_InvalidConfigException EXCEPTION;
2012 
2013 BEGIN
2014 
2015    OPEN c_GetFaStat;
2016    FETCH c_GetFaStat INTO l_FAStatus;
2017 
2018    IF c_GetFAStat%NOTFOUND THEN
2019       RAISE e_InvalidConfigException;
2020    END IF;
2021 
2022    IF Event is null  AND Status = 'ERROR' THEN
2023 
2024       UPDATE_XDP_FA_STATUS(status , FAInstanceId );
2025 
2026    ELSIF Event IS NULL AND Status = 'SUCCESS' THEN
2027      IF l_FAStatus = 'ERROR' THEN
2028 
2029         UPDATE_XDP_FA_STATUS('SUCCESS_WITH_OVERRIDE' , FAInstanceId );
2030 
2031      ELSE
2032       UPDATE_XDP_FA_STATUS('SUCCESS' , FAInstanceId );
2033 
2034      END IF;
2035 
2036    ELSIF Event = 'CONTINUE_FA_PROCESSING' THEN
2037       UPDATE_XDP_FA_STATUS(status , FAInstanceId );
2038 
2039    ELSIF Event = 'STOP_FA_PROCESSING' THEN
2040       UPDATE_XDP_FA_STATUS(status , FAInstanceId );
2041    ELSIF Status = 'IN_PROGRESS' THEN
2042       UPDATE_XDP_FA_STATUS('IN PROGRESS' , FAInstanceId );
2043    ELSIF Status = 'FA_SYSTEM_HOLD' THEN
2044       UPDATE_XDP_FA_STATUS('SYSTEM_HOLD' , FAInstanceId );
2045    END IF;
2046 
2047    CLOSE c_GetFAStat;
2048 
2049 EXCEPTION
2050      WHEN others THEN
2051           x_progress := 'In XDPSTATUS.SetStatusForFA. Unhandled Exception. Error: ' || SUBSTR(SQLERRM, 1,1500);
2052           wf_core.context('XDPSTATUS', 'SetStatusForFA', null, null, null, x_progress);
2053           RAISE;
2054 END SetStatusForFA;
2055 
2056 PROCEDURE SetStatusForWI (WorkitemInstanceID IN NUMBER,
2057                                 Status       IN VARCHAR2,
2058                                 Event        IN VARCHAR2)
2059 
2060 IS
2061  CURSOR c_GetWIStat IS
2062         SELECT Status_code
2063           FROM XDP_FULFILL_WORKLIST
2064          WHERE WORKITEM_INSTANCE_ID = WorkitemInstanceID;
2065 --           FOR UPDATE;
2066 
2067  CURSOR c_GetFA IS
2068         SELECT 1
2069           FROM XDP_FA_RUNTIME_LIST
2070          WHERE WORKITEM_INSTANCE_ID = WorkitemInstanceID
2071            AND STATUS_CODE          = 'ERROR' ;
2072 
2073 
2074  l_WIStatus VARCHAR2(40);
2075  l_WIState  VARCHAR2(40);
2076  l_FAStatus VARCHAR2(40);
2077 
2078 
2079  l_Counter         NUMBER  := 0 ;
2080  l_overridecounter NUMBER  := 0 ;
2081  x_progress        VARCHAR2(2000);
2082 
2083  e_InvalidConfigException EXCEPTION;
2084 
2085 BEGIN
2086 
2087    OPEN c_GetWIStat;
2088    FETCH c_GetWIStat into l_WIStatus;
2089 
2090    IF c_GetWIStat%NOTFOUND then
2091       RAISE e_InvalidConfigException;
2092    END IF;
2093 
2094 
2095    IF Event IS NULL AND status = 'ERROR' THEN
2096 
2097       UPDATE_XDP_WORKITEM_STATUS(Status,WorkitemInstanceID);
2098 
2099    ELSIF Event IS NULL AND Status = 'SUCCESS' THEN
2100 
2101       FOR v_GetFA in c_GetFA
2102           LOOP
2103                 l_Counter := l_Counter + 1;
2104           END LOOP;
2105 
2106       IF l_Counter = 0 THEN
2107 
2108          UPDATE_XDP_WORKITEM_STATUS('IN PROGRESS',workiteminstanceid);
2109 
2110       END IF;
2111 
2112    END IF;
2113 
2114    CLOSE c_GetWIStat;
2115 
2116 EXCEPTION
2117      WHEN others THEN
2118           IF c_GetWIStat%ISOPEN THEN
2119              CLOSE c_GetWIStat;
2120           END IF;
2121           wf_core.context('XDPSTATUS', 'SetStatusForWI', null, null, null, x_progress);
2122           RAISE;
2123 END SetStatusForWI;
2124 
2125 PROCEDURE SetStatusForLine ( OrderID           IN NUMBER,
2126                             WorkitemInstanceID IN NUMBER,
2127                             LineItemID         IN NUMBER,
2128                             Status             IN VARCHAR2,
2129                             Event              IN VARCHAR2)
2130 
2131 IS
2132  l_LineItemID NUMBER;
2133  CURSOR c_GetLineStat(LineID number) IS
2134         SELECT Status_code,
2135                IS_VIRTUAL_LINE_FLAG,
2136                NVL(BUNDLE_ID,-999)
2137           FROM XDP_ORDER_LINE_ITEMS
2138           WHERE LINE_ITEM_ID = LineID;
2139 --         FOR UPDATE;
2140 
2141  CURSOR c_GetLineID IS
2142    SELECT line_item_id
2143      FROM XDP_FULFILL_WORKLIST
2144     WHERE WOrkitem_instance_id = WorkitemInstanceID;
2145 
2146  CURSOR c_GetWI(LineID number) IS
2147         SELECT STATUS_CODE,
2148                WORKITEM_INSTANCE_ID
2149           FROM XDP_FULFILL_WORKLIST
2150          WHERE LINE_ITEM_ID = LineID
2151            AND STATUS_CODE  = 'ERROR';
2152 
2153  CURSOR c_GetPackagedLines(VirtualLine number) IS
2154         SELECT RELATED_LINE_ITEM_ID
2155           FROM XDP_LINE_RELATIONSHIPS
2156          WHERE LINE_ITEM_ID = VirtualLine
2157            AND LINE_RELATIONSHIP = 'IS_PART_OF_PACKAGE';
2158 
2159  CURSOR c_UpdatePackage(PackageLineID number) IS
2160        SELECT 1
2161          FROM XDP_ORDER_LINE_ITEMS
2162         WHERE LINE_ITEM_ID  = PackageLineID;
2163 --       FOR UPDATE;
2164 
2165  CURSOR c_GetPackagedLineStatus(VirtualLine number) IS
2166         SELECT XLR.RELATED_LINE_ITEM_ID,
2167                XOL.STATUS_CODE
2168           FROM XDP_LINE_RELATIONSHIPS XLR,
2169                XDP_ORDER_LINE_ITEMS XOL
2170          WHERE XLR.RELATED_LINE_ITEM_ID = (
2171                                     SELECT RELATED_LINE_ITEM_ID
2172                                       FROM XDP_LINE_RELATIONSHIPS
2173                                      WHERE LINE_ITEM_ID = VirtualLine)
2174            AND XLR.LINE_ITEM_ID = XOL.LINE_ITEM_ID
2175            AND XOL.IS_VIRTUAL_LINE_FLAG = 'Y';
2176 
2177  CURSOR c_GetBundledLines (LineItemID number, BundleID number) is
2178   SELECT LINE_ITEM_ID
2179    FROM XDP_ORDER_LINE_ITEMS
2180   WHERE LINE_ITEM_ID = LineItemID
2181     AND BUNDLE_ID = BundleID
2182     AND STATUS_CODE = 'ERROR';
2183 
2184  CURSOR C_UpdateBundleStatus(BundleID number) IS
2185         SELECT 1
2186           FROM XDP_ORDER_BUNDLES
2187          WHERE ORDER_ID = OrderID
2188            AND BUNDLE_ID = BundleID;
2189 --           FOR UPDATE;
2190 
2191 
2192  l_LineStatus    VARCHAR2(40);
2193  l_LineState     VARCHAR2(40);
2194  l_Counter       NUMBER := 0;
2195  l_BundleID      NUMBER;
2196  l_RelatedLineID NUMBER := 0;
2197  l_PackageStatus VARCHAR2(40);
2198  l_PkgCount      NUMBER := 0;
2199  l_BundleCount   NUMBEr := 0;
2200  l_IsVirtualLine VARCHAR2(2);
2201 
2202  x_progress      VARCHAR2(2000);
2203 
2204  e_InvalidConfigException exception;
2205 begin
2206 
2207   if LineItemID is null then
2208      Open c_GetLineID;
2209      Fetch c_GetLineID into l_LineItemID;
2210      close c_GetLineID;
2211   else
2212      l_LineItemID := LineItemID;
2213   end if;
2214 
2215 
2216    Open c_GetLineStat(l_LineItemID);
2217    Fetch c_GetLineStat
2218     INTO l_LineStatus,
2219          l_IsVirtualLine,
2220          l_BundleID;
2221 
2222    if c_GetLineStat%NOTFOUND then
2223       Raise e_InvalidConfigException;
2224    end if;
2225 
2226 
2227    if Event is null and Status = 'ERROR' then
2228 
2229       UPDATE_XDP_ORDER_LINE_STATUS(Status,l_LineItemID);
2230 
2231       if l_IsVirtualLine = 'Y' then
2232 
2233          FOR v_GetPackagedLine in c_GetPackagedLines(l_LineItemID) LOOP
2234              FOR v_UpdatePackageLine in c_UpdatePackage(v_GetPackagedLine.RELATED_LINE_ITEM_ID) LOOP
2235 
2236                  UPDATE_XDP_ORDER_LINE_STATUS(Status,v_GetPackagedLine.RELATED_LINE_ITEM_ID);
2237 
2238              END LOOP;
2239          END LOOP;
2240       end if;
2241 
2242       if l_BundleID <> -999 then
2243 
2244          UPDATE_XDP_ORDER_BUNDLE_STATUS('ERROR',OrderID,l_BundleID);
2245 
2246       end if;
2247 
2248 
2249    elsif Event is null and Status = 'SUCCESS' then
2250       FOR v_GetWI in c_GetWI(l_LineItemID) LOOP
2251         l_Counter := l_Counter + 1;
2252       END LOOP;
2253 
2254       if l_Counter = 0 then
2255 
2256          UPDATE_XDP_ORDER_LINE_STATUS('IN PROGRESS',l_LineItemID);
2257 
2258       end if;
2259 
2260       if l_IsVirtualLine = 'Y' then
2261          FOR v_GetPackagedLineStatus in c_GetPackagedLineStatus(l_LineItemID) LOOP
2262              l_RelatedLineID := v_GetPackagedLineStatus.RELATED_LINE_ITEM_ID;
2263              if v_GetPackagedLineStatus.STATUS_CODE = 'ERROR' THEN
2264                l_PkgCount := l_PkgCount + 1;
2265              end if;
2266          END LOOP;
2267 
2268          if l_PkgCount = 0 then
2269 
2270             UPDATE_XDP_ORDER_LINE_STATUS('IN PROGRESS',l_RelatedLineID);
2271          end if;
2272          if l_BundleID <> -999  then
2273             FOR v_GetBundlesLines in c_GetBundledLines(l_LineItemID, l_BundleID) LOOP
2274                l_BundleCount := l_BundleCount + 1;
2275             END LOOP;
2276 
2277             if l_PkgCount = 0 then
2278 
2279                UPDATE_XDP_ORDER_BUNDLE_STATUS('IN PROGRESS',OrderID,l_BundleID);
2280 
2281             end if;
2282          end if;
2283       end if;
2284    end if;
2285 
2286    close c_GetLineStat;
2287 
2288 exception
2289 when others then
2290   if c_GetLineStat%ISOPEN then
2291      close c_GetLineStat;
2292   end if;
2293 
2294   if c_GetLineID%ISOPEN then
2295      close c_GetLineID;
2296   end if;
2297 
2298   wf_core.context('XDPSTATUS', 'SetStatusForLine', null, null, null, x_progress);
2299   raise;
2300 end SetStatusForLine;
2301 
2302 
2303 Procedure SetStatusForOrder (OrderID in number,
2304                              Status in varchar2,
2305                              Event in varchar2)
2306 
2307 is
2308  cursor c_GetOrderStat is
2309   select Status_code
2310    from XDP_ORDER_HEADERS
2311    where ORDER_ID = OrderID;
2312 --  for update;
2313 
2314  cursor c_GetLines is
2315   select 1
2316   from XDP_ORDER_LINE_ITEMS
2317   where ORDER_ID = OrderID
2318     and STATUS_CODE = 'ERROR';
2319 
2320  l_OrderStatus varchar2(40);
2321  l_OrderState varchar2(40);
2322  l_Counter number := 0;
2323 
2324  x_progress varchar2(2000);
2325 
2326  e_InvalidConfigException exception;
2327 begin
2328 
2329    Open c_GetOrderStat;
2330    Fetch c_GetOrderStat
2331     INTO l_OrderStatus;
2332    if c_GetOrderStat%NOTFOUND then
2333       Raise e_InvalidConfigException;
2334    end if;
2335 
2336 
2337    if Event is null and Status = 'ERROR' then
2338 
2339       UPDATE_XDP_ORDER_STATUS(Status,orderID) ;
2340 
2341    elsif Event is null and Status = 'SUCCESS' then
2342       FOR v_GetLines in c_GetLines LOOP
2343           l_Counter := l_Counter + 1;
2344       END LOOP;
2345 
2346       if l_Counter = 0 then
2347 
2348          UPDATE_XDP_ORDER_STATUS('IN PROGRESS',orderID) ;
2349      end if;
2350    end if;
2351 
2352    close c_GetOrderStat;
2353 
2354 exception
2355 when others then
2356   if c_GetOrderStat%ISOPEN then
2357      close c_GetOrderStat;
2358   end if;
2359 
2360   wf_core.context('XDPSTATUS', 'SetStatusForOrder', null, null, null, x_progress);
2361   raise;
2362 end SetStatusForOrder;
2363 
2364 
2365 PROCEDURE UPDATE_XDP_ORDER_BUNDLE_STATUS(p_status    IN VARCHAR2,
2366                                          p_order_id  IN NUMBER,
2367                                          p_bundle_id IN NUMBER) IS
2368 PRAGMA AUTONOMOUS_TRANSACTION ;
2369 x_progress VARCHAR2(2000);
2370 
2371 BEGIN
2372          UPDATE xdp_order_bundles
2373             SET status            = p_status,
2374                 last_update_date  = sysdate,
2375                 last_updated_by   = fnd_global.user_id,
2376                 last_update_login = fnd_global.login_id
2377           WHERE order_id  = p_order_id
2378             AND bundle_id = p_bundle_id ;
2379 COMMIT;
2380 
2381 EXCEPTION
2382      WHEN others THEN
2383           wf_core.context('XDPSTATUS', 'UPDATE_XDP_ORDER_STATUS', null, null, null, x_progress);
2384           ROLLBACK;
2385           RAISE ;
2386 
2387 END UPDATE_XDP_ORDER_BUNDLE_STATUS ;
2388 
2389 
2390 
2391 PROCEDURE UPDATE_XDP_ORDER_STATUS(p_status   IN VARCHAR2,
2392                                   p_order_id IN NUMBER) IS
2393 PRAGMA AUTONOMOUS_TRANSACTION ;
2394 x_progress VARCHAR2(2000);
2395 
2396 BEGIN
2397    IF p_status IN ('SUCCESS_WITH_OVERRIDE','ABORTED','SUCCESS') THEN
2398 
2399      UPDATE xdp_order_headers
2400         SET status_code       = p_status ,
2401             completion_date   = sysdate ,
2402             last_update_date  = sysdate,
2403             last_updated_by   = fnd_global.user_id,
2404             last_update_login = fnd_global.login_id
2405       WHERE order_id          = p_order_id ;
2406    ELSE
2407      UPDATE xdp_order_headers
2408         SET status_code       = p_status ,
2409             last_update_date  = sysdate,
2410             last_updated_by   = fnd_global.user_id,
2411             last_update_login = fnd_global.login_id
2412       WHERE order_id          = p_order_id ;
2413 
2414    END IF ;
2415 
2416 COMMIT;
2417 
2418 EXCEPTION
2419      WHEN others THEN
2420           wf_core.context('XDPSTATUS', 'UPDATE_XDP_ORDER_STATUS', null, null, null, x_progress);
2421           ROLLBACK;
2422           RAISE ;
2423 END UPDATE_XDP_ORDER_STATUS;
2424 
2425 
2426 
2427 PROCEDURE UPDATE_XDP_ORDER_LINE_STATUS(p_status   IN VARCHAR2,
2428                                        p_line_item_id IN NUMBER)IS
2429 PRAGMA AUTONOMOUS_TRANSACTION ;
2430 x_progress VARCHAR2(2000);
2431 
2432 
2433 BEGIN
2434   IF p_status IN ('IN PROGRESS','ERROR') THEN
2435 
2436      UPDATE xdp_order_line_items
2437         SET status_code       = p_status ,
2438             last_update_date  = sysdate,
2439             last_updated_by   = fnd_global.user_id,
2440             last_update_login = fnd_global.login_id
2441       WHERE line_item_id = p_line_item_id ;
2442   ELSE
2443      UPDATE xdp_order_line_items
2444         SET status_code       = p_status ,
2445             completion_date   = sysdate ,
2446             last_update_date  = sysdate,
2447             last_updated_by   = fnd_global.user_id,
2448             last_update_login = fnd_global.login_id
2449       WHERE line_item_id = p_line_item_id ;
2450   END IF ;
2451 
2452 COMMIT;
2453 
2454 EXCEPTION
2455      WHEN others THEN
2456           wf_core.context('XDPSTATUS', 'UPDATE_XDP_ORDER_LINE_STATUS', null, null, null, x_progress);
2457           ROLLBACK;
2458           RAISE ;
2459 END UPDATE_XDP_ORDER_LINE_STATUS;
2460 
2461 
2462 
2463 PROCEDURE UPDATE_XDP_WORKITEM_STATUS(p_status               IN VARCHAR2,
2464                                      p_workitem_instance_id IN NUMBER)IS
2465 PRAGMA AUTONOMOUS_TRANSACTION ;
2466 x_progress VARCHAR2(2000);
2467 
2468 
2469 BEGIN
2470   IF p_status IN ('IN PROGRESS','ERROR') THEN
2471 
2472      UPDATE xdp_fulfill_worklist
2473         SET status_code       = p_status ,
2474             last_update_date  = sysdate,
2475             last_updated_by   = fnd_global.user_id,
2476             last_update_login = fnd_global.login_id
2477       WHERE workitem_instance_id = p_workitem_instance_id ;
2478   ELSE
2479      UPDATE xdp_fulfill_worklist
2480         SET status_code       = p_status ,
2481             completion_date   = sysdate ,
2482             last_update_date  = sysdate,
2483             last_updated_by   = fnd_global.user_id,
2484             last_update_login = fnd_global.login_id
2485       WHERE workitem_instance_id = p_workitem_instance_id ;
2486   END IF ;
2487 
2488 COMMIT;
2489 
2490 EXCEPTION
2491      WHEN others THEN
2492           wf_core.context('XDPSTATUS', 'UPDATE_XDP_WORKITEM_STATUS', null, null, null, x_progress);
2493           ROLLBACK;
2494           RAISE ;
2495 END UPDATE_XDP_WORKITEM_STATUS;
2496 
2497 
2498 
2499 PROCEDURE UPDATE_XDP_FA_STATUS(p_status         IN VARCHAR2,
2500                                p_fa_instance_id IN NUMBER)IS
2501 PRAGMA AUTONOMOUS_TRANSACTION ;
2502 x_progress VARCHAR2(2000);
2503 
2504 
2505 BEGIN
2506   IF p_status IN ('IN PROGRESS','ERROR') THEN
2507 
2508      UPDATE xdp_fa_runtime_list
2509         SET status_code       = p_status ,
2510             last_update_date  = sysdate,
2511             last_updated_by   = fnd_global.user_id,
2512             last_update_login = fnd_global.login_id
2513       WHERE fa_instance_id = p_fa_instance_id ;
2514   ELSE
2515     UPDATE xdp_fa_runtime_list
2516         SET status_code       = p_status ,
2517             completion_date   = sysdate ,
2518             last_update_date  = sysdate,
2519             last_updated_by   = fnd_global.user_id,
2520             last_update_login = fnd_global.login_id
2521       WHERE fa_instance_id = p_fa_instance_id ;
2522 
2523   END IF ;
2524 
2525 COMMIT;
2526 
2527 EXCEPTION
2528      WHEN others THEN
2529           wf_core.context('XDPSTATUS', 'UPDATE_XDP_FA_STATUS', null, null, null, x_progress);
2530           ROLLBACK;
2531           RAISE ;
2532 END UPDATE_XDP_FA_STATUS;
2533 
2534 
2535 FUNCTION IS_ORDER_IN_ERROR (p_order_id IN NUMBER)
2536    RETURN BOOLEAN IS
2537 
2538 l_status   BOOLEAN := FALSE ;
2539 
2540 CURSOR c_order IS
2541      SELECT 'Y'
2542        FROM xdp_order_headers oh
2543       WHERE order_id = p_order_id
2544         AND (EXISTS  (SELECT 'Y'
2545                        FROM xdp_order_line_items oli
2546                       WHERE oli.order_id = oh.ordeR_id
2547                         AND oli.status_code = 'ERROR' ) OR
2548              EXISTS  (SELECT 'Y'
2549                        FROM xdp_fulfill_worklist fw
2550                       WHERE fw.order_id = oh.order_id
2551                         AND fw.status_code = 'ERROR') OR
2552              EXISTS  (SELECT 'Y'
2553                        FROM xdp_fulfill_worklist fw,
2554                             xdp_fa_runtime_list fr
2555                       WHERE fw.workitem_instance_id = fr.workitem_instance_id
2556                         AND fw.order_id = oh.order_id
2557                         AND fr.status_code = 'ERROR')) ;
2558 
2559 
2560 BEGIN
2561      FOR c_order_rec IN c_order
2562          LOOP
2563             l_status := TRUE;
2564          END LOOP ;
2565 
2566 RETURN l_status ;
2567 END IS_ORDER_IN_ERROR ;
2568 
2569 
2570 FUNCTION IS_LINE_IN_ERROR(p_lineitem_id IN NUMBER)
2571          RETURN BOOLEAN IS
2572 
2573 l_status   BOOLEAN := FALSE ;
2574 
2575 CURSOR c_lines IS
2576        SELECT 'Y' ,
2577               is_package_flag ,
2578               is_virtual_line_flag,
2579               line_item_id,
2580               ib_source,
2581               ib_source_id
2582          FROM xdp_order_line_items
2583         WHERE line_item_id = p_lineitem_id ;
2584 
2585 CURSOR c_order_line IS
2586      SELECT 'Y'
2587        FROM xdp_order_line_items  oli
2588       WHERE line_item_id = p_lineitem_id
2589         AND ( EXISTS (SELECT 'Y'
2590                       FROM xdp_fulfill_worklist fw
2591                      WHERE fw.line_item_id  = oli.line_item_id
2592                        AND fw.status_code   = 'ERROR') OR
2593               EXISTS (SELECT 'Y'
2594                       FROM xdp_fulfill_worklist fw,
2595                            xdp_fa_runtime_list fr
2596                      WHERE fw.workitem_instance_id = fr.workitem_instance_id
2597                        AND fw.line_item_id         = oli.line_item_id
2598                        AND fr.status_code          = 'ERROR')) ;
2599 
2600 CURSOR c_order_pkg_line(lv_line_item_id IN NUMBER) IS
2601        SELECT 'Y'
2602          FROM xdp_line_relationships lr
2603         WHERE lr.related_line_item_id = lv_line_item_id
2604           AND (EXISTS (SELECT 'Y'
2605                          FROM xdp_fulfill_worklist fw
2606                         WHERE fw.line_item_id  = lr.line_item_id
2607                           AND fw.status_code   = 'ERROR') OR
2608                EXISTS (SELECT 'Y'
2609                          FROM xdp_fulfill_worklist fw,
2610                               xdp_fa_runtime_list fr
2611                         WHERE fw.workitem_instance_id = fr.workitem_instance_id
2612                           AND fw.line_item_id         = lr.line_item_id
2613                           AND fr.status_code          = 'ERROR')) ;
2614 BEGIN
2615      FOR c_lines_rec IN c_lines
2616          LOOP
2617              IF ((c_lines_rec.IS_PACKAGE_FLAG = 'Y') OR
2618                  (c_lines_rec.ib_source IN('CSI','TXN') AND c_lines_rec.ib_source_id IS NULL )
2619                 ) THEN
2620 
2621                 FOR c_order_pkg_line_rec IN c_order_pkg_line(c_lines_rec.line_item_id)
2622                     LOOP
2623                        l_status := TRUE ;
2624                     END LOOP ;
2625 
2626              ELSE
2627                 FOR c_order_line_rec IN c_order_line
2628                     LOOP
2629                        l_status := TRUE ;
2630                     END LOOP ;
2631 
2632              END IF ;
2633 
2634          END LOOP ;
2635 
2636 RETURN l_status ;
2637 
2638 END IS_LINE_IN_ERROR ;
2639 
2640 FUNCTION IS_WI_IN_ERROR(p_WIInstance_id IN NUMBER)
2641          RETURN BOOLEAN IS
2642 
2643 l_status   BOOLEAN := FALSE ;
2644 
2645 CURSOR c_order_line IS
2646      SELECT 'Y'
2647        FROM xdp_fulfill_worklist fw
2648       WHERE workitem_instance_id  = p_WIInstance_id
2649         AND EXISTS (SELECT 'Y'
2650                       FROM xdp_fa_runtime_list fr
2651                      WHERE fr.workitem_instance_id = fw.workitem_instance_id
2652                        AND fr.status_code          = 'ERROR') ;
2653 
2654 BEGIN
2655      FOR c_order_line_rec IN c_order_line
2656          LOOP
2657             l_status := TRUE ;
2658          END LOOP ;
2659 
2660 RETURN l_status ;
2661 
2662 END IS_WI_IN_ERROR ;
2663 
2664 
2665 FUNCTION IS_FA_IN_ERROR(p_FAInstance_id IN NUMBER)
2666          RETURN BOOLEAN IS
2667 
2668 l_status   BOOLEAN := FALSE ;
2669 
2670 CURSOR c_fa IS
2671      SELECT 'Y'
2672        FROM xdp_fa_runtime_list fr
2673       WHERE fr.fa_instance_id = p_FAInstance_id
2674         AND fr.status_code     = 'ERROR' ;
2675 
2676 BEGIN
2677      FOR c_fa_rec IN c_fa
2678          LOOP
2679             l_status := TRUE ;
2680          END LOOP ;
2681 
2682 RETURN l_status ;
2683 
2684 END IS_FA_IN_ERROR ;
2685 
2686 PROCEDURE SetNodeWIStatus(itemtype IN VARCHAR2,
2687                          itemkey  IN VARCHAR2,
2688                          actid    IN NUMBER)
2689 IS
2690 
2691  l_WIInstanceID      NUMBER ;
2692  l_status          VARCHAR2(40);
2693 
2694 BEGIN
2695            l_status := WF_ENGINE.GetActivityattrtext(itemtype =>SetNodeWIStatus.itemtype,
2696                                                      itemkey  =>SetNodeWIStatus.itemkey,
2697                                                      actid    =>SetNodeWIStatus.actid,
2698                                                      aname    =>'STATUS');
2699 
2700            l_WIInstanceID := wf_engine.GetItemAttrNumber(itemtype => SetNodeWIStatus.itemtype,
2701                                                          itemkey  => SetNodeWIStatus.itemkey,
2702                                                          aname    => 'WORKITEM_INSTANCE_ID');
2703            UPDATE_XDP_WORKITEM_STATUS(l_status,l_WIInstanceID);
2704 
2705 
2706 EXCEPTION
2707      WHEN others THEN
2708           wf_core.context('XDPSTATUS', 'SetNodeWIStatus', itemtype, itemkey, null,null);
2709           RAISE;
2710 END SetNodeWIStatus;
2711 
2712 PROCEDURE SetNodeLineStatus(itemtype IN VARCHAR2,
2713                          itemkey  IN VARCHAR2,
2714                          actid    IN NUMBER)
2715 IS
2716 
2717  l_LineItemID       NUMBER;
2718  l_status          VARCHAR2(40);
2719 
2720 BEGIN
2721 
2722  l_LineItemID := wf_engine.GetItemAttrNumber(itemtype => SetNodeLineStatus.itemtype,
2723                                              itemkey => SetNodeLineStatus.itemkey,
2724                                              aname => 'LINE_ITEM_ID');
2725  l_status := WF_ENGINE.GetActivityattrtext(itemtype =>SetNodeLineStatus.itemtype,
2726                                            itemkey  =>SetNodeLineStatus.itemkey,
2727                                            actid    =>SetNodeLineStatus.actid,
2728                                            aname    =>'STATUS');
2729 
2730 
2731  UPDATE_XDP_ORDER_LINE_STATUS(l_status ,  l_LineItemID );
2732 
2733 
2734 EXCEPTION
2735      WHEN others THEN
2736           wf_core.context('XDPSTATUS', 'SetNodeLineStatus', itemtype, itemkey, null,null);
2737           RAISE;
2738 
2739 
2740 END SetNodeLineStatus;
2741 
2742 FUNCTION GET_WI_STATUS(p_WIInstance_id IN NUMBER)
2743          RETURN VARCHAR2 IS
2744  cursor cur_wi_status is
2745  SELECT status_code
2746    FROM xdp_fulfill_worklist
2747   WHERE workitem_instance_id  = p_WIInstance_id;
2748 
2749  cursor cur_fa_status is
2750  SELECT status_code
2751    FROM xdp_fa_runtime_list
2752   WHERE workitem_instance_id  = p_WIInstance_id;
2753 
2754  l_status        VARCHAR2(200);
2755  l_system_hold   BOOLEAN := FALSE;
2756  l_error         BOOLEAN := FALSE;
2757 
2758 BEGIN
2759      FOR lv_rec IN cur_wi_status LOOP
2760          l_status := lv_rec.STATUS_CODE;
2761 
2762          --Check whether the WI itself is in error..
2763          IF l_status = 'ERROR' THEN
2764            l_error := TRUE;
2765            EXIT;
2766          ELSE
2767            --Check whether any FAs are in error..
2768            FOR lv_fa_rec IN cur_fa_status LOOP
2769              l_status := lv_fa_rec.status_code;
2770              IF l_status = 'ERROR' THEN
2771                l_error := TRUE;
2772                EXIT;
2773              ELSIF l_status =  'SYSTEM_HOLD' THEN
2774                l_system_hold := TRUE;
2775                EXIT;
2776              END IF;
2777            END LOOP;
2778          END IF;
2779      END LOOP ;
2780 
2781      IF l_error THEN
2782        RETURN 'ERROR';
2783      ELSIF l_system_hold THEN
2784        RETURN 'SYSTEM_HOLD';
2785      ELSE
2786        RETURN l_status;
2787      END IF;
2788 END GET_WI_STATUS;
2789 
2790 FUNCTION GET_LINE_STATUS(p_line_item_id IN NUMBER)
2791          RETURN VARCHAR2 IS
2792  --cursor to figure out whether a line is package or not..
2793  CURSOR c_lines IS
2794  SELECT is_package_flag , is_virtual_line_flag,
2795         line_item_id, status_code,
2796         ib_source, ib_source_id
2797    FROM xdp_order_line_items
2798   WHERE line_item_id = p_line_item_id;
2799 
2800  CURSOR c_pkg_child_lines( cv_line_item_id IN NUMBER) IS
2801  SELECT xoli.line_item_id, xoli.status_code
2802    FROM xdp_line_relationships lr, xdp_order_line_items xoli
2803   WHERE lr.related_line_item_id = cv_line_item_id
2804     AND lr.line_item_id  = xoli.line_item_id;
2805 
2806  CURSOR c_line_status (cv_line_item_id IN NUMBER) IS
2807  SELECT workitem_instance_id
2808    FROM xdp_fulfill_worklist
2809   WHERE line_item_id  = cv_line_item_id;
2810 
2811  l_line_status        VARCHAR2(200);
2812  l_status        VARCHAR2(200);
2813  l_system_hold   BOOLEAN := FALSE;
2814  l_error         BOOLEAN := FALSE;
2815 
2816 BEGIN
2817   FOR lv_rec_is_pkg IN c_lines LOOP
2818      IF ((lv_rec_is_pkg.IS_PACKAGE_FLAG = 'Y') OR
2819          (lv_rec_is_pkg.ib_source IN('CSI','TXN') AND
2820           lv_rec_is_pkg.ib_source_id IS NULL )) THEN
2821 
2822        --Check whether the package itself is in error...
2823        l_line_status := lv_rec_is_pkg.status_code;
2824 
2825        IF l_line_status = 'ERROR' THEN
2826          l_error := TRUE;
2827          EXIT;
2828        END IF;
2829 
2830        FOR lv_rec IN c_pkg_child_lines(  lv_rec_is_pkg.line_item_id ) LOOP
2831          -- check whether the child line itself is in error..
2832          IF lv_rec.status_code = 'ERROR' THEN
2833            l_error := TRUE;
2834            EXIT;
2835          END IF;
2836 
2837          -- check all the child lines
2838          FOR lv_child_line_rec IN c_line_status( lv_rec.line_item_id ) LOOP
2839            l_status := get_wi_status( lv_child_line_rec.workitem_instance_id );
2840            --IF any WI is in error exit..
2841            IF l_status = 'ERROR' THEN
2842              l_error := TRUE;
2843              EXIT;
2844            ELSIF l_status = 'SYSTEM_HOLD' THEN
2845              l_system_hold := TRUE;
2846            END IF;
2847          END LOOP;
2848        END LOOP;
2849      ELSE
2850        --Check whether the line itself is in error...
2851        l_line_status := lv_rec_is_pkg.status_code;
2852 
2853        IF l_line_status = 'ERROR' THEN
2854          l_error := TRUE;
2855          EXIT;
2856        END IF;
2857 
2858        -- Browse thru all WIs
2859        FOR lv_rec IN c_line_status( p_line_item_id ) LOOP
2860            l_status := get_wi_status( lv_rec.workitem_instance_id );
2861            IF l_status = 'ERROR' THEN
2862              l_error := TRUE;
2863              EXIT;
2864            ELSIF l_status = 'SYSTEM_HOLD' THEN
2865              l_system_hold := TRUE;
2866            END IF;
2867        END LOOP;
2868      END IF;
2869   END LOOP;
2870 
2871   IF l_error THEN
2872     RETURN 'ERROR';
2873   ELSIF l_system_hold THEN
2874     RETURN 'SYSTEM_HOLD';
2875   ELSE
2876     RETURN l_line_status;
2877   END IF;
2878 
2879 END GET_LINE_STATUS;
2880 
2881 FUNCTION GET_ORDER_STATUS(p_order_id IN NUMBER)
2882          RETURN VARCHAR2 IS
2883 
2884  CURSOR cur_order IS
2885  SELECT status_code
2886    FROM xdp_order_headers
2887   WHERE order_id =  p_order_id;
2888 
2889  CURSOR cur_lines IS
2890  SELECT status_code, line_item_id
2891    FROM xdp_order_line_items
2892   WHERE order_id =  p_order_id;
2893 
2894  lv_status        VARCHAR2(200);
2895  l_system_hold   BOOLEAN := FALSE;
2896  l_error         BOOLEAN := FALSE;
2897 
2898 BEGIN
2899   FOR lv_rec IN cur_order LOOP
2900     lv_status := lv_rec.status_code;
2901     IF( lv_status = 'ERROR' ) THEN
2902       l_error := TRUE;
2903       EXIT;
2904     ELSE
2905       FOR lv_line_rec IN cur_lines LOOP
2906         lv_status := get_line_status(lv_line_rec.line_item_id);
2907         IF( lv_status = 'ERROR' ) THEN
2908           l_error := TRUE;
2909           EXIT;
2910         ELSIF lv_status = 'SYSTEM_HOLD' THEN
2911           l_system_hold := TRUE;
2912         END IF;
2913       END LOOP;
2914     END IF;
2915   END LOOP;
2916 
2917   IF l_error THEN
2918     RETURN 'ERROR';
2919   ELSIF l_system_hold THEN
2920     RETURN 'SYSTEM_HOLD';
2921   ELSE
2922     RETURN lv_status;
2923   END IF;
2924 
2925 
2926 END GET_ORDER_STATUS;
2927 
2928 
2929 End XDPSTATUS;