| 1 | ORWRPP ; ALB/MJK - Background Report Print Driver ; 08 Feb 2001  09:02AM
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,109,192**;Dec 17, 1997
 | 
|---|
| 3 | PRINT(ORY,ORIO,ORDFN,ORRPTID,ORHSTYPE,ORDTRNG,OREXAMID,ORCOMP,ORALPHA,OROMEGA)        ; -- print report entry point
 | 
|---|
| 4 |  ;  RPC: ORWRP PRINT REPORT
 | 
|---|
| 5 |  ;  See RPC definition for details on input and output parameters
 | 
|---|
| 6 |  N ORHSTAG
 | 
|---|
| 7 |  S ORHSTAG=$P($G(ORRPTID),"~",2),ORRPTID=$P($G(ORRPTID),"~"),ORRPTID=$P($P(ORRPTID,";"),":")
 | 
|---|
| 8 |  IF '$$CHK() G PRINTQ
 | 
|---|
| 9 |  N ZTDTH,ZTRTN,ZTSK,ZTDESC,ZTSAVE,I,ZTIO
 | 
|---|
| 10 |  S ZTIO=ORIO,ZTDTH=$H
 | 
|---|
| 11 |  S ZTDESC="Report Print"
 | 
|---|
| 12 |  S ZTRTN="DEQUE^ORWRPP"
 | 
|---|
| 13 |  F I="ORDFN","ORRPTID","ORHSTYPE","ORDTRNG","OREXAMID","DUZ(","ORCOMP(","ORALPHA","OROMEGA","ORHSTAG" S ZTSAVE(I)=""
 | 
|---|
| 14 |  D ^%ZTLOAD
 | 
|---|
| 15 |  I $D(ZTSK) D
 | 
|---|
| 16 |  . S ORY="0^Report queued. (Task #"_ZTSK_")"
 | 
|---|
| 17 |  E  D
 | 
|---|
| 18 |  . S ORY="99^Task Rejected."
 | 
|---|
| 19 | PRINTQ Q
 | 
|---|
| 20 | REMOTE(ORY,ORIO,ORDFN,ORRPTID,ORHANDS) ;Print data for remote sites
 | 
|---|
| 21 |  ;  RPC: ORWRP PRINT REMOTE REPORT
 | 
|---|
| 22 |  N ZTDTH,ZTRTN,ZTSK,ZTDESC,ZTSAVE,I,ORHSTAG,ZTIO
 | 
|---|
| 23 |  S ORHSTAG=$P($G(ORRPTID),"~",2),ORRPTID=$P($G(ORRPTID),"~"),ORRPTID=$P($P(ORRPTID,";"),":")
 | 
|---|
| 24 |  S ZTIO=ORIO,ZTDTH=$H
 | 
|---|
| 25 |  S ZTDESC="Remote Report Print"
 | 
|---|
| 26 |  S ZTRTN="DEQUE^ORWRPP"
 | 
|---|
| 27 |  F I="ORDFN","ORRPTID","ORHANDS(","ORHSTAG" S ZTSAVE(I)=""
 | 
|---|
| 28 |  D ^%ZTLOAD
 | 
|---|
| 29 |  I $D(ZTSK) D
 | 
|---|
| 30 |  . S ORY="0^Report queued. (Task #"_ZTSK_")"
 | 
|---|
| 31 |  E  D
 | 
|---|
| 32 |  . S ORY="99^Task Rejected."
 | 
|---|
| 33 |  Q
 | 
|---|
| 34 | PRINTW(ORTEXT,ORDFN,ORRPTID,ORHSTYPE,ORDTRNG,OREXAMID,ORCOMP,ORALPHA,OROMEGA) ;Windows device print
 | 
|---|
| 35 |  N ZTQUEUED,ORHFS,ORSUB,ROOT,ORIO,ORHANDLE,ORWINDEV
 | 
|---|
| 36 |  N IOM,IOSL,IOST,IOF,IOT,IOS,ORHSTAG,POP
 | 
|---|
| 37 |  S ORHSTAG=$P($G(ORRPTID),"~",2),ORRPTID=$P($G(ORRPTID),"~"),ORRPTID=$P($P(ORRPTID,";"),":")
 | 
