| [613] | 1 | ORMTIM01 ; SLC-ISC/RJS - PROCESS TIME BASED EVENT ;2/01/00  10:30 [8/3/05 7:19am]
 | 
|---|
 | 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**31,40,190,232**;Dec 17, 1997;Build 19
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 | SCAN ;
 | 
|---|
 | 5 |  S OCXORMTR="ORMTIME: scan"
 | 
|---|
 | 6 |  N OCXNOW,OCXDATE,OCXTMT,OCXORD S OCXNOW=$$IDATE("NOW"),OCXTMT=$$IDATE("N+1H")
 | 
|---|
 | 7 |  ;
 | 
|---|
 | 8 |  ;  Expire orders
 | 
|---|
 | 9 |  ;
 | 
|---|
 | 10 |  S OCXORMTR="ORMTIME: scan expiring orders"
 | 
|---|
 | 11 |  S OCXDATE=0 F  S OCXDATE=$O(^OR(100,"AE",OCXDATE)) Q:'OCXDATE  I '((+OCXDATE)>OCXNOW) D
 | 
|---|
 | 12 |  .S OCXORD=0 F  S OCXORD=$O(^OR(100,"AE",OCXDATE,OCXORD)) Q:'OCXORD  D
 | 
|---|
 | 13 |  ..D EXP^OCXOTIME(OCXDATE,OCXORD)
 | 
|---|
 | 14 |  ..I $G(^OR(100,"AE",OCXDATE,OCXORD)),(^OR(100,"AE",OCXDATE,OCXORD)>OCXNOW) Q
 | 
|---|
 | 15 |  ..S ^OR(100,"AE",OCXDATE,OCXORD)=OCXTMT
 | 
|---|
 | 16 |  ..N OCXORMTR S OCXORMTR=" Executing: D EXP^ORMEVNT("_OCXORD_","_OCXDATE_")"
 | 
|---|
 | 17 |  ..D EXP^ORB3F1(OCXDATE,OCXORD)
 | 
|---|
 | 18 |  ..D EXP^ORMEVNT(OCXORD,OCXDATE)
 | 
|---|
 | 19 |  ..S:$D(^OR(100,"AE",OCXDATE,OCXORD)) ^OR(100,"AE",OCXDATE,OCXORD)=""
 | 
