| 1 | MAGGTAU ;WOIFO/GEK - RPC Calls to Update the Imaging Windows Workstation file ; [ 03/25/2001 11:20 ] | 
|---|
| 2 | ;;3.0;IMAGING;**7,16,8,59**;Nov 27, 2007;Build 20 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ;; +---------------------------------------------------------------+ | 
|---|
| 5 | ;; | Property of the US Government.                                | | 
|---|
| 6 | ;; | No permission to copy or redistribute this software is given. | | 
|---|
| 7 | ;; | Use of unreleased versions of this software requires the user | | 
|---|
| 8 | ;; | to execute a written test agreement with the VistA Imaging    | | 
|---|
| 9 | ;; | Development Office of the Department of Veterans Affairs,     | | 
|---|
| 10 | ;; | telephone (301) 734-0100.                                     | | 
|---|
| 11 | ;; |                                                               | | 
|---|
| 12 | ;; | The Food and Drug Administration classifies this software as  | | 
|---|
| 13 | ;; | a medical device.  As such, it may not be changed             | | 
|---|
| 14 | ;; | in any way.  Modifications to this software may result in an  | | 
|---|
| 15 | ;; | adulterated medical device under 21CFR820, the use of which   | | 
|---|
| 16 | ;; | is considered to be a violation of US Federal Statutes.       | | 
|---|
| 17 | ;; +---------------------------------------------------------------+ | 
|---|
| 18 | ;; | 
|---|
| 19 | Q | 
|---|
| 20 | UPD(MAGRY,DATA) ;RPC [MAGG WRKS UPDATES] | 
|---|
| 21 | ; Called after User login. Local and RIV. | 
|---|
| 22 | ; Updates information in the IMAGING WINDOWS WORKSTATION | 
|---|
| 23 | ; | 
|---|
| 24 | ; DATA is '^' delimited piece | 
|---|
| 25 | ; 1 Workstation name            2 Date/Time of capture app. | 
|---|
| 26 | ; 3 Date/Time of Display App. | 
|---|
| 27 | ; 4 Location of workstation      5 Date/Time of MAGSETUP | 
|---|
| 28 | ; 6 Version of Display          7 Version of Capture | 
|---|
| 29 | ; 8  1=Normal startup 2=Started by CPRS 3=Import API | 
|---|
| 30 | ; 9 OS Version                 10 VistaRad Version | 
|---|
| 31 | ; 11 RPCBroker Server    12 RPCBroker Port | 
|---|
| 32 | N X,Y,Z | 
|---|
| 33 | N MAGNAME,MAGCDT,MAGDDT,MAG0,MAGLOC,MAGIEN,MAGSETUP,MAGSTART,MAGSRV | 
|---|
| 34 | N MAGVERSD,MAGVERSC,MAGMODE,MAGOSVER,MAGVERVR,MAGPL,MAGVERX | 
|---|
| 35 | K MAGGFDA,MAGXERR,MAGXIEN | 
|---|
| 36 | S MAGNAME=$P(DATA,U,1) | 
|---|
| 37 | S MAGCDT=$P(DATA,U,2) | 
|---|
| 38 | S MAGDDT=$P(DATA,U,3) | 
|---|
| 39 | S MAGLOC=$P(DATA,U,4) | 
|---|
| 40 | S MAGSETUP=$P(DATA,U,5) | 
|---|
| 41 | S MAGVERSD=$P(DATA,U,6) | 
|---|
| 42 | I MAGVERSD S MAGJOB("DISPLAY")="" | 
|---|
| 43 | S MAGVERSC=$P(DATA,U,7) | 
|---|
| 44 | I MAGVERSC S MAGJOB("CAPTURE")="" | 
|---|
| 45 | S MAGMODE=$P(DATA,U,8) | 
|---|
| 46 | S MAGOSVER=$P(DATA,U,9) | 
|---|
| 47 | S MAGVERVR=$P(DATA,U,10) | 
|---|
| 48 | I $P(DATA,U,11)]"" S MAGJOB("RPCSERVER")=$P(DATA,U,11) | 
|---|
| 49 | I $P(DATA,U,12)]"" S MAGJOB("RPCPORT")=$P(DATA,U,12) | 
|---|
| 50 | S MAGIEN=0 | 
|---|
| 51 | I $L(MAGNAME) S MAGIEN=$O(^MAG(2006.81,"B",MAGNAME,"")) | 
|---|
| 52 | I 'MAGIEN D NEWWRKS(MAGNAME,MAGLOC,.MAGIEN) | 
|---|
| 53 | I MAGIEN<1 S MAGRY="0^Workstation Not on file" Q | 
|---|
| 54 | ; | 
|---|
| 55 | S %DT="T",X=MAGCDT D ^%DT S MAGCDT=Y | 
|---|
| 56 | S %DT="T",X=MAGDDT D ^%DT S MAGDDT=Y | 
|---|
| 57 | S %DT="T",X=MAGSETUP D ^%DT S MAGSETUP=Y | 
|---|
| 58 | S MAG0=^MAG(2006.81,MAGIEN,0) ; '0' node for use later. | 
|---|
| 59 | L +^MAG(2006.81,"LOCK",MAGIEN):0 | 
|---|
| 60 | S MAGIEN=+MAGIEN_"," | 
|---|
| 61 | S MAGGFDA(2006.81,MAGIEN,.01)=MAGNAME ; Computer Name | 
|---|
| 62 | I MAGCDT>-1 S MAGGFDA(2006.81,MAGIEN,4)=MAGCDT ;TELE19N.EXE dttm | 
|---|
| 63 | I MAGDDT>-1 S MAGGFDA(2006.81,MAGIEN,5)=MAGDDT ;IMGVWP10.EXE dttm | 
|---|
| 64 | I MAGSETUP>-1 S MAGGFDA(2006.81,MAGIEN,7)=MAGSETUP ; MAGSETUP.EXE dttm | 
|---|
| 65 | S MAGGFDA(2006.81,MAGIEN,8)=1 ; Active or not. | 
|---|
| 66 | S MAGGFDA(2006.81,MAGIEN,6)=MAGLOC ; location free text from .INI | 
|---|
| 67 | S MAGGFDA(2006.81,MAGIEN,3)="@" ; delete logoff time for this job. | 
|---|
| 68 | S MAGGFDA(2006.81,MAGIEN,10)="@" ; delete session pointer | 
|---|
| 69 | S MAGGFDA(2006.81,MAGIEN,11)="@" ; reset the session error count. | 
|---|
| 70 | S MAGGFDA(2006.81,MAGIEN,9)=MAGVERSD ; IMGVWP10.EXE Version Info | 
|---|
| 71 | S MAGGFDA(2006.81,MAGIEN,9.5)=MAGVERSC ; TELE19N.EXE Version Info | 
|---|
| 72 | S MAGGFDA(2006.81,MAGIEN,9.7)=MAGVERVR ; VistARad.EXE Version Info | 
|---|
| 73 | S MAGGFDA(2006.81,MAGIEN,13)=MAGOSVER ; Operating System Version. | 
|---|
| 74 | ; | 
|---|
| 75 | S X=$P(MAG0,U,12) | 
|---|
| 76 | S MAGGFDA(2006.81,MAGIEN,12)=X+1 ; Sess count for wrks. | 
|---|
| 77 | ; Keep PLACE that this wrks logged in. | 
|---|
| 78 | S MAGPL=0 I $D(DUZ(2)) S MAGPL=+$$PLACE^MAGBAPI(DUZ(2)) ; DBI | 
|---|
| 79 | I MAGPL S MAGGFDA(2006.81,MAGIEN,.04)=MAGPL ; DBI | 
|---|
| 80 | ; | 
|---|
| 81 | S X=$$NOW^XLFDT | 
|---|
| 82 | S MAGSTART=$E(X,1,12) | 
|---|
| 83 | I $G(DUZ) D | 
|---|
| 84 | . S MAGGFDA(2006.81,MAGIEN,1)=DUZ | 
|---|
| 85 | . S MAGGFDA(2006.81,MAGIEN,2)=MAGSTART | 
|---|
| 86 | ; | 
|---|
| 87 | D UPDATE^DIE("S","MAGGFDA","MAGXIEN","MAGXERR") | 
|---|
| 88 | I $D(DIERR) D RTRNERR(.MAGRY) Q | 
|---|
| 89 | ; The MAGJOB( array is used by Imaging routines that are | 
|---|
| 90 | ; called from the Delphi App. | 
|---|
| 91 | ; | 
|---|
| 92 | ; 3.0.8 Whatever App calls this, we'll use that Version number. | 
|---|
| 93 | S MAGVERX=$S(MAGVERSD]"":MAGVERSD,MAGVERSC]"":MAGVERSC,MAGVERVR]"":MAGVERVR,1:0) | 
|---|
| 94 | S MAGJOB("WRKSIEN")=+MAGIEN | 
|---|
| 95 | S MAGJOB("VERSION")=MAGVERX | 
|---|
| 96 | S MAGRY="1^" | 
|---|
| 97 | ; | 
|---|
| 98 | ; SESSION : Create new session entry | 
|---|
| 99 | D GETS^DIQ(200,DUZ_",","29","I","Z","") ; service/section | 
|---|
| 100 | S MAGSRV=$G(Z(200,DUZ_",",29,"I")) | 
|---|
| 101 | ; | 
|---|
| 102 | K MAGGFDA,MAGXERR,MAGXIEN | 
|---|
| 103 | S MAGGFDA(2006.82,"+1,",.01)=$P(^VA(200,DUZ,0),U,1) ; User | 
|---|
| 104 | S MAGGFDA(2006.82,"+1,",1)=DUZ ; USER | 
|---|
| 105 | S MAGGFDA(2006.82,"+1,",2)=MAGSTART ; Sess Start Time | 
|---|
| 106 | S MAGGFDA(2006.82,"+1,",4)=+MAGIEN ; Wrks | 
|---|
| 107 | S MAGGFDA(2006.82,"+1,",7)=+MAGSRV ; User's Service/Section | 
|---|
| 108 | S MAGGFDA(2006.82,"+1,",13)=MAGMODE ; 1=normal 2= started by CPRS | 
|---|
| 109 | ; DBI - save the logon PLACE in the Session file. | 
|---|
| 110 | I MAGPL S MAGGFDA(2006.82,"+1,",.04)=MAGPL ; User's Institution (Imaging site param entry) | 
|---|
| 111 | ; | 
|---|
| 112 | ;3.0.8  new fields 9 Client Ver, 9.2 Host Version, 9.4 OS Version | 
|---|
| 113 | S MAGGFDA(2006.82,"+1,",9)=MAGVERX ; | 
|---|
| 114 | S MAGGFDA(2006.82,"+1,",9.2)=$$VERSION^XPDUTL("IMAGING") ; | 
|---|
| 115 | S MAGGFDA(2006.82,"+1,",9.4)=MAGOSVER ; | 
|---|
| 116 | ; | 
|---|
| 117 | D UPDATE^DIE("","MAGGFDA","MAGXIEN","MAGXERR") | 
|---|
| 118 | I $D(DIERR) D RTRNERR(.MAGRY) Q | 
|---|
| 119 | S MAGRY="1^" | 
|---|
| 120 | I '+MAGXIEN(1) S MAGRY="0^" Q | 
|---|
| 121 | S MAGJOB("SESSION")=+MAGXIEN(1) | 
|---|
| 122 | S MAGRY=MAGJOB("SESSION")_"^Session # "_MAGJOB("SESSION")_" Started." | 
|---|
| 123 | S MAGGFDA(2006.81,+MAGIEN_",",10)=+MAGXIEN(1) | 
|---|
| 124 | D UPDATE^DIE("","MAGGFDA","MAGXIEN","MAGXERR") | 
|---|
| 125 | D ACTION("LOGON^") | 
|---|
| 126 | Q | 
|---|
| 127 | LOGACT(MAGRY,ACTION) ;RPC [MAG3 LOGACTION] | 
|---|
| 128 | ; Call to log actions for Imaging Session from | 
|---|
| 129 | ; Delphi interface | 
|---|
| 130 | D ACTION(ACTION) | 
|---|
| 131 | S MAGRY="1^Action Logged" | 
|---|
| 132 | Q | 
|---|
| 133 | ACTION(TXT,LOGTM,MAGSESS) ;Call to log actions for Imaging Workstation Session from other M routines | 
|---|
| 134 | ; ACTIONS LOGGED | 
|---|
| 135 | ; LOGON - Session StartTime     LOGOFF - Session End Time | 
|---|
| 136 | ; IMG   - Image accessed        PAT    - Patient Accessed | 
|---|
| 137 | ; CAP   - Image Captured | 
|---|
| 138 | ; DEL   - Image Deleted         MOD    - Image entry modified | 
|---|
| 139 | ; IMPORT - Import API has been called | 
|---|
| 140 | ; Data   - a node of data passed to Import API | 
|---|
| 141 | ; Result - a node of the Result Array from Import API Processing. | 
|---|
| 142 | ; Image  - one of the Images (full path of import directory) that was imported. | 
|---|
| 143 | ; PPACT  - A Post processing Action has been processed. | 
|---|
| 144 | ; VR-VW  - VistaRad Exam displayed | 
|---|
| 145 | ; VR-INT - VistaRad Exam interpreted | 
|---|
| 146 | ; API   - parameters sent to CP API, and the API Call i.e. ITIU-MDAPI | 
|---|
| 147 | ; DFTINDX- If the index fields have no values, call to Patch 17 code to | 
|---|
| 148 | ;               generate the values for the fields. | 
|---|
| 149 | ; MOD   - This was intended to log Modifications to Image Entries, it is | 
|---|
| 150 | ;         (for now) only called when a group entry has an image added to its multiple. | 
|---|
| 151 | ; | 
|---|
| 152 | ; TXT is "^" delimited string | 
|---|
| 153 | ; $P(1) is code ( see above )   $P(2) is DFN | 
|---|
| 154 | ; $P(3) is Image IEN            $P(4) reserved for procedure | 
|---|
| 155 | ; $P(5) reserved for time-stamp $P(6) is Vrad Image Count | 
|---|
| 156 | ; $P(7) is Vrad Patient Count | 
|---|
| 157 | ; $P(8) is Vrad User Type (1/0 = Rad/Non-Rad) | 
|---|
| 158 | ; $P(9) is Vrad REMOTE Read flag (1/0; 1=REMOTE) | 
|---|
| 159 | ; $P(TXT,"$$",2) is Tracking ID from an Imported Image.  From this we compute Session #, to log actions. | 
|---|
| 160 | ; LOGTM   - [1|0] Flag to indicate whether or not to log the time of the Action.  Default = 0 | 
|---|
| 161 | ; MAGSESS - Session IEN where the action should be logged.  Default to MAGJOB("SESSION") | 
|---|
| 162 | ; | 
|---|
| 163 | N NODE,SESSIEN,MAGGFDA,MAGXERR,MAGXIEN,MAGPROC,LOGX,TRKID | 
|---|
| 164 | S LOGTM=$G(LOGTM) | 
|---|
| 165 | I TXT["$$" S TRKID=$P(TXT,"$$",2),TXT=$P(TXT,"$$",1) | 
|---|
| 166 | S SESSIEN=$S($G(MAGSESS):MAGSESS,$D(MAGJOB("SESSION")):MAGJOB("SESSION"),$G(TRKID)'="":$O(^MAG(2006.82,"E",TRKID,""),-1),1:0) | 
|---|
| 167 | I 'SESSIEN Q | 
|---|
| 168 | S NODE="+1,"_SESSIEN_"," | 
|---|
| 169 | I $P(TXT,U,3) S MAGPROC=$P($G(^MAG(2005,$P(TXT,U,3),0)),U,8) | 
|---|
| 170 | ; | 
|---|
| 171 | I $P(TXT,U)="PAT" D | 
|---|
| 172 | . S Z=+$G(^MAG(2006.82,SESSIEN,1))+1 | 
|---|
| 173 | . S MAGGFDA(2006.82,SESSIEN_",",10)=Z | 
|---|
| 174 | I $P(TXT,U)="IMG" D | 
|---|
| 175 | . S Z=+$P($G(^MAG(2006.82,SESSIEN,1)),U,2)+1 | 
|---|
| 176 | . S MAGGFDA(2006.82,SESSIEN_",",11)=Z | 
|---|
| 177 | . D ENTRY^MAGLOG("IMGVW",DUZ,$P(TXT,"^",3),"Wrks",$P(TXT,"^",2),"1") | 
|---|
| 178 | . D ACCESS^MAGLOG($P(TXT,"^",3)) | 
|---|
| 179 | I $E(TXT,1,3)="CAP" D | 
|---|
| 180 | . S Z=+$P($G(^MAG(2006.82,SESSIEN,1)),U,3)+1 | 
|---|
| 181 | . S MAGGFDA(2006.82,SESSIEN_",",12)=Z | 
|---|
| 182 | . D ENTRY^MAGLOG("CAP",DUZ,$P(TXT,"^",3),"Wrks",$P(TXT,"^",2),"1") | 
|---|
| 183 | I $P(TXT,U,2) D | 
|---|
| 184 | . S MAGGFDA(2006.82,SESSIEN_",",5)=$P(TXT,U,2) | 
|---|
| 185 | I LOGTM D | 
|---|
| 186 | . S X=$$NOW^XLFDT | 
|---|
| 187 | . S $P(TXT,U,4)=$G(MAGPROC),$P(TXT,U,5)=$E(X,1,12) | 
|---|
| 188 | S MAGGFDA(2006.821,NODE,.01)=$P(TXT,"|",1) | 
|---|
| 189 | I $L(TXT,"|")>1 S MAGGFDA(2006.821,NODE,13)=$P(TXT,"|",2,99) | 
|---|
| 190 | D UPDATE^DIE("S","MAGGFDA","MAGXIEN","MAGXERR") | 
|---|
| 191 | Q | 
|---|
| 192 | NEWWRKS(MAGNAME,MAGLOC,MAGIEN) ; | 
|---|
| 193 | I $G(MAGNAME)="" Q | 
|---|
| 194 | N Y,MAGNFDA,MAGNIEN | 
|---|
| 195 | S MAGNFDA(2006.81,"+1,",.01)=MAGNAME | 
|---|
| 196 | S MAGNFDA(2006.81,"+1,",6)=$G(MAGLOC) | 
|---|
| 197 | D UPDATE^DIE("","MAGNFDA","MAGNIEN") | 
|---|
| 198 | S MAGIEN=MAGNIEN(1) | 
|---|
| 199 | Q | 
|---|
| 200 | LOGOFF(MAGRY) ;RPC [MAGG LOGOFF] Call when session is over. | 
|---|
| 201 | ; This updates session file with logoff time | 
|---|
| 202 | ;   and marks the session closed. | 
|---|
| 203 | ; | 
|---|
| 204 | S MAGRY=1 | 
|---|
| 205 | N MAGGFDA,MAGXERR,MAGXIEN,MAGIEN,MAGSESS,MAGEND,MAGCON | 
|---|
| 206 | ; The Imaging Workstation file keeps time of login | 
|---|
| 207 | ; We'll enter the logoff time ($$now^xlfdt) here. | 
|---|
| 208 | S X=$$NOW^XLFDT | 
|---|
| 209 | S MAGEND=$E(X,1,12) | 
|---|
| 210 | Q:'+$G(MAGJOB("WRKSIEN")) | 
|---|
| 211 | L -^MAG(2006.81,"LOCK",MAGJOB("WRKSIEN")) | 
|---|
| 212 | S MAGIEN=+MAGJOB("WRKSIEN")_"," | 
|---|
| 213 | S MAGGFDA(2006.81,MAGIEN,3)=MAGEND ; logoff dttm | 
|---|
| 214 | S MAGGFDA(2006.81,MAGIEN,8)=0 ; Set job number to 0 | 
|---|
| 215 | D UPDATE^DIE("S","MAGGFDA","MAGXIEN","MAGXERR") | 
|---|
| 216 | ;MAGJOB("WRKSIEN") | 
|---|
| 217 | Q:(+$G(MAGJOB("SESSION"))=0) | 
|---|
| 218 | S MAGSESS=+MAGJOB("SESSION")_"," | 
|---|
| 219 | K MAGGFDA,MAGXERR,MAGXIEN | 
|---|
| 220 | S MAGGFDA(2006.82,MAGSESS,3)=MAGEND | 
|---|
| 221 | ; calculate the length of the session | 
|---|
| 222 | S MAGCON="" | 
|---|
| 223 | S MAGGFDA(2006.82,MAGSESS,14)=MAGCON | 
|---|
| 224 | D UPDATE^DIE("S","MAGGFDA","MAGXIEN","MAGXERR") | 
|---|
| 225 | D ACTION("LOGOFF^") | 
|---|
| 226 | ; | 
|---|
| 227 | Q | 
|---|
| 228 | RTRNERR(ETXT) ; There was error from UPDATE^DIE quit with error text | 
|---|
| 229 | S ETXT="0^ERROR  "_MAGXERR("DIERR",1,"TEXT",1) | 
|---|
| 230 | Q | 
|---|