TMGMDCPY ;ISC-SF/JLI - COPY ONE USER (PRIM & SEC MENUS, KEYS, FILES) TO ANOTHER USER ;01/23/96  11:18
        ;;8.0;KERNEL;**19**;Jul 10, 1995

        ;"Copied from XWSMDCPY for decompilation and modification

        S XQBOSS=0
        I $D(^XUSEC("XUMGR",DUZ)) S XQBOSS=1
        I 'XQBOSS do
        . W !!,?5,"Note: You must have been delegated these options and",!
        . W ?11,"keys to transfer them from user to user.",!
        ;"I 'XQBOSS,$O(^VA(200,DUZ,19.5,0))'>0 W !!,$C(7),"No Menus have been delegated to you to use this option",!,"If there are questions see your site manager's staff." Q
        W !!

        S DIC("A")="Select the user to be COPIED FROM: "
        S DIC=200,DIC(0)="AQEM"
        D ^DIC Q:Y'>0  S XQUSR1=+Y

        S XQUSRPM=+$G(^VA(200,XQUSR1,201))
        I XQUSRPM="" S XQUSRPM=0 W !,"The source user has no primary menu."

        I 'XQBOSS,XQUSRPM>0,'$D(^VA(200,DUZ,19.5,"B",XQUSRPM)) do
        . W !,$C(7),"You are not able to give out this user's primary menu ",$P(^DIC(19,XQUSRPM,0),U)
        . S XQUSRPM=0

        S XQUSEC(0)=""
        F I=0:0 S I=$O(^VA(200,XQUSR1,203,I)) Q:I'>0  do  ;"cycle through secondary menu options.
        . S X=^(I,0)
        . S XQUSEC(+X)=$P(X,U,2)
        . I 'XQBOSS,'$D(^VA(200,DUZ,19.5,"B",+X)) do
        . . W !,$C(7),"Skipping secondary menu ",$P(^DIC(19,+X,0),U)
        . . K XQUSEC(+X)
        ;"I XQUSRPM'>0,$O(XQUSEC(0))'>0 W !!,$C(7),"No Primary or Secondary Menus to copy -- quitting.",!! G EXIT

        S XQUSEK(0)=""
        F I=0:0 S I=$O(^VA(200,XQUSR1,51,I)) Q:I'>0  do  ;"cycle through keys
        . S X=+^(I,0)
        . I $D(^DIC(19,+X,0)) do
        . . S XQUSEK(X)=X
        . . I 'XQBOSS,'$D(^VA(200,DUZ,52,"B",X)) do
        . . . W !,$C(7),"Not authorized to give ",$P(^DIC(19.1,X,0),U)," key -- skipping"
        . . . K XQUSEK(X)
        ;
        ;Get recipient user
        ;
        S DIC("A")="Select a USER to be COPIED TO: ",DIC="^VA(200,",DIC(0)="AEMQ"
        F XQI=0:0 D ^DIC Q:Y'>0  S XUSR(+Y)="",DIC("A")="Select ANOTHER USER: "
        K DIC
        ;
        goto:$O(XUSR(0))'>0 EXIT

        R !!,"Do you want to QUEUE this job ?  Y// ",X:DTIME
        Q:'$T!(X[U)
        S:X="" X="Y"
        I "Yy"[$E(X) D TSK G EXIT
        ;
DQ      ;  ;"Optional entry point for tasked job
        F XQI=0:0 S XQI=$O(XUSR(XQI)) Q:XQI'>0  D COPY1  ;"Cycle through Dest users.

EXIT    ;
        K %,D,D0,DA,DI,DISYS,DIC,DIE,DR,X,XQBOSS,XQI,XQJ,XQUSEK,XQUSR1,XUSR,XQUSEC,XQUSRPM,Y
        Q
        ;" ---------- Actual work below ----------------
COPY1   I XQUSRPM>0 do
        . S DIE=200
        . S DA=XQI
        . S DR="201///"_$P(^DIC(19,XQUSRPM,0),U)
        . D ^DIE
        ;"XQI is dest user's IEN
        S:'$D(^VA(200,XQI,203,0)) ^(0)="^200.03P"
        S DLAYGO=200
        F XQJ=0:0 S XQJ=$O(XQUSEC(XQJ)) Q:XQJ'>0  do
        . S DIC="^VA(200,"_XQI_",203,"
        . S DA(1)=XQI
        . S DIC("P")=200.03
        . S X=$P(^DIC(19,XQJ,0),U)
        . S DIC(0)="ML"
        . D ^DIC
        . I Y>0,'$P(Y,U,3),XQUSEC(XQJ)'="" do
        . . S DIE=DIC
        . . S DIE("P")=200.03
        . . S DA=+Y
        . . S DR="2///"_XQUSEC(XQJ)_";"
        . . D ^DIE
        S:'$D(^VA(200,XQI,51,0)) ^(0)="^200.051P^"
        S (DA,DA(1))=XQI F XQJ=0:0 S XQJ=$O(XQUSEK(XQJ)) Q:XQJ'>0  do
        . S DIC="^VA(200,"_XQI_",51,"
        . S DIC("P")=200.051
        . S DIC(0)="ML"
        . S X=$P(^DIC(19.1,XQUSEK(XQJ),0),U)
        . D ^DIC
        K DLAYGO
        Q
        ;
TSK     S ZTRTN="DQ^XQSMDCPY"  ;"the entry point for the task.
        S ZTIO=""

        S ZTDESC="XQSMD Copy User"

        ;"Save pointer to source's primary menu (e.g. '215')
        S ZTSAVE("XQUSRPM")=""

        ;"Save list of secondary menus.  Format
        ;"      XQUSEC(MenuIEN)=Menu Synonym (piece 2) (or "")
        ;"      XQUSEC(MenuIEN)=Menu Synonym (piece 2) (or "")
        S ZTSAVE("XQUSEC(")=""

        ;"Save list of keys.  Format
        ;"      XQUSEK(KeyIEN)=KeyIEN
        S ZTSAVE("XQUSEK(")=""

        ;"Save destination users.  format:
        ;"      XUSR(+Y)=""
        ;"      XUSR(+Y)=""
        S ZTSAVE("XUSR(")=""

        D ^%ZTLOAD  ;"launch task.
        Q
