| 1 | PSXAUTO ;BIR/WPB-Routine to Automatically Run CMOP Suspense ;14 DEC 2001
 | 
|---|
| 2 |  ;;2.0;CMOP;**1,2,3,24,28,36,41**;11 Apr 97
 | 
|---|
| 3 |  ;Reference to ^XUSEC(  supported by DBIA #10076
 | 
|---|
| 4 |  ;This routine will be called from a menu option and will allow
 | 
|---|
| 5 |  ;the user to start or change auto-processing. The user must hold
 | 
|---|
| 6 |  ;the PSXAUTOX security key.
 | 
|---|
| 7 |  G START
 | 
|---|
| 8 | STARTCS ; entry from edit auto CS Schedule menu option (future - post *41))
 | 
|---|
| 9 |  S PSXCS=1
 | 
|---|
| 10 | START ;
 | 
|---|
| 11 |  S PSXCS=+$G(PSXCS)
 | 
|---|
| 12 |  I '$D(^XUSEC("PSXAUTOX",DUZ)) W !,"You are not authorized to use this option!" Q
 | 
|---|
| 13 |  I '$D(^XUSEC("PSX XMIT",DUZ)) W !,"You are not authorized to use this option!" Q
 | 
|---|
| 14 |  I '$D(^XUSEC("PSXCMOPMGR",DUZ)) W !,"You are not authorized to use this option!" Q
 | 
|---|
| 15 |  D SET^PSXSYS I $G(PSXSYS)="" W !!,"The Station number is missing in the Institution file.",!,"The Station number is required for CMOP transmissions.",!,"Please contact your IRM and have this problem corrected, then try again." Q
 | 
|---|
| 16 |  I '$D(^PSX(550,"C")) W !,"The CMOP is not an active CMOP site and can not schedule auto transmissions." Q
 | 
|---|
| 17 |  I $D(^PSX(550,"TR","T")) W !,"A transmission is in progress, try later." Q
 | 
|---|
| 18 |  L +^PSX(550.1):5 I '$T W !,"A transmission is in progress, try later." Q
 | 
|---|
| 19 |  S PSXSTAT="T" D PSXSTAT^PSXRSYU I $G(PSXLOCK) G EXIT
 | 
|---|
| 20 |  S PSXDUZ=DUZ
 | 
|---|
| 21 |  F PSXCS=0,1 D GETSCH S DTTM(PSXCS)=PSXDATE ; store pre-edit schedule values
 | 
|---|
| 22 | ASK D EDTBSCH ; edit both schedules
 | 
|---|
| 23 | FILE ; if either schedule changed send appropriate message
 | 
|---|
| 24 |  F PSXCS=0,1 D GETSCH D
 | 
|---|
| 25 |  . I DTTM(PSXCS)=PSXDATE Q  ;no change - quit
 | 
|---|
| 26 |  . I 'PSXDATE,DTTM(PSXCS) S (PSXAUTO,PSXHOUR)=0 D AUTOMSG^PSXMSGS,SERV^PSXMISC W !,$S(PSXCS:"",1:"NON-"),"CS Cancel Schedule Sent to CMOP" H 3 Q  ; schedule deleted
 | 
|---|
| 27 |  . S PSXAUTO=1 D AUTOMSG^PSXMSGS,SERV^PSXMISC W !,$S(PSXCS:"",1:"NON-"),"CS New Schedule Sent to CMOP" H 3 ; new/changed schedule to send
 | 
|---|
| 28 |  K DTTM
 | 
|---|
| 29 |  G EXIT
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 | ENCS ; entry from auto CS Tasking Option Schedule (future-post *41)
 | 
|---|
| 32 |  S PSXCS=1
 | 
|---|
| 33 | EN ;Entry from Kernel Option Tasking NON-CS
 | 
|---|
| 34 |  S PSXCS=+$G(PSXCS)
 | 
|---|
| 35 |  Q:'$D(^PSX(550,"C"))  ;no CMOP selected M xref
 | 
|---|
| 36 |  Q:'$D(^PSX(550,"ST","A"))  ;no CMOP selected Regular xref
 | 
|---|
| 37 |  S ZTSK=$G(ZTSK),PSXZTSK=ZTSK,PSXCS=+$G(PSXCS)
 | 