|---|
| 38 |  S (ORSUB,ROOT)="ORDATA",ORIO="OR WINDOWS HFS",ORTEXT=$NA(^TMP(ORSUB,$J,1)),ORHANDLE="ORWRP"
 | 
|---|
| 39 |  I '$$CHK() S @ORTEXT@(0)=ORY G PRINTWQ
 | 
|---|
| 40 |  S ORHFS=$$HFS^ORWRP(),ORWINDEV=1 ;Flag for printing to windows device
 | 
|---|
| 41 |  D HFSOPEN^ORWRP(ORHANDLE,ORHFS,"W")
 | 
|---|
| 42 |  I POP D  Q
 | 
|---|
| 43 |  . I $D(ROOT) D SETITEM^ORWRP(.ROOT,"ERROR: Unable to open HFS file")
 | 
|---|
| 44 |  D IOVAR^ORWRP(.ORIO,,,"P-WINHFS80")
 | 
|---|
| 45 |  N $ETRAP,$ESTACK
 | 
|---|
| 46 |  S $ETRAP="D ERR^ORWRP Q"
 | 
|---|
| 47 |  U IO
 | 
|---|
| 48 |  D DEQUE
 | 
|---|
| 49 |  D HFSCLOSE^ORWRP(ORHANDLE,ORHFS)
 | 
|---|
| 50 | PRINTWQ Q
 | 
|---|
| 51 | PRINTWR(ORTEXT,ORDFN,ORRPTID,ORHANDS) ;Windows Remote device print
 | 
|---|
| 52 |  N ZTQUEUED,ORHFS,ORSUB,ROOT,ORIO,ORHANDLE,ORWINDEV
 | 
|---|
| 53 |  N IOM,IOSL,IOST,IOF,IOT,IOS,ORHSTAG,POP
 | 
|---|
| 54 |  S ORHSTAG=$P($G(ORRPTID),"~",2),ORRPTID=$P($G(ORRPTID),"~"),ORRPTID=$P($P(ORRPTID,";"),":")
 | 
|---|
| 55 |  S (ORSUB,ROOT)="ORDATA",ORIO="OR WINDOWS HFS",ORTEXT=$NA(^TMP(ORSUB,$J,1)),ORHANDLE="ORWRP"
 | 
|---|
| 56 |  S ORHFS=$$HFS^ORWRP(),ORWINDEV=1 ;Flag for printing to windows device
 | 
|---|
| 57 |  D HFSOPEN^ORWRP(ORHANDLE,ORHFS,"W")
 | 
|---|
| 58 |  I POP D  Q
 | 
|---|
| 59 |  . I $D(ROOT) D SETITEM^ORWRP(.ROOT,"ERROR: Unable to open HFS file")
 | 
|---|
| 60 |  D IOVAR^ORWRP(.ORIO,,,"P-WINHFS80")
 | 
|---|
| 61 |  N $ETRAP,$ESTACK
 | 
|---|
| 62 |  S $ETRAP="D ERR^ORWRP Q"
 | 
|---|
| 63 |  U IO
 | 
|---|
| 64 |  D DEQUE
 | 
|---|
| 65 |  D HFSCLOSE^ORWRP(ORHANDLE,ORHFS)
 | 
|---|
| 66 |  Q
 | 
|---|
| 67 | CHK() ; -- do checks for required data
 | 
|---|
| 68 |  N OROK,FALSE,TRUE,ORRPT,TXT,I,J,REPORT
 | 
|---|
| 69 |  S FALSE=0,TRUE=1,I="",REPORT=""
 | 
|---|
| 70 |  IF $G(ORIO)']"" S OROK=FALSE,ORY="1^No device selected." G CHKQ
 | 
|---|
| 71 |  IF '$L($G(ORRPTID)) S OROK=FALSE,ORY="2^No report specified." G CHKQ
 | 
|---|
| 72 |  ; -- get report definition
 | 
|---|
| 73 |  F  S I=$O(^ORD(101.24,"AC",I)) Q:I=""  S J=0 F  S J=$O(^ORD(101.24,"AC",I,J)) Q:'J  D
 | 
|---|
| 74 |  . I $P($G(^ORD(101.24,J,0)),"^",2)=ORRPTID,$P(^(0),"^",8)="R" S REPORT=^(0)
 | 
|---|
| 75 |  I '$L(REPORT) S OROK=FALSE,ORY="2^Report not available." G CHKQ
 | 
