PXRMEXIX ;SLC/PJH - Reminder Dialog Exchange checks. ;10/10/2007
;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
;
;=====================================================================
;
;Yes/No Prompts
;--------------
ASK(YESNO,TEXT,HELP) ;
W !
N DIR,X,Y
K DIROUT,DIRUT,DTOUT,DUOUT
S DIR(0)="YA0"
M DIR("A")=TEXT
S DIR("B")="Y"
S DIR("?")="Enter Y or N. For detailed help type ??"
S DIR("??")=U_"D HLP^PXRMEXIX(HELP)"
D ^DIR K DIR
I $D(DIROUT) S DTOUT=1
I $D(DTOUT)!($D(DUOUT)) S PXRMDONE=1 Q
S YESNO=$E(Y(0))
Q
;
;Dialog check - all exist, none exist or some exist
;--------------------------------------------------
EXIST(ALL,DNAME,DTYP,INAME) ;
;0 - None exist
;1 - All exist
;2 - Some exist
;
;Look for component dialogs in DMAP node from PXRMEXIC
N DONE,DOTHER,EXISTS,FILE,MODE
S ALL="",DONE=0,MODE="",NAME=""
;
I DTYP="reminder dialog" D
.F S NAME=$O(^TMP("PXRMEXTMP",$J,"DMAP",NAME)) Q:NAME="" D Q:DONE
..;Check if dialog exists
..S EXISTS=$$EXISTS^PXRMEXIU(801.41,NAME)
..;If exists accumulate list of ancestors
..I EXISTS D OTHER(NAME,.DOTHER)
..;Quit if some exist and some don't
..I MODE=1,'EXISTS S MODE=2,DONE=1 Q
..I MODE=0,EXISTS S MODE=2,DONE=1 Q
..;Set all exists flag if dialog found
..I MODE="",EXISTS S MODE=1
..;Set none exists flag if dialog not found
..I MODE="",'EXISTS S MODE=0
;
I DTYP'="reminder dialog" D
.F S NAME=$O(INAME(NAME)) Q:NAME="" D Q:DONE
..;Treat namechanges as 'done'
..I $D(PXRMNMCH(801.41,NAME)) Q
..;Check if dialog exists
..S EXISTS=$$EXISTS^PXRMEXIU(801.41,NAME)
..;If exists accumulate list of ancestors
..I EXISTS D OTHER(NAME,.DOTHER)
..;Quit if some exist and some don't
..I MODE=1,'EXISTS S MODE=2,DONE=1 Q
..I MODE=0,EXISTS S MODE=2,DONE=1 Q
..;Set all exists flag if dialog found
..I MODE="",EXISTS S MODE=1
..;Set none exists flag if dialog not found
..I MODE="",'EXISTS S MODE=0
;
;If all or none exist give option to install all without prompting
N ANS,TEXT
I MODE=0 D
.S TEXT(1)="All dialog components for "_DNAME_" are new."
I MODE=1 D
.S TEXT(1)="All dialog components for "_DNAME_" already exist."
.S TEXT(2)="",TEXT(4)=""
.S TEXT(3)="Components not used by any other dialogs."
.;Warn if used by other dialogs
.I $D(DOTHER) D
..S TEXT(3)="WARNING - some components already used by:"
..N CNT,DLIT,DNAME,DTYP,FIRST,NAME
..S CNT=4,DNAME="",TEXT(CNT)=""
..F S DNAME=$O(DOTHER(DNAME)) Q:DNAME="" D
...S NAME="",FIRST=1,CNT=CNT+1
...S DTYP=DOTHER(DNAME)
...I DTYP="R" S DTYP="Reminder Dialog"
...I DTYP="G" S DTYP="Dialog Group"
...I DTYP="E" S DTYP="Dialog Element"
...;S CNT=CNT+1,FIRST=0,TEXT(CNT)=DLIT_NAME_" ("_DTYP_")"
...S CNT=CNT+1,FIRST=0,TEXT(CNT)=DNAME_" ("_DTYP_")"
..S CNT=CNT+1,TEXT(CNT)=""
S TEXT="Install "_DTYP_" and all components with no further changes: "
;Give option to install all descendents
D ASK(.ANS,.TEXT,2) I $G(ANS)="Y" S ALL=1
I $G(ANS)="N" S ALL=0
Q
;
;Check if used by other dialogs
;------------------------------
OTHER(NAME,LIST) ;
N DDATA,DIEN,DNAME,DTYP,IEN
S IEN=$O(^PXRMD(801.41,"B",NAME,0)) Q:'IEN
;Check if used by other dialogs
I '$D(^PXRMD(801.41,"AD",IEN)) Q
;Build list of dialogs using this component
S DIEN=0
F S DIEN=$O(^PXRMD(801.41,"AD",IEN,DIEN)) Q:'DIEN D
.S DDATA=$G(^PXRMD(801.41,DIEN,0)) Q:DDATA=""
.S DNAME=$P(DDATA,U),DTYP=$P(DDATA,U,4) Q:DNAME=""
.;Include only dialogs that are not part of this reminder dialog
.I $D(^TMP("PXRMEXTMP",$J,"DMAP",DNAME)) Q
.S LIST(DNAME)=DTYP
Q
;
;General help text routine.
;--------------------------
HLP(CALL) ;
N HTEXT
N DIWF,DIWL,DIWR,IC
S DIWF="C75",DIWL=0,DIWR=75
;
I CALL=1 D
.S HTEXT(1)="Enter 'Yes' to install all sub-components or"
.S HTEXT(2)="enter 'No' to install only the selected dialog."
I CALL=2 D
.S HTEXT(1)="Enter 'Yes' to install without changes."
.S HTEXT(2)="Enter 'No' to install with changes."
I CALL=3 D
.S HTEXT(1)="Select IFE to INSTALL reminder or dialog from this exchange"
.S HTEXT(2)="entry. Select DFE to DELETE this entry from the exchange file. "
.S HTEXT(3)="Select IH to view the installation HISTORY for this entry."
K ^UTILITY($J,"W")
S IC=""
F S IC=$O(HTEXT(IC)) Q:IC="" D
. S X=HTEXT(IC)
. D ^DIWP
W !
S IC=0
F S IC=$O(^UTILITY($J,"W",0,IC)) Q:IC="" D
. W !,^UTILITY($J,"W",0,IC,0)
K ^UTILITY($J,"W")
W !
Q
PXRMEXIX ;SLC/PJH - Reminder Dialog Exchange checks. ;10/10/2007
+1 ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
+2 ;
+3 ;=====================================================================
+4 ;
+5 ;Yes/No Prompts
+6 ;--------------
ASK(YESNO,TEXT,HELP) ;
+1 WRITE !
+2 NEW DIR,X,Y
+3 KILL DIROUT,DIRUT,DTOUT,DUOUT
+4 SET DIR(0)="YA0"
+5 MERGE DIR("A")=TEXT
+6 SET DIR("B")="Y"
+7 SET DIR("?")="Enter Y or N. For detailed help type ??"
+8 SET DIR("??")=U_"D HLP^PXRMEXIX(HELP)"
+9 DO ^DIR
KILL DIR
+10 IF $DATA(DIROUT)
SET DTOUT=1
+11 IF $DATA(DTOUT)!($DATA(DUOUT))
SET PXRMDONE=1
QUIT
+12 SET YESNO=$EXTRACT(Y(0))
+13 QUIT
+14 ;
+15 ;Dialog check - all exist, none exist or some exist
+16 ;--------------------------------------------------
EXIST(ALL,DNAME,DTYP,INAME) ;
+1 ;0 - None exist
+2 ;1 - All exist
+3 ;2 - Some exist
+4 ;
+5 ;Look for component dialogs in DMAP node from PXRMEXIC
+6 NEW DONE,DOTHER,EXISTS,FILE,MODE
+7 SET ALL=""
SET DONE=0
SET MODE=""
SET NAME=""
+8 ;
+9 IF DTYP="reminder dialog"
Begin DoDot:1
+10 FOR
SET NAME=$ORDER(^TMP("PXRMEXTMP",$JOB,"DMAP",NAME))
IF NAME=""
QUIT
Begin DoDot:2
+11 ;Check if dialog exists
+12 SET EXISTS=$$EXISTS^PXRMEXIU(801.41,NAME)
+13 ;If exists accumulate list of ancestors
+14 IF EXISTS
DO OTHER(NAME,.DOTHER)
+15 ;Quit if some exist and some don't
+16 IF MODE=1
IF 'EXISTS
SET MODE=2
SET DONE=1
QUIT
+17 IF MODE=0
IF EXISTS
SET MODE=2
SET DONE=1
QUIT
+18 ;Set all exists flag if dialog found
+19 IF MODE=""
IF EXISTS
SET MODE=1
+20 ;Set none exists flag if dialog not found
+21 IF MODE=""
IF 'EXISTS
SET MODE=0
End DoDot:2
IF DONE
QUIT
End DoDot:1
+22 ;
+23 IF DTYP'="reminder dialog"
Begin DoDot:1
+24 FOR
SET NAME=$ORDER(INAME(NAME))
IF NAME=""
QUIT
Begin DoDot:2
+25 ;Treat namechanges as 'done'
+26 IF $DATA(PXRMNMCH(801.41,NAME))
QUIT
+27 ;Check if dialog exists
+28 SET EXISTS=$$EXISTS^PXRMEXIU(801.41,NAME)
+29 ;If exists accumulate list of ancestors
+30 IF EXISTS
DO OTHER(NAME,.DOTHER)
+31 ;Quit if some exist and some don't
+32 IF MODE=1
IF 'EXISTS
SET MODE=2
SET DONE=1
QUIT
+33 IF MODE=0
IF EXISTS
SET MODE=2
SET DONE=1
QUIT
+34 ;Set all exists flag if dialog found
+35 IF MODE=""
IF EXISTS
SET MODE=1
+36 ;Set none exists flag if dialog not found
+37 IF MODE=""
IF 'EXISTS
SET MODE=0
End DoDot:2
IF DONE
QUIT
End DoDot:1
+38 ;
+39 ;If all or none exist give option to install all without prompting
+40 NEW ANS,TEXT
+41 IF MODE=0
Begin DoDot:1
+42 SET TEXT(1)="All dialog components for "_DNAME_" are new."
End DoDot:1
+43 IF MODE=1
Begin DoDot:1
+44 SET TEXT(1)="All dialog components for "_DNAME_" already exist."
+45 SET TEXT(2)=""
SET TEXT(4)=""
+46 SET TEXT(3)="Components not used by any other dialogs."
+47 ;Warn if used by other dialogs
+48 IF $DATA(DOTHER)
Begin DoDot:2
+49 SET TEXT(3)="WARNING - some components already used by:"
+50 NEW CNT,DLIT,DNAME,DTYP,FIRST,NAME
+51 SET CNT=4
SET DNAME=""
SET TEXT(CNT)=""
+52 FOR
SET DNAME=$ORDER(DOTHER(DNAME))
IF DNAME=""
QUIT
Begin DoDot:3
+53 SET NAME=""
SET FIRST=1
SET CNT=CNT+1
+54 SET DTYP=DOTHER(DNAME)
+55 IF DTYP="R"
SET DTYP="Reminder Dialog"
+56 IF DTYP="G"
SET DTYP="Dialog Group"
+57 IF DTYP="E"
SET DTYP="Dialog Element"
+58 ;S CNT=CNT+1,FIRST=0,TEXT(CNT)=DLIT_NAME_" ("_DTYP_")"
+59 SET CNT=CNT+1
SET FIRST=0
SET TEXT(CNT)=DNAME_" ("_DTYP_")"
End DoDot:3
+60 SET CNT=CNT+1
SET TEXT(CNT)=""
End DoDot:2
End DoDot:1
+61 SET TEXT="Install "_DTYP_" and all components with no further changes: "
+62 ;Give option to install all descendents
+63 DO ASK(.ANS,.TEXT,2)
IF $GET(ANS)="Y"
SET ALL=1
+64 IF $GET(ANS)="N"
SET ALL=0
+65 QUIT
+66 ;
+67 ;Check if used by other dialogs
+68 ;------------------------------
OTHER(NAME,LIST) ;
+1 NEW DDATA,DIEN,DNAME,DTYP,IEN
+2 SET IEN=$ORDER(^PXRMD(801.41,"B",NAME,0))
IF 'IEN
QUIT
+3 ;Check if used by other dialogs
+4 IF '$DATA(^PXRMD(801.41,"AD",IEN))
QUIT
+5 ;Build list of dialogs using this component
+6 SET DIEN=0
+7 FOR
SET DIEN=$ORDER(^PXRMD(801.41,"AD",IEN,DIEN))
IF 'DIEN
QUIT
Begin DoDot:1
+8 SET DDATA=$GET(^PXRMD(801.41,DIEN,0))
IF DDATA=""
QUIT
+9 SET DNAME=$PIECE(DDATA,U)
SET DTYP=$PIECE(DDATA,U,4)
IF DNAME=""
QUIT
+10 ;Include only dialogs that are not part of this reminder dialog
+11 IF $DATA(^TMP("PXRMEXTMP",$JOB,"DMAP",DNAME))
QUIT
+12 SET LIST(DNAME)=DTYP
End DoDot:1
+13 QUIT
+14 ;
+15 ;General help text routine.
+16 ;--------------------------
HLP(CALL) ;
+1 NEW HTEXT
+2 NEW DIWF,DIWL,DIWR,IC
+3 SET DIWF="C75"
SET DIWL=0
SET DIWR=75
+4 ;
+5 IF CALL=1
Begin DoDot:1
+6 SET HTEXT(1)="Enter 'Yes' to install all sub-components or"
+7 SET HTEXT(2)="enter 'No' to install only the selected dialog."
End DoDot:1
+8 IF CALL=2
Begin DoDot:1
+9 SET HTEXT(1)="Enter 'Yes' to install without changes."
+10 SET HTEXT(2)="Enter 'No' to install with changes."
End DoDot:1
+11 IF CALL=3
Begin DoDot:1
+12 SET HTEXT(1)="Select IFE to INSTALL reminder or dialog from this exchange"
+13 SET HTEXT(2)="entry. Select DFE to DELETE this entry from the exchange file. "
+14 SET HTEXT(3)="Select IH to view the installation HISTORY for this entry."
End DoDot:1
+15 KILL ^UTILITY($JOB,"W")
+16 SET IC=""
+17 FOR
SET IC=$ORDER(HTEXT(IC))
IF IC=""
QUIT
Begin DoDot:1
+18 SET X=HTEXT(IC)
+19 DO ^DIWP
End DoDot:1
+20 WRITE !
+21 SET IC=0
+22 FOR
SET IC=$ORDER(^UTILITY($JOB,"W",0,IC))
IF IC=""
QUIT
Begin DoDot:1
+23 WRITE !,^UTILITY($JOB,"W",0,IC,0)
End DoDot:1
+24 KILL ^UTILITY($JOB,"W")
+25 WRITE !
+26 QUIT