|---|
| 38 |  ; test if previous job still running
 | 
|---|
| 39 | LOCK ; >>>**** LOCK OF FILE 550.1 ****<<<
 | 
|---|
| 40 |  L +^PSX(550.1):60 I '$T D RQUEMSG G EXIT ; no lock then reque 30 minutes later
 | 
|---|
| 41 |  ;if a lock is obtainable , no transmission is running
 | 
|---|
| 42 | TFLAG I $D(^PSX(550,"TR","T")) D  G TFLAG ;clear 'T' flags
 | 
|---|
| 43 |  .  D ^PSXRCVRY
 | 
|---|
| 44 |  .  N PSXSYS S PSXSYS=$O(^PSX(550,"TR","T",0)) S PSXSTAT="H" D PSXSTAT^PSXRSYU
 | 
|---|
| 45 |  ; proceeding to process files
 | 
|---|
| 46 |  D SET^PSXSYS Q:$P(PSXSYS,"^",2)=""
 | 
|---|
| 47 |  I $D(^PSX(550.2,"AQ")) D EN1^PSXRCVRY
 | 
|---|
| 48 |  ; set running task into 550  RUNNING TASK
 | 
|---|
| 49 |  K DIC,DIE,DR,DA S DIE=550,DA=+PSXSYS,DR="9////"_$G(ZTSK) D ^DIE K DIC,DIE,DR,DA
 | 
|---|
| 50 |  ; proceed tp process, setup variables, call into LOCK^PSXRSUS
 | 