|---|
| 76 |  S (TXT,ORRPT)=""
 | 
|---|
| 77 |  IF $P(REPORT,U,7)=1!($P(REPORT,U,7)=3),'$L($G(ORDTRNG)),'$G(ORALPHA) S OROK=FALSE,ORY="4^No date range specified." G CHKQ
 | 
|---|
| 78 |  IF $P(REPORT,U,4)=1,$G(ORHSTYPE)=0,'$O(ORCOMP(0)) S OROK=FALSE,ORY="10^No Adhoc components specified." G CHKQ
 | 
|---|
| 79 |  IF $P(REPORT,U,4)=1,'$G(ORHSTYPE),$P($G(ORHSTYPE),":")'=0 S OROK=FALSE,ORY="5^No health summary type specified." G CHKQ
 | 
|---|
| 80 |  IF $P(REPORT,U,4)=3,'$G(OREXAMID) S OROK=FALSE,ORY="7^No exam identified" G CHKQ
 | 
|---|
| 81 |  IF $P(REPORT,U,4)=4,'$L($G(OREXAMID)) S OROK=FALSE,ORY="9^No assessment identified" G CHKQ
 | 
|---|
| 82 |  IF $P(REPORT,U,4)=19,'$L($G(OREXAMID)) S OROK=FALSE,ORY="8^No procedure date identified" G CHKQ
 | 
|---|
| 83 |  IF '$D(^DPT(+$G(ORDFN),0)) S OROK=FALSE,ORY="6^Patient specified is not valid." G CHKQ
 | 
|---|
| 84 |  S OROK=TRUE
 | 
|---|
| 85 | CHKQ Q OROK
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | DEQUE ; -- logic to print queued report
 | 
|---|
| 88 |  ; -- call build report logic
 | 
|---|
| 89 |  N I,J,X0,X1,X2,X4,SITE,RTN,ENT,ID,ORID,ORHEADER,ORI,ORX,ORVP,OUT,PENT,POUT,PRTN,ROOT,MAX
 | 
|---|
| 90 |  S ORVP=ORDFN_";DPT(",ROOT="ORDATA",POUT=""
 | 
|---|
| 91 |  S I=0,(X1,X2,ORID,REPORT)="",SITE=$$SITE^VASITE,SITE=$P(SITE,"^",2)_";"_$P(SITE,"^",3)
 | 
|---|
| 92 |  F  S I=$O(^ORD(101.24,"AC",I)) Q:I=""  S J=0 F  S J=$O(^ORD(101.24,"AC",I,J)) Q:'J  D
 | 
|---|
| 93 |  . I $P($G(^ORD(101.24,J,0)),"^",2)=ORRPTID,$P(^(0),"^",8)="R" S X0=^(0),X2=$G(^(2)),ORID=$P(X2,"^",3),ORFHIE=$G(^(4)),X4=$P(ORFHIE,"^",2),ORFHIE=$P(ORFHIE,"^",3)
 | 
|---|
| 94 |  I '$L(X0) D NOTYET(.ROOT) Q
 | 
|---|
| 95 |  S RTN=$P(X0,"^",5),ENT=$P(X0,"^",6)
 | 
|---|
| 96 |  I '$L(RTN)!'$L(ENT) D NOTYET(.ROOT) Q
 | 
|---|
| 97 |  I '$L($T(@(ENT_"^"_RTN))) D NOTYET(.ROOT) Q
 | 
|---|
| 98 |  S PRTN=$P(X2,"^",7),PENT=$P(X2,"^",6)
 | 
|---|
| 99 |  I $G(ORALPHA) S X=ORALPHA-$G(OROMEGA) D
 | 
|---|
| 100 |  . I X<0 S X=X*(-1)
 | 
|---|
| 101 |  . I X4,X>X4 S:ORALPHA>OROMEGA OROMEGA=$$FMADD^XLFDT(ORALPHA,-X4) S:ORALPHA'>OROMEGA ORALPHA=$$FMADD^XLFDT(OROMEGA,-X4) S ORDTRNG=""
 | 
|---|
| 102 |  I X4,$G(ORDTRNG)>X4 S ORDTRNG=X4,ORALPHA=""
 | 