|---|
 | 20 |  D DELEXP^ORB3F1  ;delete old expired orders from ^XTMP("ORAE"
 | 
|---|
 | 21 |  ;
 | 
|---|
 | 22 |  ;  Activate orders
 | 
|---|
 | 23 |  ;
 | 
|---|
 | 24 |  S OCXORMTR="ORMTIME: scan activating orders"
 | 
|---|
 | 25 |  S OCXDATE=0 F  S OCXDATE=$O(^OR(100,"AD",OCXDATE)) Q:'OCXDATE  I '((+OCXDATE)>OCXNOW) D
 | 
|---|
 | 26 |  .S OCXORD=0 F  S OCXORD=$O(^OR(100,"AD",OCXDATE,OCXORD)) Q:'OCXORD  D
 | 
|---|
 | 27 |  ..D ACT^OCXOTIME(OCXDATE,OCXORD)
 | 
|---|
 | 28 |  ..I $G(^OR(100,"AD",OCXDATE,OCXORD)),(^OR(100,"AD",OCXDATE,OCXORD)>OCXNOW) Q
 | 
|---|
 | 29 |  ..S ^OR(100,"AD",OCXDATE,OCXORD)=OCXTMT
 | 
|---|
 | 30 |  ..N OCXORMTR S OCXORMTR=" Executing: D ACTIVE^ORMEVNT("_OCXORD_","_OCXDATE_")"
 | 
|---|
 | 31 |  ..D ACTIVE^ORMEVNT(OCXORD,OCXDATE)
 | 
|---|
 | 32 |  ..S:$D(^OR(100,"AD",OCXDATE,OCXORD)) ^OR(100,"AD",OCXDATE,OCXORD)=""
 | 
|---|
 | 33 |  ;
 | 
|---|
 | 34 |  ; Trigger Task/Time-driven Notifications
 | 
|---|
 | 35 |  ;
 | 
|---|
 | 36 |  S OCXORMTR=" Executing: D TNOTIFS^ORB3TIM1"
 | 
|---|
 | 37 |  D TNOTIFS^ORB3TIM1
 | 
|---|
 | 38 |  ;
 | 
|---|
 | 39 |  ;   Run Order Check Purges
 | 
|---|
 | 40 |  ;
 | 
|---|
 | 41 |  I $L($T(^OCXOPURG)) D
 | 
|---|
 | 42 |  .S OCXORMTR="ORMTIME: Run purge for order checking"
 | 
|---|
 | 43 |  .D EN^OCXOPURG
 | 
|---|
 | 44 |  ;
 | 
|---|
 | 45 |  ;   ^ORYX("ORERR" CPRS Errors Purge
 | 
|---|
 | 46 |  ;
 | 
|---|
 | 47 |  I $O(^ORYX("ORERR",0)) D
 | 
|---|
 | 48 |  .N %DT,ORD0,ORDATE,ORKILL,ORLIMIT,ORNODE,X,Y
 | 
|---|
 | 49 |  .;
 | 
|---|
 | 50 |  .S ORLIMIT=$$GET^XPAR("ALL","ORPF ERROR DAYS") S:(ORLIMIT<1) ORLIMIT=2
 | 
|---|
 | 51 |  .S X="TODAY-"_ORLIMIT,%DT="" D ^%DT S ORLIMIT=Y
 | 
|---|
 | 52 |  .;
 | 
|---|
 | 53 |  .I '$O(^ORYX("ORERR","B",0)) S ORD0=0 F  S ORD0=$O(^ORYX("ORERR",ORD0)) Q:'ORD0  D
 | 
|---|
 | 54 |  ..S ^ORYX("ORERR","B",+$G(^ORYX("ORERR",ORD0,0)),ORD0)=""
 | 
|---|
 | 55 |  .;
 | 
|---|
 | 56 |  .S ORDATE="" F  S ORDATE=$O(^ORYX("ORERR","B",ORDATE)) Q:'$L(ORDATE)  D
 | 
|---|
 | 57 |  ..S ORD0=0 F  S ORD0=$O(^ORYX("ORERR","B",ORDATE,ORD0)) Q:'ORD0  D
 | 
|---|
 | 58 |  ...S ORNODE=$G(^ORYX("ORERR",ORD0,0))
 | 
|---|
 | 59 |  ...I (+ORNODE<ORLIMIT) K ^ORYX("ORERR",ORD0) S ORKILL=1
 | 
|---|
 | 60 |  ..I (ORDATE<ORLIMIT) K ^ORYX("ORERR","B",ORDATE) S ORKILL=1
 | 
|---|
 | 61 |  .;
 | 
|---|
 | 62 |  .S ORLIMIT=10000 ; **NOTE**  This limit is on the number of entries in the CPRS error log
 | 
|---|
 | 63 |  .;
 | 
|---|
 | 64 |  .I $G(ORKILL)!($P(^ORYX("ORERR",0),U,4)>ORLIMIT) D
 | 
|---|
 | 65 |  ..N ORD0,ORD1,ORPREV,ORCNT
 | 
|---|
 | 66 |  ..S ORD0=0 F ORCNT=0:1 S ORPREV=ORD0,ORD0=$O(^ORYX("ORERR",ORD0)) Q:'ORD0
 | 
|---|
 | 67 |  ..S $P(^ORYX("ORERR",0),U,3,4)=ORPREV_U_ORCNT
 | 
|---|
 | 68 |  ..;
 | 
|---|
 | 69 |  ..S ORD0=0 F ORD1=ORLIMIT:1:ORCNT S ORPREV=ORD0,ORD0=$O(^ORYX("ORERR",ORD0)) Q:'ORD0  D
 | 
|---|
 | 70 |  ...S ORNODE=$G(^ORYX("ORERR",ORD0,0))
 | 
|---|
 | 71 |  ...K ^ORYX("ORERR",ORD0),^ORYX("ORERR","B",+ORNODE)
 | 
|---|
 | 72 |  ..S $P(^ORYX("ORERR",0),U,3,4)=ORPREV_U_ORLIMIT
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 |  ;  Time Based Events for Order Checking
 | 
|---|
 | 75 |  ;
 | 
|---|
 | 76 |  I $L($T(^OCXOTIME)) D
 | 
|---|
 | 77 |  .S OCXORMTR="ORMTIME: scan time based events for order checking"
 | 
|---|
 | 78 |  .D EN^OCXOTIME
 | 
|---|
 | 79 |  ;
 | 
|---|
 | 80 |  S OCXORMTR="Finish Job #: "_$J_"  at: "_$$EDATE($$IDATE("N"))
 | 
|---|
 | 81 |  ;
 | 
|---|
 | 82 |  ;  Clean up cache of Remote Order Checking Data
 | 
|---|
 | 83 |  ;
 | 
|---|
 | 84 |  D CLEANUP^ORRDI2
 | 
|---|
 | 85 |  ;
 | 
|---|
 | 86 |  Q
 | 
|---|
 | 87 |  ;
 | 
|---|
 | 88 | EDATE(Y) X ^DD("DD") S:(Y["@") Y=$P(Y,"@",1)_" at "_$P(Y,"@",2) Q Y
 | 
|---|
 | 89 |  ;
 | 
|---|
 | 90 | IDATE(X) N %DT,Y S %DT="TF" D ^%DT Q Y
 | 
|---|
 | 91 |  ;
 | 
|---|
 | 92 | TIME(X) N M,H S M=$E(100+(X#60),2,3),H=$E(100+(X\60),2,3) Q H_M
 | 
|---|
 | 93 |  ;
 | 
|---|