| 1 | ORCACT ; SLC/MKB - Act on orders ;4/2/02  16:41
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**7,48,92,94,141**;Dec 17, 1997
 | 
|---|
| 3 | ADD ; -- add new order via NW on pkg results tab
 | 
|---|
| 4 |  ;    Requires ORDIALOG = name of pkg dialog
 | 
|---|
| 5 |  N ORPTLK,OREVENT,X S VALMBCK="" G:'$L($G(ORDIALOG)) ADQ
 | 
|---|
| 6 |  S ORPTLK=$$LOCK^ORX2(+ORVP) I 'ORPTLK W !!,$C(7),$P(ORPTLK,U,2) H 2 Q
 | 
|---|
| 7 |  D FREEZE^ORCMENU S VALMBCK="R"
 | 
|---|
| 8 |  I $G(ORTAB)'="COVER" S X=$$DELAY G:X="^" ADQ I X D  G:X="^" ADQ
 | 
|---|
| 9 |  . S X=$$PTEVENT^OREVNT(+ORVP,1)
 | 
|---|
| 10 |  . S:X'="^" OREVENT=+X
 | 
|---|
| 11 |  S ORNP=$$PROVIDER^ORCMENU1 G:ORNP="^" ADQ
 | 
|---|
| 12 |  S:'$G(ORL) ORL=$$LOCATION^ORCMENU1 G:ORL["^" ADQ
 | 
|---|
| 13 |  S ORDIALOG=$O(^ORD(101.41,"AB",$E(ORDIALOG,1,63),0)) G:'ORDIALOG ADQ
 | 
|---|
| 14 |  D ADD^ORCDLG,REBLD^ORCMENU:$D(^TMP("ORNEW",$J))
 | 
|---|
| 15 |  K ORDIALOG,^TMP("ORWORD",$J),^TMP("ORECALL",$J) S VALMBCK="R"
 | 
|---|
| 16 | ADQ S:$D(^TMP("OR",$J,"CURRENT","MENU")) XQORM("HIJACK")=^("MENU")
 | 
|---|
| 17 |  D:'$D(^TMP("ORNEW",$J)) UNLOCK^ORX2(+ORVP) ;unlock if no new orders
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | EDIT ; -- change orders
 | 
|---|
| 21 |  D EN("XX") Q
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 | RENEW ; -- renew orders
 | 
|---|
| 24 |  D EN("RN") Q
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 | REWRITE ; -- rewrite orders
 | 
|---|
| 27 |  N OREVENT,X S X=$$DELAY Q:X="^"  I X D  Q:X="^"
 | 
|---|
| 28 |  . S X=$$PTEVENT^OREVNT(+ORVP,1)
 | 
|---|
| 29 |  . S:X'="^" OREVENT=+X
 | 
|---|
| 30 |  D EN("RW") Q
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 | HOLD ; -- hold orders
 | 
|---|
| 33 |  D EN("HD") Q
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | UNHOLD ; -- release hold on orders
 | 
|---|
| 36 |  D EN("RL") Q
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | EN(ORACT) ; -- start here with:
 | 
|---|
| 39 |  ;    ORNMBR = #,#,...,# of selected orders
 | 
|---|
| 40 |  ;    ORACT  = action to be taken on orders
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  ;    OREBUILD defined on return if Orders tab needs to be rebuilt
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  N ORI,NMBR,ORQUIT,ORIFN,ORIG,ORSIG,OREL,ORPTLK,ORLK,IDX,ORDITM,ORPRINT,ORERR,ORDER,ORSTS,ORPRNT,ORNOW,ORDG,ORXNP S VALMBCK=""
 | 
|---|
| 45 |  S ORPTLK=$$LOCK^ORX2(+ORVP) I 'ORPTLK W !!,$C(7),$P(ORPTLK,U,2) H 2 Q
 | 
|---|
| 46 |  I '$G(ORNMBR) S ORNMBR=$$ORDERS^ORCHART("") G:'ORNMBR ENQ
 | 
|---|
| 47 |  D FREEZE^ORCMENU S VALMBCK="R" K OREBUILD
 | 
|---|
| 48 |  S ORNP=$$PROVIDER^ORCMENU1 G:ORNP="^" ENQ
 | 
|---|
| 49 |  S:'$G(ORL) ORL=$$LOCATION^ORCMENU1 G:ORL="^" ENQ
 | 
|---|
| 50 | EN1 F ORI=1:1:$L(ORNMBR,",") S NMBR=$P(ORNMBR,",",ORI) D:NMBR  Q:$D(ORQUIT)
 | 
|---|
| 51 |  . S IDX=$G(^TMP("OR",$J,ORTAB,"IDX",NMBR))
 | 
|---|
| 52 |  . S ORIFN=$S(ORTAB="MEDS":$P(IDX,U,4),1:$P(IDX,U)) Q:'ORIFN
 | 
