- XQSMD4 ; SEA/MJM,JLI - Edit a user's options ;01/25/2008
- ;;8.0;KERNEL;**510**;Jul 10, 1995;Build 17
- ; Per VHA Directive 2004-038, this routine should not be modified.
- ; Option: XQSMD BUILD MENU
- BUILD ;
- N XQNMSP,XQOPT
- I '$D(^VA(200,DUZ,19.5,"B")) W !!?7,$C(7),"You haven't been delegated any options with which to build a menu." Q
- D NAMESP(.XQNMSP) Q:'$D(XQNMSP)
- D ASKOPT(.XQOPT,"M") Q:'$D(XQOPT)
- I XQOPT("NEW") D NEW(.XQOPT) Q
- D OLD(.XQOPT)
- Q
- ASKOPT(XQOPT,XQTYPE) ;
- N XQOPNM
- D ASKNAME(.XQOPNM,.XQNMSP,XQTYPE) Q:'$D(XQOPNM)
- D ADDFIND(XQOPNM,.XQOPT) Q:'$D(XQOPT)
- Q
- ADDFIND(X,XQOPT) ;
- N DIC,Y,DLAYGO
- S DIC(0)="MLE",DIC=19,DLAYGO=19
- D ^DIC Q:Y<0
- S XQOPT("NAME")=$P(Y,U,2)
- S XQOPT("IEN")=+Y
- S XQOPT("NEW")=$P(Y,U,3)
- Q
- NEW(XQOPT) ;
- N DIE,DA,DIC,DR,DLAYGO,X,Y
- S DIE=19,DR="1;3.5;4///M;",DA=XQOPT("IEN") D ^DIE ; Enter as new option and force type to be menu
- S DIC="^VA(200,DUZ,19.5,",X=XQOPT("NAME"),DIC(0)="MLX",DA(1)=DUZ,DLAYGO=200 D ^DIC Q:Y'>0
- D EDIT(.XQOPT)
- Q
- OLD(XQOPT) ;
- I $P(^DIC(19,XQOPT("IEN"),0),U,4)'="M" W !,$C(7),"This option already exists but is not a MENU." Q
- I '$D(^VA(200,DUZ,19.5,XQOPT("IEN"),0)) W !,$C(7),"This option already exists but is not included in your delegated options.",!,"Choose another option name or get this option delegated to yourself." Q
- D EDIT(.XQOPT)
- Q
- EDIT(XQOPT) ;
- N XQOUT
- W !!,"You may only include options that have been delegated as items to you.",!
- S XQOUT=0
- F D Q:XQOUT
- . N DIC,X,Y,XQITEM,XQITEMNM
- . I $D(^DIC(19,XQOPT("IEN"),10,"B")) D SHOWITEM
- . S DIC("A")="Select Menu Item: "
- . S DIC("S")="I +Y'="_XQOPT("IEN") ; Don't select the option as a menu item
- . S DIC(0)="AEQMZ"
- . S DIC="^VA(200,DUZ,19.5,"
- . D ^DIC I Y<0 S XQOUT=1 Q
- . S XQITEM("IEN")=+Y ; Menu Item IEN
- . S XQITEM("NAME")=Y(0,0) ; Menu Item Name
- . I $D(^DIC(19,XQOPT("IEN"),10,"B",XQITEM("IEN"))) D Q
- . . N DIK,DA ; If already there, remove it from menu
- . . S DIK="^DIC(19,"_XQOPT("IEN")_",10,",DA(1)=XQOPT("IEN"),DA=$O(^DIC(19,XQOPT("IEN"),10,"B",XQITEM("IEN"),0)) D ^DIK
- . . W !,$C(7),"Menu item ",XQITEM("NAME")," deleted from menu."
- . . I '$D(^DIC(19,XQOPT("IEN"),10,"B")) D
- . . . W !,"This menu contains no menu items."
- . . . W !,"It will be deleted if you don't add a menu item."
- . . W !
- . N X,Y,DIC,DLAYGO,DA,D0
- . S X=XQITEM("NAME")
- . S DIC(0)="EQML"
- . S DLAYGO=19,(D0,DA(1))=XQOPT("IEN")
- . S DIC="^DIC(19,"_XQOPT("IEN")_",10,"
- . D ^DIC I Y<0 W ! Q
- . N DIE,DR,DA
- . S DR="2:3;" ; Set SYNONYM and DISPLAY ORDER
- . S DIE=DIC,DA=+Y,DA(1)=XQOPT("IEN") D ^DIE
- . W !
- Q:$O(^DIC(19,XQOPT("IEN"),10,0))
- I $D(^VA(200,"AP",XQOPT("IEN"))),'$G(XQOPT("NEW")) D Q
- . D NODEL(.XQOPT)
- . W !,"These users now have a Primary Menu with no menu items!",$C(7)
- . W !,"Recommend you add some menu items to it."
- D DELETE(.XQOPT)
- W !!?7,$C(7),"Empty menu removed from option file and your delegated options.",!
- Q
- SHOWITEM ;
- N I,XQREC,XQREC0
- W !,"This menu contains the following menu items. You may add a new menu item."
- W !,"If you select an existing menu item, it will be deleted from the menu.",!
- S I=0
- F S I=$O(^DIC(19,XQOPT("IEN"),10,I)) Q:'I S XQREC=^(I,0) D
- . S XQREC0=^DIC(19,+XQREC,0)
- . W !,?3,$P(XQREC0,U),?40,$P(XQREC,U,2),?46,$P(XQREC0,U,2)
- W !
- Q
- NODEL(XQOPT) ; called by ^XQSMDFM, too
- N I
- W !!,"This option is used as a Primary Menu for:"
- S I=0
- F S I=$O(^VA(200,"AP",XQOPT("IEN"),I)) Q:'I W !?10,$P(^VA(200,I,0),U)
- W !,"Can't delete it while it is used as a primary menu."
- Q
- DELETE(XQOPT) ; called by ^XQSMDFM, too
- N DIK,DA
- I $G(XQOPT("NEW")) D
- . S DIK="^VA(200,DUZ,19.5,",DA(1)=DUZ,DA=XQOPT("IEN") D ^DIK
- E D
- . N XQJ
- . S XQJ=0
- . ; Delete option from all menus
- . F S XQJ=$O(^DIC(19,"AD",XQOPT("IEN"),XQJ)) Q:'XQJ S DA=$O(^(XQJ,0)),DA(1)=XQJ,DIK="^DIC(19,DA(1),10," D ^DIK
- . ; Delete option as a secondary menu option for all users
- . F S XQJ=$O(^VA(200,"AD",XQOPT("IEN"),XQJ)) Q:'XQJ S DA=$O(^(XQJ,0)),DA(1)=XQJ,DIK="^VA(200,DA(1),203," D ^DIK
- . ; Delete option as delegated option for all users
- . F S XQJ=$O(^VA(200,XQJ)) Q:'XQJ I $D(^(XQJ,19.5,"B",XQOPT("IEN"))) S DA=XQOPT("IEN"),DA(1)=XQJ,DIK="^VA(200,DA(1),19.5," D ^DIK
- S DIK="^DIC(19,",DA=XQOPT("IEN") D ^DIK ; Delete option
- Q
- NAMESP(XQNMSP) ; Check for available namespaces. Called by ^XQSMDFM, too.
- N I
- S I=0
- F S I=$O(^VA(200,DUZ,19.6,"B",I)) Q:I="" S XQNMSP=$G(XQNMSP)+1,XQNMSP(I)=""
- I $D(XQNMSP) D HLPNAME Q
- I $D(^VA(200,DUZ,19.6)) K ^(19.6)
- W !!?7,$C(7),"No namespace(s) have been set up for you to build new menus.",!?7,"Contact your computer service representative."
- Q
- HLPNAME ;
- N I
- W !?7,"The options you build or edit must begin with ",$S(XQNMSP>1:"one of ",1:""),!?7,"the following namespace",$S(XQNMSP>1:"(s)",1:"")," and be no more than 30 characters long:",!
- S I=""
- F S I=$O(XQNMSP(I)) Q:I="" W !?35,$S($E(I,1)="A":I,1:I_"Z")
- W !
- Q:"^P^I^E^M^"'[(U_$G(XQTYPE)_U)
- N I,XQM,XQREC
- S I=0
- F S I=$O(^VA(200,DUZ,19.5,"B",I)) Q:'I D
- . S XQREC=$G(^DIC(19,I,0)) Q:$P(XQREC,U,4)'=XQTYPE
- . S XQM($P(XQREC,U))=$P(XQREC,U,2)
- I '$D(XQM) W !?7,"You have no existing delegated "_$$TYPE(XQTYPE)_" options. You may enter a new one." Q
- W !,"The following are your existing delegated "_$$TYPE(XQTYPE)_" options:"
- F S I=$O(XQM(I)) Q:I="" W !,I,?40,XQM(I)
- Q
- TYPE(XQT) ;
- Q $S(XQT="P":"Print",XQT="I":"Inquire",XQT="E":"Edit",1:"Menu")
- ASKNAME(XQOPNM,XQNMSP,XQTYPE) ;Check for a valid option names.
- ;Called by ^XQSMDFM, too.
- ;XU*8*428 also allows for local namespaces, e.g., A5A, AFS, etc.
- F D Q:$D(DIRUT)!$D(XQOPNM)
- . N DIR,X,Y
- . S DIR("A")="Option Name"
- . S DIR("PRE")="D CHKNAME^XQSMD4"
- . S DIR("?")="^D HLPNAME^XQSMD4"
- . S DIR(0)="F^3:30"
- . D ^DIR Q:$D(DIRUT)
- . S XQOPNM=Y
- Q
- CHKNAME ;
- I $D(DTOUT)!(X[U)!(X["?") Q
- I X="" S X=U Q
- N I
- S I=""
- F S I=$O(XQNMSP(I)) Q:I="" Q:$E(I,1)="A"&($E(X,1,$L(I))=I) Q:$E(X,1,$L(I))=I&($E(X,$L(I)+1)="Z")
- Q:I'=""
- W $C(7),!!?7,$E(X,1,4),"* is not a valid namespace for you.",!
- K X
- Q
- XQSMD4 ; SEA/MJM,JLI - Edit a user's options ;01/25/2008
- +1 ;;8.0;KERNEL;**510**;Jul 10, 1995;Build 17
- +2 ; Per VHA Directive 2004-038, this routine should not be modified.
- +3 ; Option: XQSMD BUILD MENU
- BUILD ;
- +1 NEW XQNMSP,XQOPT
- +2 IF '$DATA(^VA(200,DUZ,19.5,"B"))
- WRITE !!?7,$CHAR(7),"You haven't been delegated any options with which to build a menu."
- QUIT
- +3 DO NAMESP(.XQNMSP)
- IF '$DATA(XQNMSP)
- QUIT
- +4 DO ASKOPT(.XQOPT,"M")
- IF '$DATA(XQOPT)
- QUIT
- +5 IF XQOPT("NEW")
- DO NEW(.XQOPT)
- QUIT
- +6 DO OLD(.XQOPT)
- +7 QUIT
- ASKOPT(XQOPT,XQTYPE) ;
- +1 NEW XQOPNM
- +2 DO ASKNAME(.XQOPNM,.XQNMSP,XQTYPE)
- IF '$DATA(XQOPNM)
- QUIT
- +3 DO ADDFIND(XQOPNM,.XQOPT)
- IF '$DATA(XQOPT)
- QUIT
- +4 QUIT
- ADDFIND(X,XQOPT) ;
- +1 NEW DIC,Y,DLAYGO
- +2 SET DIC(0)="MLE"
- SET DIC=19
- SET DLAYGO=19
- +3 DO ^DIC
- IF Y<0
- QUIT
- +4 SET XQOPT("NAME")=$PIECE(Y,U,2)
- +5 SET XQOPT("IEN")=+Y
- +6 SET XQOPT("NEW")=$PIECE(Y,U,3)
- +7 QUIT
- NEW(XQOPT) ;
- +1 NEW DIE,DA,DIC,DR,DLAYGO,X,Y
- +2 ; Enter as new option and force type to be menu
- SET DIE=19
- SET DR="1;3.5;4///M;"
- SET DA=XQOPT("IEN")
- DO ^DIE
- +3 SET DIC="^VA(200,DUZ,19.5,"
- SET X=XQOPT("NAME")
- SET DIC(0)="MLX"
- SET DA(1)=DUZ
- SET DLAYGO=200
- DO ^DIC
- IF Y'>0
- QUIT
- +4 DO EDIT(.XQOPT)
- +5 QUIT
- OLD(XQOPT) ;
- +1 IF $PIECE(^DIC(19,XQOPT("IEN"),0),U,4)'="M"
- WRITE !,$CHAR(7),"This option already exists but is not a MENU."
- QUIT
- +2 IF '$DATA(^VA(200,DUZ,19.5,XQOPT("IEN"),0))
- WRITE !,$CHAR(7),"This option already exists but is not included in your delegated options.",!,"Choose another option name or get this option delegated to yourself."
- QUIT
- +3 DO EDIT(.XQOPT)
- +4 QUIT
- EDIT(XQOPT) ;
- +1 NEW XQOUT
- +2 WRITE !!,"You may only include options that have been delegated as items to you.",!
- +3 SET XQOUT=0
- +4 FOR
- Begin DoDot:1
- +5 NEW DIC,X,Y,XQITEM,XQITEMNM
- +6 IF $DATA(^DIC(19,XQOPT("IEN"),10,"B"))
- DO SHOWITEM
- +7 SET DIC("A")="Select Menu Item: "
- +8 ; Don't select the option as a menu item
- SET DIC("S")="I +Y'="_XQOPT("IEN")
- +9 SET DIC(0)="AEQMZ"
- +10 SET DIC="^VA(200,DUZ,19.5,"
- +11 DO ^DIC
- IF Y<0
- SET XQOUT=1
- QUIT
- +12 ; Menu Item IEN
- SET XQITEM("IEN")=+Y
- +13 ; Menu Item Name
- SET XQITEM("NAME")=Y(0,0)
- +14 IF $DATA(^DIC(19,XQOPT("IEN"),10,"B",XQITEM("IEN")))
- Begin DoDot:2
- +15 ; If already there, remove it from menu
- NEW DIK,DA
- +16 SET DIK="^DIC(19,"_XQOPT("IEN")_",10,"
- SET DA(1)=XQOPT("IEN")
- SET DA=$ORDER(^DIC(19,XQOPT("IEN"),10,"B",XQITEM("IEN"),0))
- DO ^DIK
- +17 WRITE !,$CHAR(7),"Menu item ",XQITEM("NAME")," deleted from menu."
- +18 IF '$DATA(^DIC(19,XQOPT("IEN"),10,"B"))
- Begin DoDot:3
- +19 WRITE !,"This menu contains no menu items."
- +20 WRITE !,"It will be deleted if you don't add a menu item."
- End DoDot:3
- +21 WRITE !
- End DoDot:2
- QUIT
- +22 NEW X,Y,DIC,DLAYGO,DA,D0
- +23 SET X=XQITEM("NAME")
- +24 SET DIC(0)="EQML"
- +25 SET DLAYGO=19
- SET (D0,DA(1))=XQOPT("IEN")
- +26 SET DIC="^DIC(19,"_XQOPT("IEN")_",10,"
- +27 DO ^DIC
- IF Y<0
- WRITE !
- QUIT
- +28 NEW DIE,DR,DA
- +29 ; Set SYNONYM and DISPLAY ORDER
- SET DR="2:3;"
- +30 SET DIE=DIC
- SET DA=+Y
- SET DA(1)=XQOPT("IEN")
- DO ^DIE
- +31 WRITE !
- End DoDot:1
- IF XQOUT
- QUIT
- +32 IF $ORDER(^DIC(19,XQOPT("IEN"),10,0))
- QUIT
- +33 IF $DATA(^VA(200,"AP",XQOPT("IEN")))
- IF '$GET(XQOPT("NEW"))
- Begin DoDot:1
- +34 DO NODEL(.XQOPT)
- +35 WRITE !,"These users now have a Primary Menu with no menu items!",$CHAR(7)
- +36 WRITE !,"Recommend you add some menu items to it."
- End DoDot:1
- QUIT
- +37 DO DELETE(.XQOPT)
- +38 WRITE !!?7,$CHAR(7),"Empty menu removed from option file and your delegated options.",!
- +39 QUIT
- SHOWITEM ;
- +1 NEW I,XQREC,XQREC0
- +2 WRITE !,"This menu contains the following menu items. You may add a new menu item."
- +3 WRITE !,"If you select an existing menu item, it will be deleted from the menu.",!
- +4 SET I=0
- +5 FOR
- SET I=$ORDER(^DIC(19,XQOPT("IEN"),10,I))
- IF 'I
- QUIT
- SET XQREC=^(I,0)
- Begin DoDot:1
- +6 SET XQREC0=^DIC(19,+XQREC,0)
- +7 WRITE !,?3,$PIECE(XQREC0,U),?40,$PIECE(XQREC,U,2),?46,$PIECE(XQREC0,U,2)
- End DoDot:1
- +8 WRITE !
- +9 QUIT
- NODEL(XQOPT) ; called by ^XQSMDFM, too
- +1 NEW I
- +2 WRITE !!,"This option is used as a Primary Menu for:"
- +3 SET I=0
- +4 FOR
- SET I=$ORDER(^VA(200,"AP",XQOPT("IEN"),I))
- IF 'I
- QUIT
- WRITE !?10,$PIECE(^VA(200,I,0),U)
- +5 WRITE !,"Can't delete it while it is used as a primary menu."
- +6 QUIT
- DELETE(XQOPT) ; called by ^XQSMDFM, too
- +1 NEW DIK,DA
- +2 IF $GET(XQOPT("NEW"))
- Begin DoDot:1
- +3 SET DIK="^VA(200,DUZ,19.5,"
- SET DA(1)=DUZ
- SET DA=XQOPT("IEN")
- DO ^DIK
- End DoDot:1
- +4 IF '$TEST
- Begin DoDot:1
- +5 NEW XQJ
- +6 SET XQJ=0
- +7 ; Delete option from all menus
- +8 FOR
- SET XQJ=$ORDER(^DIC(19,"AD",XQOPT("IEN"),XQJ))
- IF 'XQJ
- QUIT
- SET DA=$ORDER(^(XQJ,0))
- SET DA(1)=XQJ
- SET DIK="^DIC(19,DA(1),10,"
- DO ^DIK
- +9 ; Delete option as a secondary menu option for all users
- +10 FOR
- SET XQJ=$ORDER(^VA(200,"AD",XQOPT("IEN"),XQJ))
- IF 'XQJ
- QUIT
- SET DA=$ORDER(^(XQJ,0))
- SET DA(1)=XQJ
- SET DIK="^VA(200,DA(1),203,"
- DO ^DIK
- +11 ; Delete option as delegated option for all users
- +12 FOR
- SET XQJ=$ORDER(^VA(200,XQJ))
- IF 'XQJ
- QUIT
- IF $DATA(^(XQJ,19.5,"B",XQOPT("IEN")))
- SET DA=XQOPT("IEN")
- SET DA(1)=XQJ
- SET DIK="^VA(200,DA(1),19.5,"
- DO ^DIK
- End DoDot:1
- +13 ; Delete option
- SET DIK="^DIC(19,"
- SET DA=XQOPT("IEN")
- DO ^DIK
- +14 QUIT
- NAMESP(XQNMSP) ; Check for available namespaces. Called by ^XQSMDFM, too.
- +1 NEW I
- +2 SET I=0
- +3 FOR
- SET I=$ORDER(^VA(200,DUZ,19.6,"B",I))
- IF I=""
- QUIT
- SET XQNMSP=$GET(XQNMSP)+1
- SET XQNMSP(I)=""
- +4 IF $DATA(XQNMSP)
- DO HLPNAME
- QUIT
- +5 IF $DATA(^VA(200,DUZ,19.6))
- KILL ^(19.6)
- +6 WRITE !!?7,$CHAR(7),"No namespace(s) have been set up for you to build new menus.",!?7,"Contact your computer service representative."
- +7 QUIT
- HLPNAME ;
- +1 NEW I
- +2 WRITE !?7,"The options you build or edit must begin with ",$SELECT(XQNMSP>1:"one of ",1:""),!?7,"the following namespace",$SELECT(XQNMSP>1:"(s)",1:"")," and be no more than 30 characters long:",!
- +3 SET I=""
- +4 FOR
- SET I=$ORDER(XQNMSP(I))
- IF I=""
- QUIT
- WRITE !?35,$SELECT($EXTRACT(I,1)="A":I,1:I_"Z")
- +5 WRITE !
- +6 IF "^P^I^E^M^"'[(U_$GET(XQTYPE)_U)
- QUIT
- +7 NEW I,XQM,XQREC
- +8 SET I=0
- +9 FOR
- SET I=$ORDER(^VA(200,DUZ,19.5,"B",I))
- IF 'I
- QUIT
- Begin DoDot:1
- +10 SET XQREC=$GET(^DIC(19,I,0))
- IF $PIECE(XQREC,U,4)'=XQTYPE
- QUIT
- +11 SET XQM($PIECE(XQREC,U))=$PIECE(XQREC,U,2)
- End DoDot:1
- +12 IF '$DATA(XQM)
- WRITE !?7,"You have no existing delegated "_$$TYPE(XQTYPE)_" options. You may enter a new one."
- QUIT
- +13 WRITE !,"The following are your existing delegated "_$$TYPE(XQTYPE)_" options:"
- +14 FOR
- SET I=$ORDER(XQM(I))
- IF I=""
- QUIT
- WRITE !,I,?40,XQM(I)
- +15 QUIT
- TYPE(XQT) ;
- +1 QUIT $SELECT(XQT="P":"Print",XQT="I":"Inquire",XQT="E":"Edit",1:"Menu")
- ASKNAME(XQOPNM,XQNMSP,XQTYPE) ;Check for a valid option names.
- +1 ;Called by ^XQSMDFM, too.
- +2 ;XU*8*428 also allows for local namespaces, e.g., A5A, AFS, etc.
- +3 FOR
- Begin DoDot:1
- +4 NEW DIR,X,Y
- +5 SET DIR("A")="Option Name"
- +6 SET DIR("PRE")="D CHKNAME^XQSMD4"
- +7 SET DIR("?")="^D HLPNAME^XQSMD4"
- +8 SET DIR(0)="F^3:30"
- +9 DO ^DIR
- IF $DATA(DIRUT)
- QUIT
- +10 SET XQOPNM=Y
- End DoDot:1
- IF $DATA(DIRUT)!$DATA(XQOPNM)
- QUIT
- +11 QUIT
- CHKNAME ;
- +1 IF $DATA(DTOUT)!(X[U)!(X["?")
- QUIT
- +2 IF X=""
- SET X=U
- QUIT
- +3 NEW I
- +4 SET I=""
- +5 FOR
- SET I=$ORDER(XQNMSP(I))
- IF I=""
- QUIT
- IF $EXTRACT(I,1)="A"&($EXTRACT(X,1,$LENGTH(I))=I)
- QUIT
- IF $EXTRACT(X,1,$LENGTH(I))=I&($EXTRACT(X,$LENGTH(I)+1)="Z")
- QUIT
- +6 IF I'=""
- QUIT
- +7 WRITE $CHAR(7),!!?7,$EXTRACT(X,1,4),"* is not a valid namespace for you.",!
- +8 KILL X
- +9 QUIT