PSGWCHG ;BHAM ISC/CML-AR/WS Mass Ward Conversion ; 06 Aug 93 / 2:18 PM
;;2.3; Automatic Replenishment/Ward Stock ;;4 JAN 94
W !!,"This routine will allow you to do a mass conversion of all active items in",!,"an active AOU from an old Ward designation to a new Ward designation."
D SEL^PSGWUTL1 G:'$D(SEL) QUIT I SEL="I" F JJ=0:0 S JJ=$O(AOULP(JJ)) Q:'JJ I $S('$D(^PSI(58.1,JJ,"I")):0,'^("I"):0,^("I")>DT:0,1:1) K AOULP(JJ)
G:SEL="I" ASK
F QQ=0:0 S DIC="^PSI(58.1,",DIC(0)="QEAM",DIC("S")="I $S('$D(^(""I"")):1,'^(""I""):1,^(""I"")>DT:1,1:0)" D ^DIC K DIC Q:Y<0 S AOULP(+Y)=""
I '$D(AOULP)&(X'="^ALL") G QUIT
I X="^ALL" F AOU=0:0 S AOU=$O(^PSI(58.1,AOU)) Q:'AOU I $S('$D(^PSI(58.1,AOU,"I")):1,'^("I"):1,^("I")>DT:1,1:0) S AOULP(AOU)=""
ASK G:'$D(AOULP) QUIT
OLD R !!,"Select OLD WARD: ",X:DTIME S:'$T X="^" G:"^"[X QUIT W:X?1."?" !!,"Enter the Ward that currently exists in the WARD (FOR ITEM) field.",! S DIC="^DIC(42,",DIC(0)="QEM" D ^DIC K DIC G:Y<0 OLD S OLD=+Y
NEW R !!,"Select NEW WARD: ",X:DTIME S:'$T X="^" G:"^"[X QUIT W:X?1."?" !!,"Enter the new Ward you wish to replace ",$P(^DIC(42,OLD,0),"^"),".",!
S DIC="^DIC(42,",DIC(0)="QEM",DIC("S")="I $S(+Y=OLD:0,'$D(^(""I"")):1,^(""I"")="""":1,1:0)" D ^DIC K DIC G:Y<0 NEW S NEW=+Y
QUE F QQ=0:0 W !!,"Do you want to queue this job" S %=1 D YN^DICN Q:% W !!,"If you want to queue this job to run at a later time, accept the ",!,"default, otherwise enter 'N' to run it immediately or '^' to Exit"
G:%<0 QUIT S QUE=$S(%=1:1,1:0) I QUE W !!,"You will be notified by MailMan when the job is completed.",!
I %=1 S ZTIO="",ZTRTN="START^PSGWCHG",ZTDESC="AR/WS MASS WARD CONVERSION" S:$D(AOULP) ZTSAVE("AOULP(")="" F G="OLD","NEW","QUE" S:$D(@G) ZTSAVE(G)=""
I D ^%ZTLOAD,HOME^%ZIS K ZTSK G QUIT
START ;
K ^TMP("PSGWOLD",$J) S (ITEMCNT,MEDRCNT)=0
F DRUG=0:0 S DRUG=$O(^PSI(58.1,"D",DRUG)) Q:'DRUG F MEDR=0:0 S MEDR=$O(^PSI(58.1,"D",DRUG,OLD,MEDR)) Q:'MEDR I $D(AOULP(MEDR)) S ITEM=$O(^PSI(58.1,MEDR,1,"B",DRUG,0)) I +ITEM S ^TMP("PSGWOLD",$J,MEDR,ITEM)=""
I $D(^TMP("PSGWOLD",$J)) F MEDR=0:0 S MEDR=$O(^TMP("PSGWOLD",$J,MEDR)) Q:'MEDR S MEDRCNT=MEDRCNT+1 F ITEM=0:0 S ITEM=$O(^TMP("PSGWOLD",$J,MEDR,ITEM)) Q:'ITEM S ITEMCNT=ITEMCNT+1 D CHK
I 'QUE W *7,!!,"Total Stock Items converted: ",ITEMCNT,!,"Total AOU(s) converted: ",MEDRCNT,! G QUIT
MAIL ;
K XMY D NOW^%DTC S Y=X X ^DD("DD") S RDT=Y S ^TMP("PSGWMSG",$J,1,0)="AR/WS Ward Conversion Background job has run to completion.",^TMP("PSGWMSG",$J,2,0)="Run Date: "_RDT,^TMP("PSGWMSG",$J,3,0)=""
S ^TMP("PSGWMSG",$J,4,0)="Old Ward: "_$P(^DIC(42,OLD,0),"^")_" converted to New Ward: "_$P(^DIC(42,NEW,0),"^"),^TMP("PSGWMSG",$J,5,0)="Total number of AOUs converted: "_MEDRCNT
S ^TMP("PSGWMSG",$J,6,0)="Total number of Stock Items converted: "_ITEMCNT
S XMSUB="AR/WS MASS WARD CONVERSION SUMMARY",XMDUZ="INPATIENT PHARMACY AR/WS",XMTEXT="^TMP(""PSGWMSG"",$J,",XMY(DUZ)="" S:'$D(XMY) XMY(.5)="" D ^XMD K XMY
QUIT K %,AOU,DRUG,G,QUE,I,ITEMCNT,J,K,MEDR,MEDRCNT,NEW,OLD,QQ,RDT,SEL,IGDA,JJ,X,XMDUZ,XMKK,XMLOCK,XMR,XMSUB,XMT,XMTEXT,XMZ,Y,^TMP("PSGWOLD",$J),^TMP("PSGWMSG",$J),ZTSK,%H,%I,CNT,DA,DR,ITEM,MEDRCNT,XCNP,AOULP
S:$D(ZTQUEUED) ZTREQ="@" Q
CHK ;
K DA S DA(2)=MEDR,DA(1)=ITEM,DA=OLD,DIK="^PSI(58.1,"_DA(2)_",1,"_DA(1)_",4," D ^DIK K DIK
I '$D(^PSI(58.1,MEDR,1,ITEM,4,NEW,0)) K DA S DA(2)=MEDR,DA(1)=ITEM,DA=NEW,DIE="^PSI(58.1,"_DA(2)_",1,"_DA(1)_",4,",DR=".01////"_NEW D ^DIE K DIE I 'QUE W "."
S CNT=0 F I=0:0 S I=$O(^PSI(58.1,MEDR,1,ITEM,4,I)) Q:'I S CNT=CNT+1
S $P(^PSI(58.1,MEDR,1,ITEM,4,0),"^",3,4)=NEW_"^"_CNT
Q
PSGWCHG ;BHAM ISC/CML-AR/WS Mass Ward Conversion ; 06 Aug 93 / 2:18 PM
+1 ;;2.3; Automatic Replenishment/Ward Stock ;;4 JAN 94
+2 WRITE !!,"This routine will allow you to do a mass conversion of all active items in",!,"an active AOU from an old Ward designation to a new Ward designation."
+3 DO SEL^PSGWUTL1
IF '$DATA(SEL)
GOTO QUIT
IF SEL="I"
FOR JJ=0:0
SET JJ=$ORDER(AOULP(JJ))
IF 'JJ
QUIT
IF $SELECT('$DATA(^PSI(58.1,JJ,"I")):0,'^("I"):0,^("I")>DT:0,1:1)
KILL AOULP(JJ)
+4 IF SEL="I"
GOTO ASK
+5 FOR QQ=0:0
SET DIC="^PSI(58.1,"
SET DIC(0)="QEAM"
SET DIC("S")="I $S('$D(^(""I"")):1,'^(""I""):1,^(""I"")>DT:1,1:0)"
DO ^DIC
KILL DIC
IF Y<0
QUIT
SET AOULP(+Y)=""
+6 IF '$DATA(AOULP)&(X'="^ALL")
GOTO QUIT
+7 IF X="^ALL"
FOR AOU=0:0
SET AOU=$ORDER(^PSI(58.1,AOU))
IF 'AOU
QUIT
IF $SELECT('$DATA(^PSI(58.1,AOU,"I")):1,'^("I"):1,^("I")>DT:1,1:0)
SET AOULP(AOU)=""
ASK IF '$DATA(AOULP)
GOTO QUIT
OLD READ !!,"Select OLD WARD: ",X:DTIME
IF '$TEST
SET X="^"
IF "^"[X
GOTO QUIT
IF X?1."?"
WRITE !!,"Enter the Ward that currently exists in the WARD (FOR ITEM) field.",!
SET DIC="^DIC(42,"
SET DIC(0)="QEM"
DO ^DIC
KILL DIC
IF Y<0
GOTO OLD
SET OLD=+Y
NEW READ !!,"Select NEW WARD: ",X:DTIME
IF '$TEST
SET X="^"
IF "^"[X
GOTO QUIT
IF X?1."?"
WRITE !!,"Enter the new Ward you wish to replace ",$PIECE(^DIC(42,OLD,0),"^"),".",!
+1 SET DIC="^DIC(42,"
SET DIC(0)="QEM"
SET DIC("S")="I $S(+Y=OLD:0,'$D(^(""I"")):1,^(""I"")="""":1,1:0)"
DO ^DIC
KILL DIC
IF Y<0
GOTO NEW
SET NEW=+Y
QUE FOR QQ=0:0
WRITE !!,"Do you want to queue this job"
SET %=1
DO YN^DICN
IF %
QUIT
WRITE !!,"If you want to queue this job to run at a later time, accept the ",!,"default, otherwise enter 'N' to run it immediately or '^' to Exit"
+1 IF %<0
GOTO QUIT
SET QUE=$SELECT(%=1:1,1:0)
IF QUE
WRITE !!,"You will be notified by MailMan when the job is completed.",!
+2 IF %=1
SET ZTIO=""
SET ZTRTN="START^PSGWCHG"
SET ZTDESC="AR/WS MASS WARD CONVERSION"
IF $DATA(AOULP)
SET ZTSAVE("AOULP(")=""
FOR G="OLD","NEW","QUE"
IF $DATA(@G)
SET ZTSAVE(G)=""
+3 IF $TEST
DO ^%ZTLOAD
DO HOME^%ZIS
KILL ZTSK
GOTO QUIT
START ;
+1 KILL ^TMP("PSGWOLD",$JOB)
SET (ITEMCNT,MEDRCNT)=0
+2 FOR DRUG=0:0
SET DRUG=$ORDER(^PSI(58.1,"D",DRUG))
IF 'DRUG
QUIT
FOR MEDR=0:0
SET MEDR=$ORDER(^PSI(58.1,"D",DRUG,OLD,MEDR))
IF 'MEDR
QUIT
IF $DATA(AOULP(MEDR))
SET ITEM=$ORDER(^PSI(58.1,MEDR,1,"B",DRUG,0))
IF +ITEM
SET ^TMP("PSGWOLD",$JOB,MEDR,ITEM)=""
+3 IF $DATA(^TMP("PSGWOLD",$JOB))
FOR MEDR=0:0
SET MEDR=$ORDER(^TMP("PSGWOLD",$JOB,MEDR))
IF 'MEDR
QUIT
SET MEDRCNT=MEDRCNT+1
FOR ITEM=0:0
SET ITEM=$ORDER(^TMP("PSGWOLD",$JOB,MEDR,ITEM))
IF 'ITEM
QUIT
SET ITEMCNT=ITEMCNT+1
DO CHK
+4 IF 'QUE
WRITE *7,!!,"Total Stock Items converted: ",ITEMCNT,!,"Total AOU(s) converted: ",MEDRCNT,!
GOTO QUIT
MAIL ;
+1 KILL XMY
DO NOW^%DTC
SET Y=X
XECUTE ^DD("DD")
SET RDT=Y
SET ^TMP("PSGWMSG",$JOB,1,0)="AR/WS Ward Conversion Background job has run to completion."
SET ^TMP("PSGWMSG",$JOB,2,0)="Run Date: "_RDT
SET ^TMP("PSGWMSG",$JOB,3,0)=""
+2 SET ^TMP("PSGWMSG",$JOB,4,0)="Old Ward: "_$PIECE(^DIC(42,OLD,0),"^")_" converted to New Ward: "_$PIECE(^DIC(42,NEW,0),"^")
SET ^TMP("PSGWMSG",$JOB,5,0)="Total number of AOUs converted: "_MEDRCNT
+3 SET ^TMP("PSGWMSG",$JOB,6,0)="Total number of Stock Items converted: "_ITEMCNT
+4 SET XMSUB="AR/WS MASS WARD CONVERSION SUMMARY"
SET XMDUZ="INPATIENT PHARMACY AR/WS"
SET XMTEXT="^TMP(""PSGWMSG"",$J,"
SET XMY(DUZ)=""
IF '$DATA(XMY)
SET XMY(.5)=""
DO ^XMD
KILL XMY
QUIT KILL %,AOU,DRUG,G,QUE,I,ITEMCNT,J,K,MEDR,MEDRCNT,NEW,OLD,QQ,RDT,SEL,IGDA,JJ,X,XMDUZ,XMKK,XMLOCK,XMR,XMSUB,XMT,XMTEXT,XMZ,Y,^TMP("PSGWOLD",$JOB),^TMP("PSGWMSG",$JOB),ZTSK,%H,%I,CNT,DA,DR,ITEM,MEDRCNT,XCNP,AOULP
+1 IF $DATA(ZTQUEUED)
SET ZTREQ="@"
QUIT
CHK ;
+1 KILL DA
SET DA(2)=MEDR
SET DA(1)=ITEM
SET DA=OLD
SET DIK="^PSI(58.1,"_DA(2)_",1,"_DA(1)_",4,"
DO ^DIK
KILL DIK
+2 IF '$DATA(^PSI(58.1,MEDR,1,ITEM,4,NEW,0))
KILL DA
SET DA(2)=MEDR
SET DA(1)=ITEM
SET DA=NEW
SET DIE="^PSI(58.1,"_DA(2)_",1,"_DA(1)_",4,"
SET DR=".01////"_NEW
DO ^DIE
KILL DIE
IF 'QUE
WRITE "."
+3 SET CNT=0
FOR I=0:0
SET I=$ORDER(^PSI(58.1,MEDR,1,ITEM,4,I))
IF 'I
QUIT
SET CNT=CNT+1
+4 SET $PIECE(^PSI(58.1,MEDR,1,ITEM,4,0),"^",3,4)=NEW_"^"_CNT
+5 QUIT