| 1 | ORWRPL ; slc/dcm - Background GUI Lab Print Driver;10:36 AM  14 Jan 2000 ; 08 Feb 2001  09:02AM [7/2/01 7:27am]
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,109**;Dec 17, 1997
 | 
|---|
| 3 | RPTLIST ; -- list of Lab reports
 | 
|---|
| 4 |  ; <ID> ^ <report name> ^ <qualifier type> ^
 | 
|---|
| 5 |  ; <qualifier type> = 0:none,2:DateTime
 | 
|---|
| 6 |  ;;21^Cumulative^2
 | 
|---|
| 7 |  ;;3^Interim^2
 | 
|---|
| 8 |  ;;4^Interim for Selected Tests^2
 | 
|---|
| 9 |  ;;20^Anatomic Path Report^0
 | 
|---|
| 10 |  ;;2^Blood Bank Report^0
 | 
|---|
| 11 |  ;;9^Microbiology Report^2
 | 
|---|
| 12 |  ;;10^Lab Status Report^2
 | 
|---|
| 13 |  ;;$$END
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | PRINT(ORY,ORIO,ORDFN,RPTID,ORDAYSBK,ORTESTS,ORALPHA,OROMEGA)        ; -- print report entry point
 | 
|---|
| 16 |  ;  See RPC definition for details on input and output parameters
 | 
|---|
| 17 |  IF '$$CHK() G PRINTQ
 | 
|---|
| 18 |  N ZTDTH,ZTRTN,ZTSK,ZTDESC,ZTSAVE
 | 
|---|
| 19 |  S ZTIO=ORIO,ZTDTH=$H
 | 
|---|
| 20 |  S ZTDESC="GUI Lab Report Print"
 | 
|---|
| 21 |  S ZTRTN="DEQUE^ORWRPL"
 | 
|---|
| 22 |  S ZTSAVE("ORDFN")="",ZTSAVE("RPTID")="",ZTSAVE("ORDAYSBK")="",ZTSAVE("DUZ(")="",ZTSAVE("ORTESTS(")="",ZTSAVE("ORALPHA")="",ZTSAVE("OROMEGA")=""
 | 
|---|
| 23 |  D ^%ZTLOAD
 | 
|---|
| 24 |  I $D(ZTSK) D
 | 
|---|
| 25 |  . S ORY="0^Report queued. (Task #"_ZTSK_")"
 | 
|---|
| 26 |  E  D
 | 
|---|
| 27 |  . S ORY="99^Task Rejected."
 | 
|---|
| 28 | PRINTQ Q
 | 
|---|
| 29 | REMOTE(ORY,ORIO,ORDFN,RPTID,ORHANDS) ;Print data for remote sites
 | 
|---|
| 30 |  ;  RPC: ORWRP PRINT REMOTE REPORT
 | 
|---|
| 31 |  N ZTDTH,ZTRTN,ZTSK,ZTDESC,ZTSAVE,I
 | 
|---|
| 32 |  S ZTIO=ORIO,ZTDTH=$H
 | 
|---|
| 33 |  S ZTDESC="Remote Lab Report Print"
 | 
|---|
| 34 |  S ZTRTN="DEQUE^ORWRPL"
 | 
|---|
| 35 |  F I="ORDFN","RPTID","ORHANDS(" S ZTSAVE(I)=""
 | 
|---|
| 36 |  D ^%ZTLOAD
 | 
|---|
| 37 |  I $D(ZTSK) D
 | 
|---|
| 38 |  . S ORY="0^Report queued. (Task #"_ZTSK_")"
 | 
|---|
| 39 |  E  D
 | 
|---|
| 40 |  . S ORY="99^Task Rejected."
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | PRINTW(ORTEXT,ORDFN,RPTID,ORDAYSBK,ORTESTS,ORALPHA,OROMEGA) ;Windows device print
 | 
|---|
| 44 |  N ZTQUEUED,ORHFS,ORSUB,ROOT,ORIO
 | 
|---|
| 45 |  N IOM,IOSL,IOST,IOF,IOT,IOS
 | 
|---|
| 46 |  S (ORSUB,ROOT)="ORDATA",ORIO="OR WINDOWS HFS"
 | 
|---|
| 47 |  S ORTEXT=$NA(^TMP(ORSUB,$J,1))
 | 
|---|
| 48 |  I '$$CHK() S @ORTEXT@(0)=ORY G PRINTWQ
 | 
|---|
| 49 |  S ORHFS=$$HFS^ORWRP()
 | 
|---|
| 50 |  D HFSOPEN^ORWRP("ORWRP",ORHFS,"W")
 | 
