[613] | 1 | ORCMEDT7 ;SLC/JM-QO,Edit Quick Orders By User ;2/1/06
|
---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**245**;Dec 17, 1997;Build 2
|
---|
| 3 | Q
|
---|
| 4 | QCKBYUSR ; Edit quick orders by user
|
---|
| 5 | N ORDGINFO,ORTEXT,ORIEN,ORFMDATA,ORUSER,ORDG,ORLINE0
|
---|
| 6 | K ^TMP("ORWDQUSR",$J)
|
---|
| 7 | S ORUSER=0
|
---|
| 8 | F S ORDGINFO=$$QCKUSRDG(ORUSER) Q:ORDGINFO=0 S:ORDGINFO<0 ORUSER=0 I +ORDGINFO>0,$D(^ORD(101.41,+ORDGINFO,0)) D
|
---|
| 9 | . S ORIEN=$P(ORDGINFO,U,1)
|
---|
| 10 | . S ORFMDATA=$P(ORDGINFO,U,2)
|
---|
| 11 | . S ORUSER=$P(ORDGINFO,U,3)
|
---|
| 12 | . S ORLINE0=$G(^ORD(101.41,ORIEN,0))
|
---|
| 13 | . S ORTEXT=$P(ORLINE0,U,2)
|
---|
| 14 | . S ORDG=+$P(ORLINE0,U,5)
|
---|
| 15 | . D QCK0^ORCMEDT1(ORIEN) ; edit quick order
|
---|
| 16 | . D VERIFYDA(.ORFMDATA,ORIEN)
|
---|
| 17 | . I +ORFMDATA D
|
---|
| 18 | . . ; If quick order not deleted, and display text changes, change 101.44 display text to match
|
---|
| 19 | . . I $D(^ORD(101.41,ORIEN,0)),ORTEXT'=$P(^ORD(101.41,ORIEN,0),U,2) D
|
---|
| 20 | . . . N DIE,DA,DR,DIDEL
|
---|
| 21 | . . . S DA(1)=$P(ORFMDATA,";",1)
|
---|
| 22 | . . . S DIE="^ORD(101.44,"_DA(1)_",10,"
|
---|
| 23 | . . . S DA=$P(ORFMDATA,";",2)
|
---|
| 24 | . . . ; 101.44 Display text holds 132 chars, 101.41 only 80. so this is ok
|
---|
| 25 | . . . S DR="2///"_$P(^ORD(101.41,ORIEN,0),U,2)
|
---|
| 26 | . . . D ^DIE
|
---|
| 27 | . K ^TMP("ORWDQUSR",$J,"A",ORUSER) ; Force reload of user Quick Order info
|
---|
| 28 | . W !
|
---|
| 29 | K ^TMP("ORWDQUSR",$J)
|
---|
| 30 | Q
|
---|
| 31 | QCKUSRDG(ORLSTUSR) ; Get quick order dialog by user
|
---|
| 32 | N DIC,DIR,DA,X,Y,ORIDX,ORUSER,ORLEN,ORPRE,ORDIALOG,ORHEADER,ORGROUP,ORCOUNT,USERNAME
|
---|
| 33 | N DTOUT,DUOUT,DIROUT,DIRUT,OREXIT,ORINPUT,ORDGNAME,ORDGIEN,ORLASTGP,ORFMDATA,ORFIRST
|
---|
| 34 | S ORDIALOG=0
|
---|
| 35 | S ORUSER=$$GETUSER(ORLSTUSR)
|
---|
| 36 | I ORUSER>0 D
|
---|
| 37 | . S ORPRE="ORWDQ USR"_ORUSER,ORLEN=$L(ORPRE)
|
---|
| 38 | . S ORIDX=$O(^ORD(101.44,"B",ORPRE))
|
---|
| 39 | . I $E(ORIDX,1,ORLEN)=ORPRE D I 1
|
---|
| 40 | . . D QULIST(ORUSER)
|
---|
| 41 | . . S USERNAME=$P($G(^VA(200,ORUSER,0)),U,1)
|
---|
| 42 | . . S ORHEADER=USERNAME_" personal quick orders:"
|
---|
| 43 | . . S ORCOUNT=0,ORIDX=0,OREXIT=0,ORLASTGP=U,ORFIRST=1
|
---|
| 44 | . . F S ORIDX=$O(^TMP("ORWDQUSR",$J,"A",ORUSER,ORIDX)) Q:'+ORIDX D Q:+OREXIT!(ORDIALOG>0)
|
---|
| 45 | . . . S ORCOUNT=ORCOUNT+1
|
---|
| 46 | . . . I ORCOUNT=1 D
|
---|
| 47 | . . . . I ORFIRST S ORFIRST=0 W !,!
|
---|
| 48 | . . . . W !,ORHEADER,!
|
---|
| 49 | . . . S ORGROUP=$O(^TMP("ORWDQUSR",$J,"A",ORUSER,ORIDX,""))
|
---|
| 50 | . . . S ORDGIEN=$O(^TMP("ORWDQUSR",$J,"A",ORUSER,ORIDX,ORGROUP,""))
|
---|
| 51 | . . . S ORFMDATA=$O(^TMP("ORWDQUSR",$J,"A",ORUSER,ORIDX,ORGROUP,ORDGIEN,""))
|
---|
| 52 | . . . S ORDGNAME=$G(^TMP("ORWDQUSR",$J,"A",ORUSER,ORIDX,ORGROUP,ORDGIEN,ORFMDATA))
|
---|
| 53 | . . . I (ORCOUNT=1)!(ORGROUP'=ORLASTGP) D
|
---|
| 54 | . . . . S ORLASTGP=ORGROUP
|
---|
| 55 | . . . . S ORCOUNT=ORCOUNT+1
|
---|
| 56 | . . . . W ?4,ORGROUP,!
|
---|
| 57 | . . . W ?7,ORIDX,?12,ORDGNAME,!
|
---|
| 58 | . . . I ORCOUNT'<18 D
|
---|
| 59 | . . . . S DIR("A",1)="Press <RETURN> to see more, '^' to exit this list, OR"
|
---|
| 60 | . . . . S ORDIALOG=$$QUIDX()
|
---|
| 61 | . . . . S ORCOUNT=0
|
---|
| 62 | . . I ORDIALOG'>0,'+OREXIT D
|
---|
| 63 | . . . S ORIDX=$O(^TMP("ORWDQUSR",$J,"A",ORUSER,999999),-1)
|
---|
| 64 | . . . I ORIDX<1 D I 1
|
---|
| 65 | . . . . ; If user had quick orders, but doesn't any more, there will be false positives in "B" xref
|
---|
| 66 | . . . . D QULIST(0)
|
---|
| 67 | . . . . K ^TMP("ORWDQUSR",$J,"B",USERNAME)
|
---|
| 68 | . . . . D SHOWUSRS
|
---|
| 69 | . . . E D
|
---|
| 70 | . . . . S DIR("A",1)=""
|
---|
| 71 | . . . . S ORDIALOG=$$QUIDX()
|
---|
| 72 | . E D SHOWUSRS
|
---|
| 73 | Q ORDIALOG
|
---|
| 74 | GETUSER(ORUSER) ;
|
---|
| 75 | I +ORUSER Q ORUSER
|
---|
| 76 | N DIC,Y,X,DLAYGO,DINUM
|
---|
| 77 | S DIC="^VA(200,",DIC(0)="AEMQ"
|
---|
| 78 | D ^DIC
|
---|
| 79 | Q +Y
|
---|
| 80 | SHOWUSRS ;
|
---|
| 81 | S ORDIALOG=-1 ; Repeats loop
|
---|
| 82 | W !,!,$P($G(^VA(200,ORUSER,0)),U,1)_" does not have any personal quick orders."
|
---|
| 83 | S DIR("A")="Would you like to see a list of users with personal quick orders"
|
---|
| 84 | S DIR(0)="Y",DIR("B")="YES"
|
---|
| 85 | D ^DIR
|
---|
| 86 | I +Y D I 1
|
---|
| 87 | . W !,!," Choose from:",!
|
---|
| 88 | . D QULIST(0)
|
---|
| 89 | . S ORUSER="",ORIDX=2,OREXIT=0
|
---|
| 90 | . F S ORUSER=$O(^TMP("ORWDQUSR",$J,"B",ORUSER)) Q:OREXIT!(ORUSER="") D Q:OREXIT
|
---|
| 91 | . . W " ",ORUSER,!
|
---|
| 92 | . . S ORIDX=ORIDX+1
|
---|
| 93 | . . I ORIDX=22 D
|
---|
| 94 | . . . S ORIDX=0
|
---|
| 95 | . . . R " '^' TO STOP: ",ORINPUT:$G(DTIME,300)
|
---|
| 96 | . . . E S OREXIT=1
|
---|
| 97 | . . . W $C(13),$J("",20),$C(13) Q:OREXIT
|
---|
| 98 | . . . I ORINPUT[U S OREXIT=1
|
---|
| 99 | E I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) S ORDIALOG=0
|
---|
| 100 | Q
|
---|
| 101 | QUIDX() ; Get quick order dialog info
|
---|
| 102 | N ORGROUP,ORDGIEN,ORFMDATA,ORRESULT
|
---|
| 103 | S DIR("A")="CHOOSE 1-"_ORIDX_": "
|
---|
| 104 | S DIR(0)="NOA^1:"_ORIDX
|
---|
| 105 | D ^DIR
|
---|
| 106 | I +Y>0,+Y'>ORIDX D Q ORRESULT
|
---|
| 107 | . S ORGROUP=$O(^TMP("ORWDQUSR",$J,"A",ORUSER,+Y,""))
|
---|
| 108 | . S ORDGIEN=$O(^TMP("ORWDQUSR",$J,"A",ORUSER,+Y,ORGROUP,""))
|
---|
| 109 | . I $$CONFLICT(ORUSER,ORDGIEN) S OREXIT=1,ORRESULT=-1 Q
|
---|
| 110 | . S ORFMDATA=$O(^TMP("ORWDQUSR",$J,"A",ORUSER,+Y,ORGROUP,ORDGIEN,""))
|
---|
| 111 | . S ORRESULT=ORDGIEN_U_ORFMDATA_U_ORUSER
|
---|
| 112 | W !
|
---|
| 113 | I Y[U S OREXIT=1
|
---|
| 114 | Q -1 ; -1 Value repeats the enter name loop / 0 exits loop
|
---|
| 115 | QULIST(ORUSER) ; Build user info
|
---|
| 116 | N PRE,ID,LEN
|
---|
| 117 | S PRE="ORWDQ USR"
|
---|
| 118 | I ORUSER=0 D Q
|
---|
| 119 | . ; "B" node is list of all users with Quick Orders
|
---|
| 120 | . I $D(^TMP("ORWDQUSR",$J,"B")) Q
|
---|
| 121 | . N LASTUSER,USERNAME,USER
|
---|
| 122 | . S LASTUSER=0,ID=PRE,LEN=$L(PRE)
|
---|
| 123 | . F S ID=$O(^ORD(101.44,"B",ID)) Q:($E(ID,1,LEN)'=PRE) D
|
---|
| 124 | . . S USER=$P($E(ID,LEN+1,999)," ")
|
---|
| 125 | . . I USER'=LASTUSER D
|
---|
| 126 | . . . S LASTUSER=USER
|
---|
| 127 | . . . S USERNAME=$P($G(^VA(200,USER,0)),U,1)
|
---|
| 128 | . . . S ^TMP("ORWDQUSR",$J,"B",USERNAME)=""
|
---|
| 129 | . Q
|
---|
| 130 | ;
|
---|
| 131 | ; "A" node is list of quick orders for an individual user
|
---|
| 132 | ; Temp array nodes are "ORWDQUSR",$J,"A"
|
---|
| 133 | ; User IEN, Index Number, Display Group, Quick Order IEN, 101.44 IEN
|
---|
| 134 | ; Data value is Quick Order Name - (Name can be 132 chars so can't be node)
|
---|
| 135 | ;
|
---|
| 136 | I $D(^TMP("ORWDQUSR",$J,"A",ORUSER)) Q
|
---|
| 137 | N GROUP,IDX,NUMBER,QOINDEX,QCKORDER,ORFMDATA
|
---|
| 138 | S PRE=PRE_ORUSER,ID=PRE,NUMBER=0,LEN=$L(PRE)
|
---|
| 139 | F S ID=$O(^ORD(101.44,"B",ID)) Q:($E(ID,1,LEN)'=PRE) D
|
---|
| 140 | . S GROUP=$P(ID," ",3,999)
|
---|
| 141 | . S GROUP=$O(^ORD(100.98,"B",GROUP,0))
|
---|
| 142 | . I +GROUP S GROUP=$P($G(^ORD(100.98,GROUP,0)),U,1)
|
---|
| 143 | . S IDX=$O(^ORD(101.44,"B",ID,0)),QOINDEX=0
|
---|
| 144 | . F S QOINDEX=$O(^ORD(101.44,IDX,10,QOINDEX)) Q:'+QOINDEX D
|
---|
| 145 | . . S QCKORDER=$G(^ORD(101.44,IDX,10,QOINDEX,0))
|
---|
| 146 | . . I +QCKORDER,+$D(^ORD(101.41,+QCKORDER)) D
|
---|
| 147 | . . . S NUMBER=NUMBER+1
|
---|
| 148 | . . . S ORFMDATA=IDX_";"_QOINDEX
|
---|
| 149 | . . . S ^TMP("ORWDQUSR",$J,"A",ORUSER,NUMBER,GROUP,$P(QCKORDER,U,1),ORFMDATA)=$P(QCKORDER,U,2)
|
---|
| 150 | Q
|
---|
| 151 | VERIFYDA(ORFMDATA,ORIEN) ;
|
---|
| 152 | ; Make sure FileMan pointers are still correct
|
---|
| 153 | ; - may have changes via CPRS GUI or QCK0^ORCMEDT1(ORIEN)
|
---|
| 154 | N IDX1,IDX2,IEN
|
---|
| 155 | S IDX1=$P(ORFMDATA,";",1)
|
---|
| 156 | S IDX2=$P(ORFMDATA,";",2)
|
---|
| 157 | S IEN=$P($G(^ORD(101.44,IDX1,10,IDX2,0)),U,1)
|
---|
| 158 | I IEN=ORIEN Q
|
---|
| 159 | S ORFMDATA=""
|
---|
| 160 | S IDX2=0
|
---|
| 161 | F S IDX2=$O(^ORD(101.44,IDX1,10,IDX2)) Q:'+IDX2 D Q:+ORFMDATA
|
---|
| 162 | . I $P($G(^ORD(101.44,IDX1,10,IDX2,0)),U,1)=ORIEN S ORFMDATA=IDX1_";"_IDX2
|
---|
| 163 | Q
|
---|
| 164 | CONFLICT(ORUSER,DIALOG) ; Determine if another user shares the personal quick order
|
---|
| 165 | N DG,OTHERS,USR,NAME,ABORT,DIR,Y,DA,X,DTOUT,DUOUT,DIROUT,DIRUT,COUNT,TEMP
|
---|
| 166 | S (DG,ABORT)=0
|
---|
| 167 | F S DG=$O(^ORD(101.44,"C",DIALOG,DG)) Q:'+DG D
|
---|
| 168 | . S USR=$P($G(^ORD(101.44,DG,0)),U,1)
|
---|
| 169 | . I $P(USR," ",1)="ORWDQ" D
|
---|
| 170 | . . S USR=$P(USR," ",2)
|
---|
| 171 | . . I $E(USR,1,3)="USR" D
|
---|
| 172 | . . . S USR=$E(USR,4,999)
|
---|
| 173 | . . . I USR'=ORUSER D
|
---|
| 174 | . . . . S NAME=$P($G(^VA(200,USR,0)),U,1)
|
---|
| 175 | . . . . S OTHERS(NAME)=""
|
---|
| 176 | I $D(OTHERS) D
|
---|
| 177 | . S OTHERS($P($G(^VA(200,ORUSER,0)),U,1))=""
|
---|
| 178 | . W !,$C(7),!,!
|
---|
| 179 | . W " *********************",!
|
---|
| 180 | . W " ***** WARNING *****",!
|
---|
| 181 | . W " *********************",!,!
|
---|
| 182 | . W " Multiple users share this personal quick order.",!
|
---|
| 183 | . W " Modifying this personal quick order will change",!
|
---|
| 184 | . W " it for all of the following users:",!,!
|
---|
| 185 | . S NAME="",COUNT=7
|
---|
| 186 | . F S NAME=$O(OTHERS(NAME)) Q:NAME="" D Q:ABORT
|
---|
| 187 | . . S COUNT=COUNT+1
|
---|
| 188 | . . I COUNT>20 D Q:ABORT
|
---|
| 189 | . . . S COUNT=0,TEMP=""
|
---|
| 190 | . . . W !
|
---|
| 191 | . . . R " Press <RETURN> to continue, '^' to exit: ",TEMP:$G(DTIME,300)
|
---|
| 192 | . . . E S ABORT=1
|
---|
| 193 | . . . W $C(13),$J("",50),$C(13) Q:ABORT
|
---|
| 194 | . . . I (TEMP[U)!$D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) S ABORT=1
|
---|
| 195 | . . W " ",NAME,!
|
---|
| 196 | . I 'ABORT D
|
---|
| 197 | . . S DIR("A")="Are you sure you want to edit this personal quick order? "
|
---|
| 198 | . . S DIR(0)="YA",DIR("B")="NO" W ! D ^DIR
|
---|
| 199 | . . W !
|
---|
| 200 | . . I '+Y S ABORT=1
|
---|
| 201 | Q ABORT
|
---|