|---|
| 53 |  . I '$D(^OR(100,+ORIFN,0)) W !,"This order has been deleted!" H 2 Q
 | 
|---|
| 54 |  . S:'$P(ORIFN,";",2) ORIFN=+ORIFN_";"_+$P($G(^OR(100,+ORIFN,3)),U,7)
 | 
|---|
| 55 |  . S ORIG=+ORIFN,ORDITM=$$ORDITEM(ORIFN) D SUBHDR(ORDITM)
 | 
|---|
| 56 |  . I '$$VALID^ORCACT0(ORIFN,ORACT,.ORERR) W !,ORERR H 2 Q
 | 
|---|
| 57 |  . I $$NMSP^ORCD(+$P(^OR(100,+ORIFN,0),U,14))="PS" D PROVIDER^ORCDPSIV Q:$G(ORQUIT)
 | 
|---|
| 58 |  . S ORLK=$S('$D(^TMP("ORNEW",$J,ORIG)):$$LOCK1^ORX2(ORIG),1:1) I 'ORLK W !,$P(ORLK,U,2) H 2 Q
 | 
|---|
| 59 |  . D @(ORACT_"^ORCACT4") ;sets ^TMP("ORNEW",$J,ORIFN),[ORIFN]
 | 
|---|
| 60 |  . D:'$O(^TMP("ORNEW",$J,ORIG,0)) UNLK1^ORX2(ORIG) ;unlk if not chngd
 | 
|---|
| 61 |  S:$O(^TMP("ORNEW",$J,0)) OREBUILD=1
 | 
|---|
| 62 | ENQ D:'$D(^TMP("ORNEW",$J)) UNLOCK^ORX2(+ORVP) ;unlock if no new orders
 | 
|---|
| 63 |  S:$G(ORXNP) ORNP=ORXNP
 | 
|---|
| 64 |  Q
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | ORDITEM(ID) ; -- Returns order text
 | 
|---|
| 67 |  ;N X,I,MORE S X=""
 | 
|---|
| 68 |  ;I $P(ID,";",2)>1 S I=$P($G(^OR(100,+ID,8,+$P(ID,";",2),0)),U,2),X=$S(I="DC":"Discontinue ",I="HD":"Hold ",1:"")
 | 
|---|
| 69 |  ;S I=$O(^OR(100,+ID,1,0)) Q:'I "" S MORE=$O(^(I)),X=X_$G(^(I,0))
 | 
|---|
| 70 |  ;I $L(X)>68 S MORE=1,X=$E(X,1,68)
 | 
|---|
| 71 |  ;S:MORE X=X_" ..."
 | 
|---|
| 72 |  N X,ORX D TEXT^ORQ12(.ORX,ID,68) S X=ORX(1)_$S(ORX>1:" ...",1:"")
 | 
|---|
| 73 |  Q X
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | SUBHDR(X) ; -- Display subheader of order being acted on
 | 
|---|
| 76 |  W !!,?(36-($L(X)\2)),"-- "_X_" --",!
 | 
|---|
| 77 |  Q
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | DELAY() ; -- Delay release of orders?
 | 
|---|
| 80 |  I '$D(^ORD(100.5,"C")) Q 0 ;no active events
 | 
|---|
| 81 |  N X,Y,DIR S DIR(0)="YA",DIR("B")="NO"
 | 
|---|
| 82 |  S DIR("A")="Delay release of these orders? "
 | 
|---|
| 83 |  S DIR("?")="Enter NO to release these orders immediately upon signature; YES will delay release of these orders until the specified patient movement occurs."
 | 
|---|
| 84 |  D ^DIR S:$D(DTOUT)!$D(DUOUT) Y="^"
 | 
|---|
| 85 |  Q Y
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | EX ; -- exit action
 | 
|---|
| 88 |  I $G(OREBUILD) D  ;rebuild tabs
 | 
|---|
| 89 |  . I $G(ORTAB)="ORDERS"!($G(ORTAB)="DELAY") D  Q
 | 
|---|
| 90 |  .. N TAB D TAB^ORCHART(ORTAB,1)
 | 
|---|
| 91 |  .. F TAB="MEDS","CONSULTS" S:$D(^TMP("OR",$J,TAB,0)) $P(^(0),U)=""
 | 
|---|
| 92 |  . S:$D(^TMP("OR",$J,"ORDERS",0)) $P(^(0),U)="" ;rebld next time
 | 
|---|
| 93 |  . D:$G(ORTAB)="NEW" INIT^ORCMENU2 ;when called from RV
 | 
|---|
| 94 |  I $G(ORTAB)'="NEW",$D(^TMP("OR",$J,"CURRENT","MENU")) S XQORM("HIJACK")=^("MENU")
 | 
|---|
| 95 |  Q
 | 
|---|