|---|
| 51 |  I POP D  Q
 | 
|---|
| 52 |  . I $D(ROOT) D SETITEM^ORWRP(.ROOT,"ERROR: Unable to open HFS file")
 | 
|---|
| 53 |  D IOVAR^ORWRP(.ORIO,,,"P-WINHFS80")
 | 
|---|
| 54 |  N $ETRAP,$ESTACK
 | 
|---|
| 55 |  S $ETRAP="D ERR^ORWRP Q"
 | 
|---|
| 56 |  U IO
 | 
|---|
| 57 |  D DEQUE
 | 
|---|
| 58 |  D HFSCLOSE^ORWRP("ORWRP",ORHFS)
 | 
|---|
| 59 | PRINTWQ Q
 | 
|---|
| 60 | PRINTWR(ORTEXT,ORDFN,RPTID,ORHANDS) ;Windows Remote device print
 | 
|---|
| 61 |  N ZTQUEUED,ORHFS,ORSUB,ROOT,ORIO,ORHANDLE
 | 
|---|
| 62 |  N IOM,IOSL,IOST,IOF,IOT,IOS
 | 
|---|
| 63 |  S (ORSUB,ROOT)="ORDATA",ORIO="OR WINDOWS HFS",ORTEXT=$NA(^TMP(ORSUB,$J,1)),ORHANDLE="ORWRP"
 | 
|---|
| 64 |  S ORHFS=$$HFS^ORWRP()
 | 
|---|
| 65 |  D HFSOPEN^ORWRP(ORHANDLE,ORHFS,"W")
 | 
|---|
| 66 |  I POP D  Q
 | 
|---|
| 67 |  . I $D(ROOT) D SETITEM^ORWRP(.ROOT,"ERROR: Unable to open HFS file")
 | 
|---|
| 68 |  D IOVAR^ORWRP(.ORIO,,,"P-WINHFS80")
 | 
|---|
| 69 |  N $ETRAP,$ESTACK
 | 
|---|
| 70 |  S $ETRAP="D ERR^ORWRP Q"
 | 
|---|
| 71 |  U IO
 | 
|---|
| 72 |  D DEQUE
 | 
|---|
| 73 |  D HFSCLOSE^ORWRP(ORHANDLE,ORHFS)
 | 
|---|
| 74 |  Q
 | 
|---|
| 75 | CHK() ; -- do checks for required data
 | 
|---|
| 76 |  N OROK,FALSE,TRUE,ORRPT,TXT
 | 
|---|
| 77 |  S FALSE=0,TRUE=1
 | 
|---|
| 78 |  IF $G(ORIO)']"" S OROK=FALSE,ORY="1^No device selected." G CHKQ
 | 
|---|
| 79 |  IF '$G(RPTID) S OROK=FALSE,ORY="2^No report specified." G CHKQ
 | 
|---|
| 80 |  ; -- get report definition
 | 
|---|
| 81 |  S (TXT,ORRPT)=""
 | 
|---|
| 82 |  F I=3:1 S TXT=$P($TEXT(RPTLIST+I),";;",2) Q:TXT="$$END"!(TXT="")  I +TXT=RPTID S ORRPT=TXT Q
 | 
|---|
| 83 |  IF +ORRPT'=RPTID S OROK=FALSE,ORY="3^Report type specified is not valid." G CHKQ
 | 
|---|
| 84 |  IF $P(ORRPT,U,3)=2,'$G(ORDAYSBK),'$G(ORALPHA) S OROK=FALSE,ORY="4^No date range specified." G CHKQ
 | 
|---|
| 85 |  IF '$D(^DPT(+$G(ORDFN),0)) S OROK=FALSE,ORY="6^Patient specified is not valid." G CHKQ
 | 
|---|
| 86 |  S OROK=TRUE
 | 
|---|
| 87 | CHKQ Q OROK
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | DEQUE ; -- logic to print queued report
 | 
|---|
| 90 |  ; -- call build report logic
 | 
|---|
| 91 |  I '$O(ORHANDS(0)) D LOOP Q
 | 
|---|
| 92 |  N ORI,ORX
 | 
|---|
| 93 |  S ORI=0
 | 
|---|
| 94 |  F  S ORI=$O(ORHANDS(ORI)) Q:'ORI  S ORX=ORHANDS(ORI) D
 | 
|---|
| 95 |  . N ORY,PAGE,ORALPHA,OROMEGA,ORID
 | 
|---|
| 96 |  . D RTNDATA^XWBDRPC(.ORY,$P(ORX,"^",2))
 | 