|---|
| 103 |  I $L($G(ORDTRNG)),'$G(ORALPHA) S ORALPHA=$$FMADD^XLFDT(DT,-ORDTRNG),OROMEGA=DT_".235959"
 | 
|---|
| 104 |  I $G(OROMEGA),$E(OROMEGA,8)'="." S OROMEGA=OROMEGA_".235959"
 | 
|---|
| 105 |  S ID=$G(ORHSTAG),$P(ID,";",5,8)=SITE_";"_$P(X2,"^",8)_";"_$P(X2,"^",9)
 | 
|---|
| 106 |  I $L($P($G(ORHSTAG),";",4)) S MAX=$P(ORHSTAG,";",4)
 | 
|---|
| 107 |  I $L($G(ORHSTYPE)) M ID=ORHSTYPE
 | 
|---|
| 108 |  I $L($G(OREXAMID)) M ID=OREXAMID
 | 
|---|
| 109 |  I $L(PRTN),$L(PENT),$L($T(@(PENT_"^"_PRTN))) S POUT=PENT_"^"_PRTN_"(.ROOT,ORDFN,.ID,.ORALPHA,.OROMEGA,.ORDTRNG,.REMOTE,.MAX,.ORFHIE)"
 | 
|---|
| 110 |  S OUT=ENT_"^"_RTN_"(.ROOT,ORDFN,.ID,.ORALPHA,.OROMEGA,.ORDTRNG,.REMOTE,.MAX,.ORFHIE)"
 | 
|---|
| 111 |  I '$O(ORHANDS(0)) D  G OUT
 | 
|---|
| 112 |  . N ORY,PAGE
 | 
|---|
| 113 |  . I $L(POUT) D @POUT Q  ;Go to non-standard print routine
 | 
|---|
| 114 |  . D @OUT
 | 
|---|
| 115 |  . Q:'$L(ROOT)
 | 
|---|
| 116 |  . S PAGE=1
 | 
|---|
| 117 |  . D HEAD^ORWRPP1(ORDFN,PAGE,ORID,$G(STATION))
 | 
|---|
| 118 |  . D HURL^ORWRPP1(.ROOT,ORDFN,ORID)
 | 
|---|
| 119 |  S ORI=0
 | 
|---|
| 120 |  F  S ORI=$O(ORHANDS(ORI)) Q:'ORI  S ORX=ORHANDS(ORI) D
 | 
|---|
| 121 |  . N ORY,PAGE,ORALPHA,OROMEGA
 | 
|---|
| 122 |  . D RTNDATA^XWBDRPC(.ORY,$P(ORX,"^",2))
 | 
|---|
| 123 |  . S:ORY="" ORY="ORY"
 | 
|---|
| 124 |  . S PAGE=1,ORALPHA=$P(ORX,"^",3),OROMEGA=$P(ORX,"^",4)
 | 
|---|
| 125 |  . D HEAD^ORWRPP1(ORDFN,PAGE,ORID,$P(ORX,"^"))
 | 
|---|
| 126 |  . D HURL^ORWRPP1(.ORY,ORDFN,ORID,1,$P(ORX,"^"))
 | 
|---|
| 127 | OUT I $L($G(ROOT)) K @ROOT
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 | SITE(ORSTA)   ;Print Station info
 | 
|---|
| 130 |  N X
 | 
|---|
| 131 |  I $G(ORSTA) S ORSTA=$$IEN^XUAF4(ORSTA)
 | 
|---|
| 132 |  S:'$L($G(ORSTA)) ORSTA=$G(DUZ(2))
 | 
|---|
| 133 |  S X="Report from: "_$$GET1^DIQ(4,+ORSTA,.01,"E")_"    Station #"_$$GET1^DIQ(4,+ORSTA,99,"E")
 | 
|---|
| 134 |  W !?(IOM/2-($L(X)/2)),X
 | 
|---|
| 135 |  Q
 | 
|---|
| 136 | NOTYET(ROOT) ; -- standard not available display text
 | 
|---|
| 137 |  D SETITEM(.ROOT,"Report not available at this time.")
 | 
|---|
| 138 |  Q
 | 
|---|
| 139 | SETITEM(ROOT,X) ; -- set item in list
 | 
|---|
| 140 |  S @ROOT@($O(@ROOT@(9999),-1)+1)=X
 | 
|---|
| 141 |  Q
 | 
|---|