|---|
| 51 |  S XX=$S('PSXCS:11,1:12) S THRU=+$$GET1^DIQ(550,+PSXSYS,XX)
 | 
|---|
| 52 |  S TPRTDT=DT S:$G(THRU)>0 TPRTDT=$$FMADD^XLFDT(DT,THRU,0,0,0)
 | 
|---|
| 53 |  S PSXDIVML=1,PSXFLAG=1,PSXTRANS=1,PSOINST=$P(PSXSYS,"^",2)
 | 
|---|
| 54 |  G LOCK^PSXRSUS
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | EDTBSCH ; display/edit both schedules as they are interactive with each other
 | 
|---|
| 57 |  W @IOF D DSPSCH
 | 
|---|
| 58 |  K DIR S DIR(0)="SO^C:Controlled Substance;N:NON-Controlled Substance;",DIR("A")="Edit     CS <C>  or  NON-CS <N> "
 | 
|---|
| 59 |  D ^DIR K DIR
 | 
|---|
| 60 |  I Y'="C",Y'="N" Q
 | 
|---|
| 61 |  N PSXCS
 | 
|---|
| 62 |  S PSXCS=$S(Y="C":1,1:0)
 | 
|---|
| 63 |  D EDIT
 | 
|---|
| 64 |  G EDTBSCH
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | EDIT ;Edit scheduling of transmissions and parameter "Number of days to transmit"
 | 
|---|
| 67 |  ;schedules must be separated by 2 hours
 | 
|---|
| 68 |  S PSXCS=+$G(PSXCS)
 | 
|---|
| 69 |  S XX=$S($G(PSXCS):"PSXR SCHEDULED CS TRANS",1:"PSXR SCHEDULED NON-CS TRANS")
 | 
|---|
| 70 |  D EDIT^XUTMOPT(XX)
 | 
|---|
| 71 |  I '$D(PSXSYS) D SET^PSXSYS
 | 
|---|
| 72 |  I +PSXSYS S DIE=550,DR="11",DA=+PSXSYS S:PSXCS DR="12" D ^DIE
 | 
|---|
| 73 |  ;check for 2 hour difference
 | 
|---|
| 74 |  I $$CHKSCH() Q  ; 2 hour difference satisfied 
 | 
|---|
| 75 |  W @IOF,!,"Sorry, there has to be at least 2 hours between the daily transmission runs.",!
 | 
|---|
| 76 |  D DELSCH
 | 
|---|
| 77 |  W !! K DIR S DIR(0)="E",DIR("A")="The "_$S(PSXCS:"CS",1:"NON-CS")_" schedule has been cleared for RE-EDIT. <cr>" D ^DIR
 | 
|---|
| 78 |  Q
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 | CHKSCH() ;CHECK Task schedules for 2 hour difference
 | 
|---|
| 81 |  N PSXCS,CSTSK,CSDATE,CSTHRU,CSHOUR,NCSTSK,NCSDATE,NCSTHRU,NCSHOUR,TSDIF
 | 
|---|
| 82 |  S PSXCS=1 D GETSCH
 | 
|---|
| 83 |  S CSTSK=+TSK(1),CSDATE=PSXDATE,CSHOUR=PSXHOUR,CSTHRU=THRU
 | 
|---|
| 84 |  S PSXCS=0 D GETSCH
 | 
|---|
| 85 |  S NCSTSK=+TSK(1),NCSDATE=PSXDATE,NCSHOUR=PSXHOUR,NCSTHRU=THRU
 | 
|---|
| 86 |  I NCSTSK,CSTSK I 1
 | 
|---|
| 87 |  E  Q 1  ; quit test if either is not scheduled
 | 
|---|
| 88 |  S CSDATE=(CSDATE#1)+DT,NCSDATE=(NCSDATE#1)+DT
 | 
|---|
| 89 |  S X1=CSDATE,X2=NCSDATE
 | 
|---|
| 90 |  I CSDATE>NCSDATE S X1=NCSDATE,X2=CSDATE
 | 
|---|
| 91 |  S TSDIF=$$FMDIFF^XLFDT(X2,X1,2)
 | 
|---|
| 92 |  ;W ! ZW X1,X2,XX,NCSDATE,CSDATE H 5
 | 
|---|
| 93 |  I TSDIF<7200 Q 0
 | 
|---|
| 94 |  I TSDIF>79200 Q 0
 | 
|---|
| 95 |  Q 1
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 | DELSCH ;Delete startup time and its pending task
 | 
|---|
| 98 |  S PSXCS=+$G(PSXCS)
 | 
|---|
| 99 |  S XX=$S($G(PSXCS):"PSXR SCHEDULED CS TRANS",1:"PSXR SCHEDULED NON-CS TRANS")
 | 
|---|
| 100 |  D RESCH^XUTMOPT(XX,"@")
 | 
|---|
| 101 |  D:'+PSXSYS SET^PSXSYS
 | 
|---|
| 102 |  Q
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 | GETSCH ; get schedule information from Kernel Option Scheduling
 | 
|---|
| 105 |  S PSXCS=+$G(PSXCS)
 | 
|---|
| 106 |  D:'$D(PSXSYS) SET^PSXSYS
 | 
|---|
| 107 |  S XX=$S($G(PSXCS):"PSXR SCHEDULED CS TRANS",1:"PSXR SCHEDULED NON-CS TRANS")
 | 
|---|
| 108 |  K TSK D OPTSTAT^XUTMOPT(XX,.TSK) S TSK(1)=$G(TSK(1))
 | 
|---|
| 109 |  S (PSXDATE,PSXHOUR,THRU)=""
 | 
|---|
| 110 |  S PSXZTSK=+TSK(1),PSXDATE=$P(TSK(1),U,2),PSXHOUR=$P(TSK(1),U,3)
 | 
|---|
| 111 |  S XX=$S('PSXCS:11,1:12) S THRU=$$GET1^DIQ(550,+PSXSYS,XX)
 | 
|---|
| 112 |  Q
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 | DSPSCH ;Display schedules for transmissions
 | 
|---|
| 115 |  N PSXCS,CSTSK,CSDATE,CSTHRU,CSHOUR,NCSTSK,NCSDATE,NCSTHRU,NCSHOUR
 | 
|---|
| 116 |  S PSXCS=1 D GETSCH
 | 
|---|
| 117 |  S CSTSK=+TSK(1),CSDATE=PSXDATE,CSHOUR=PSXHOUR,CSTHRU=THRU
 | 
|---|
| 118 |  S PSXCS=0 D GETSCH
 | 
|---|
| 119 |  S NCSTSK=+TSK(1),NCSDATE=PSXDATE,NCSHOUR=PSXHOUR,NCSTHRU=THRU
 | 
|---|
| 120 |  S Y=CSDATE X ^DD("DD") S CSDATE=Y S Y=NCSDATE X ^DD("DD") S NCSDATE=Y
 | 
|---|
| 121 |  W !,?25,"CS Transmission",?55,"Non-CS Transmission"
 | 
|---|
| 122 |  W !,"Scheduled to Run",?25,CSDATE,?55,NCSDATE
 | 
|---|
| 123 |  W !,"Frequency (hrs)",?25,CSHOUR,?55,NCSHOUR
 | 
|---|
| 124 |  W !,"Thru days",?25,CSTHRU,?55,NCSTHRU
 | 
|---|
| 125 |  W !,"Tasking ID",?25,CSTSK,?55,NCSTSK
 | 
|---|
| 126 |  Q
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 | RQUEMSG ; lock on 550.1 not achieved send transmission requeued message
 | 
|---|
| 129 |  S PSXCS=+$G(PSXCS)
 | 
|---|
| 130 |  S ZTSAVE("PSXCS")=""
 | 
|---|
| 131 |  D NOW^%DTC
 | 
|---|
| 132 |  S ZTDTH=$$FMADD^XLFDT(%,,,30)
 | 
|---|
| 133 |  S Y=% X ^DD("DD") S DTTM=Y
 | 
|---|
| 134 |  S ZTDESC="CMOP "_$S(PSXCS:"",1:"NON-")_"CS AUTO TRANSMISSION REQUEUE"
 | 
|---|
| 135 |  S ZTRTN="EN^PSXAUTO",ZTIO=""
 | 
|---|
| 136 |  D ^%ZTLOAD
 | 
|---|
| 137 |  S XMDUZ="Postmaster",XMSUB=$S($G(PSXCS):"",1:"NON-")_"CS Scheduled Transmission RE-Queued"
 | 
|---|
| 138 |  S XMTEXT="TXT("
 | 
|---|
| 139 |  S TXT(1,0)="The "_$S($G(PSXCS):"",1:"NON-")_"CS Scheduled Transmission for "_DTTM
 | 
|---|
| 140 |  S TXT(2,0)="was re-queued with task # "_ZTSK_" to run again in 30 minutes."
 | 
|---|
| 141 |  S TXT(3,0)="It could not obtain a lock on the RX QUEUE file #550.1."
 | 
|---|
| 142 |  S TXT(4,0)="That indicates that a transmission was in progress."
 | 
|---|
| 143 |  S TXT(5,0)=" "
 | 
|---|
| 144 |  S TXT(6,0)="If you are getting this message frequently, please contact your IRM Group"
 | 
|---|
| 145 |  D GRP1^PSXNOTE
 | 
|---|
| 146 |  ;S XMY(DUZ)=""
 | 
|---|
| 147 |  D ^XMD
 | 
|---|
| 148 |  Q
 | 
|---|
| 149 | EXIT ;
 | 
|---|
| 150 |  L -^PSX(550.1)
 | 
|---|
| 151 |  D:'$D(PSXSYS) SET^PSXSYS
 | 
|---|
| 152 |  S PSXSTAT="H" D PSXSTAT^PSXRSYU
 | 
|---|
| 153 |  K TIME,STDATE,NUM,X,Y,FREQ,PSXZTSK,START,ZTSK,%,%DT,DTE,LCNT,LL,N,RECD,RR,SITE,XMDUN,XMDUZ,XMSUB,XMZ,PSXDUZ,PSXAUTO,PSXDATE,PSXHOUR,DTTM
 | 
|---|
| 154 |  K ZTSAVE,ZTDESC,ZTRTN,ZTIO,ZTREQ,ZTDTH,SDATE,DIR,DIRUT,DUOUT,DTOUT
 | 
|---|
| 155 |  K PSXSYS,DIROUT,THRU,NEXT,RE,PSXLOCK,XX,PSXXDIV
 | 
|---|
| 156 |  S ZTREQ="@"
 | 
|---|
| 157 |  Q
 | 
|---|
| 158 | STOPET ; set a stop auto-error-trap node
 | 
|---|
| 159 |  S ^XTMP("PSXAUTOERR")=DT_"^"_DT_"^AUTO ERROR TRAP STOP NODE"
 | 
|---|
| 160 |  Q
 | 
|---|
| 161 | STARTET ; remove any stop node
 | 
|---|
| 162 |  K ^XTMP("PSXAUTOERR")
 | 
|---|
| 163 |  Q
 | 
|---|