|---|
| 97 |  . S:ORY="" ORY="ORY"
 | 
|---|
| 98 |  . S PAGE=1,ORALPHA=$P(ORX,"^",3),OROMEGA=$P(ORX,"^",4),ORID=$$ID(RPTID)
 | 
|---|
| 99 |  . D HEAD^ORWRPP1(ORDFN,PAGE,ORID,$P(ORX,"^"))
 | 
|---|
| 100 |  . D HURL^ORWRPP1(.ORY,ORDFN,ORID,1,$P(ORX,"^"))
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 | ID(ID) ;Get Report ID
 | 
|---|
| 103 |  I ID=21 Q "LAB CUMULATIVE ("_ORALPHA_" - "_OROMEGA_")"
 | 
|---|
| 104 |  I ID=3 Q "LAB INTERIM ("_ORALPHA_" - "_OROMEGA_")"
 | 
|---|
| 105 |  I ID=4 Q "LAB INTERIM FOR SELECTED TESTS ("_ORALPHA_" - "_OROMEGA_")"
 | 
|---|
| 106 |  I ID=20 Q "PATIENT ANATOMIC PATHOLOGY REPORT"
 | 
|---|
| 107 |  I ID=2 Q "PATIENT BLOOD BANK REPORT"
 | 
|---|
| 108 |  I ID=9 Q "MICROBIOLOGY REPORT ("_ORALPHA_" - "_OROMEGA_")"
 | 
|---|
| 109 |  I ID=10 Q "PATIENT LAB ORDER STATUS REPORT ("_ORALPHA_" - "_OROMEGA_")"
 | 
|---|
| 110 |  Q ""
 | 
|---|
| 111 | LOOP ;
 | 
|---|
| 112 |  IF RPTID=21 D  G DEQUEQ
 | 
|---|
| 113 |  . N ORY,PAGE,TEXT,X1,X2,X
 | 
|---|
| 114 |  . D CUM^ORWLR(.ORY,.ORDFN,.ORDAYSBK,.ORALPHA,.OROMEGA)
 | 
|---|
| 115 |  . Q:'$L(ORY)
 | 
|---|
| 116 |  . S PAGE=1,X1=DT,X2=-$G(ORDAYSBK,7)
 | 
|---|
| 117 |  . D C^%DTC
 | 
|---|
| 118 |  . S TEXT="LAB CUMULATIVE ("_$$FMTE^XLFDT(ORALPHA)_" - "_$$FMTE^XLFDT(OROMEGA)_")"
 | 
|---|
| 119 |  . D HEAD^ORWRPP1(ORDFN,PAGE,TEXT,$G(STATION))
 | 
|---|
| 120 |  . D HURL^ORWRPP1(.ORY,ORDFN,TEXT)
 | 
|---|
| 121 |  IF RPTID=3 D  G DEQUEQ
 | 
|---|
| 122 |  . N ORY,PAGE,TEXT,X
 | 
|---|
| 123 |  . I $L(ORDAYSBK),'$G(ORALPHA) S ORALPHA=$$FMADD^XLFDT(DT,-ORDAYSBK),OROMEGA=$$NOW^XLFDT
 | 
|---|
| 124 |  . Q:'$G(ORALPHA)  Q:'$G(OROMEGA)
 | 
|---|
| 125 |  . D INTERIM^ORWLRR(.ORY,.ORDFN,OROMEGA,.ORALPHA)
 | 
|---|
| 126 |  . Q:'$L(ORY)
 | 
|---|
| 127 |  . S PAGE=1,TEXT="LAB INTERIM ("_$$FMTE^XLFDT(ORALPHA)_" - "_$$FMTE^XLFDT(OROMEGA)_")"
 | 
|---|
| 128 |  . D HEAD^ORWRPP1(ORDFN,PAGE,TEXT,$G(STATION))
 | 
|---|
| 129 |  . D HURL^ORWRPP1(.ORY,ORDFN,TEXT,1)
 | 
|---|
| 130 |  IF RPTID=4 D  G DEQUEQ
 | 
|---|
| 131 |  . N ORY,PAGE,TEXT,X
 | 
|---|
| 132 |  . I $L(ORDAYSBK),'$G(ORALPHA) S ORALPHA=$$FMADD^XLFDT(DT,-ORDAYSBK),OROMEGA=$$NOW^XLFDT
 | 
|---|
| 133 |  . Q:'$G(ORALPHA)  Q:'$G(OROMEGA)
 | 
|---|
| 134 |  . D INTERIMS^ORWLRR(.ORY,.ORDFN,.OROMEGA,.ORALPHA,.ORTESTS)
 | 
|---|
| 135 |  . Q:'$L(ORY)
 | 
|---|
| 136 |  . S PAGE=1,TEXT="LAB INTERIM FOR SELECTED TESTS ("_$$FMTE^XLFDT(ORALPHA)_" - "_$$FMTE^XLFDT(OROMEGA)_")"
 | 
|---|
| 137 |  . D HEAD^ORWRPP1(ORDFN,PAGE,TEXT,$G(STATION))
 | 
|---|
| 138 |  . D HURL^ORWRPP1(.ORY,ORDFN,TEXT,1)
 | 
|---|
| 139 |  IF RPTID=20 D  G DEQUEQ
 | 
|---|
| 140 |  . N ORY,PAGE
 | 
|---|
| 141 |  . D AP^ORWRP1(.ORY,.ORDFN,.ID,.ORALPHA,.OROMEGA,.ORDTRNG,.REMOTE)
 | 
|---|
| 142 |  . Q:'$L(ORY)
 | 
|---|
| 143 |  . S PAGE=1
 | 
|---|
| 144 |  . D HEAD^ORWRPP1(ORDFN,PAGE,"PATIENT ANATOMIC PATHOLOGY REPORT",$G(STATION))
 | 
|---|
| 145 |  . D HURL^ORWRPP1(.ORY,ORDFN,"PATIENT ANATOMIC PATHOLOGY REPORT")
 | 
|---|
| 146 |  IF RPTID=2 D  G DEQUEQ
 | 
|---|
| 147 |  . N ORY,PAGE
 | 
|---|
| 148 |  . D BLR^ORWRP1(.ORY,.ORDFN,.ID,.ORALPHA,.OROMEGA,.ORDAYSBK,.REMOTE)
 | 
|---|
| 149 |  . Q:'$L(ORY)
 | 
|---|
| 150 |  . S PAGE=1
 | 
|---|
| 151 |  . D HEAD^ORWRPP1(ORDFN,PAGE,"PATIENT BLOOD BANK REPORT",$G(STATION))
 | 
|---|
| 152 |  . D HURL^ORWRPP1(.ORY,ORDFN,"PATIENT BLOOD BANK REPORT")
 | 
|---|
| 153 |  IF RPTID=9 D  G DEQUEQ
 | 
|---|
| 154 |  . N ORY,PAGE,TEXT,X
 | 
|---|
| 155 |  . I $L(ORDAYSBK),'$G(ORALPHA) S ORALPHA=$$FMADD^XLFDT(DT,-ORDAYSBK),OROMEGA=$$NOW^XLFDT
 | 
|---|
| 156 |  . Q:'$G(ORALPHA)  Q:'$G(OROMEGA)
 | 
|---|
| 157 |  . D MICRO^ORWLRR(.ORY,.ORDFN,.OROMEGA,.ORALPHA)
 | 
|---|
| 158 |  . Q:'$L(ORY)
 | 
|---|
| 159 |  . S PAGE=1,TEXT="MICROBIOLOGY REPORT ("_$$FMTE^XLFDT(ORALPHA)_" - "_$$FMTE^XLFDT(OROMEGA)_")"
 | 
|---|
| 160 |  . D HEAD^ORWRPP1(ORDFN,PAGE,TEXT,$G(STATION))
 | 
|---|
| 161 |  . D HURL^ORWRPP1(.ORY,ORDFN,TEXT,1)
 | 
|---|
| 162 |  IF RPTID=10 D  G DEQUEQ
 | 
|---|
| 163 |  . N ORY,PAGE,TEXT,X,ORVP
 | 
|---|
| 164 |  . S ORVP=ORDFN_";DPT("
 | 
|---|
| 165 |  . D EN1^LR7OSOS1(.ORY,ORVP,.ORALPHA,.OROMEGA,.ORDAYSBK)
 | 
|---|
| 166 |  . I '$O(^TMP("ORDATA",$J,1,0)) S ^TMP("ORDATA",$J,1,1,0)="",^TMP("ORDATA",$J,1,2,0)="No Orders found..."
 | 
|---|
| 167 |  . S PAGE=1,TEXT="PATIENT LAB ORDER STATUS REPORT ("_$$FMTE^XLFDT(ORALPHA)_" - "_$$FMTE^XLFDT(OROMEGA)_")"
 | 
|---|
| 168 |  . D HEAD^ORWRPP1(ORDFN,PAGE,TEXT,$G(STATION))
 | 
|---|
| 169 |  . D HURL^ORWRPP1(.ORY,ORDFN,TEXT)
 | 
|---|
| 170 | DEQUEQ Q
 | 
|---|