| 1 | ORLP3U2 ; SLC/PKS - Team List routines. [3/27/00 4:01pm] | 
|---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**63**;Dec 17, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | Q | 
|---|
| 5 | ; | 
|---|
| 6 | DEL ; Called by option: ORLP3M DELETE USER TEAMS. | 
|---|
| 7 | ; Allows CAC menu deletion of personal Team Lists. | 
|---|
| 8 | ; | 
|---|
| 9 | ; Variables used: | 
|---|
| 10 | ; | 
|---|
| 11 | ;    DIC     = Fileman lookup routine. | 
|---|
| 12 | ;    DIK     = Fileman deletion routine. | 
|---|
| 13 | ;    ORPTEAM = Personal Team to delete. | 
|---|
| 14 | ;    ORQUIT  = Flag for quitting input loop. | 
|---|
| 15 | ;    ORUSER  = Temporary user IEN holder. | 
|---|
| 16 | ;    ORHEAD  = Flag for user list heading. | 
|---|
| 17 | ;    ORNAME  = User name holder. | 
|---|
| 18 | ;    ORNODEL = Flag for no confirmation of deletion. | 
|---|
| 19 | ; | 
|---|
| 20 | N ORPQUIT,ORPTEAM,ORQUIT,ORUSER,ORHEAD,ORNAME,ORNODEL | 
|---|
| 21 | ; | 
|---|
| 22 | ; Set up loop to control action: | 
|---|
| 23 | S ORPQUIT=1 | 
|---|
| 24 | F  D  Q:'ORPQUIT | 
|---|
| 25 | .K DIC,DIK | 
|---|
| 26 | .S DIC="^OR(100.21," | 
|---|
| 27 | .S DIC(0)="AEQM" | 
|---|
| 28 | .S DIC("S")="I $P(^OR(100.21,+Y,0),U,2)=""P""" | 
|---|
| 29 | .S DIC("A")="Select Personal Patient List to delete: " | 
|---|
| 30 | .W ! | 
|---|
| 31 | .D ^DIC | 
|---|
| 32 | .K DIC | 
|---|
| 33 | .I Y<1 S ORPQUIT=0 Q  ; Punt if no selection made. | 
|---|
| 34 | .S ORPTEAM=Y | 
|---|
| 35 | .; | 
|---|
| 36 | .; Display any users currently on team: | 
|---|
| 37 | .S ORHEAD=1   ; Set flag for heading. | 
|---|
| 38 | .S ORUSER=0 | 
|---|
| 39 | .F  S ORUSER=$O(^OR(100.21,+ORPTEAM,1,ORUSER)) Q:+ORUSER=0  D | 
|---|
| 40 | ..I ORHEAD D  ; First time through, print heading. | 
|---|
| 41 | ...S ORHEAD=0 ; Reset flag. | 
|---|
| 42 | ...W !!,"   Users currently on team ",$P(ORPTEAM,U,2),":",! ; Display heading. | 
|---|
| 43 | ..S ORNAME=$P($G(^VA(200,ORUSER,0)),U) ; Get user's name. | 
|---|
| 44 | ..W !,"      ",ORNAME | 
|---|
| 45 | .I 'ORHEAD W ! | 
|---|
| 46 | .; | 
|---|
| 47 | .; Get confirmation before deleting the Team List: | 
|---|
| 48 | .S ORNODEL=0                    ; Preset flag. | 
|---|
| 49 | .S ORQUIT=0 | 
|---|
| 50 | .F  Q:ORQUIT=1  D               ; Loop to control user entry. | 
|---|
| 51 | ..S %=1 | 
|---|
| 52 | ..W !,"Are you ready to delete list "_$PIECE(ORPTEAM,U,2) | 
|---|
| 53 | ..D YN^DICN                     ; Fileman call for user input. | 
|---|
| 54 | ..I %=2 S (ORNODEL,ORQUIT)=1 Q  ; Set flags if user enters "NO." | 
|---|
| 55 | ..I %=1 S ORQUIT=1 Q            ; "YES" confirmation. | 
|---|
| 56 | ..W !,"Enter YES to delete the list, NO to quit." ; For inappropriate entries, loop will repeat. | 
|---|
| 57 | .I ORNODEL=1 Q                  ; Delete not confirmed. | 
|---|
| 58 | .W !,"Working..."               ; Keep user informed. | 
|---|
| 59 | .L +^OR(100.21,+ORPTEAM):3      ; Handle file locking. | 
|---|
| 60 | .S DIK="^OR(100.21," | 
|---|
| 61 | .S DA=+ORPTEAM | 
|---|
| 62 | .D ^DIK                         ; Delete the Team List. | 
|---|
| 63 | .K DIC,DIK,DA,Y,% | 
|---|
| 64 | .L -^OR(100.21,+ORPTEAM)        ; Unlock the file. | 
|---|
| 65 | .W !,"Searching for/removing Consults pointers to deleted team..." | 
|---|
| 66 | .D CLNLIST^GMRCTU(+ORPTEAM,0)   ; Dump team pointers in file 123.5. | 
|---|
| 67 | .; Leave success message: | 
|---|
| 68 | .W !,"List deletion completed." | 
|---|
| 69 | ; | 
|---|
| 70 | Q | 
|---|
| 71 | ; | 
|---|
| 72 | AR ; Called by option: ORLP3U ON/OFF A/L TEAMS. | 
|---|
| 73 | ; Allows users to add/remove themselves from Autolinked Team Lists. | 
|---|
| 74 | ;    (Thanks to Rebecca Bates, Dayton VAMC, for head start on this.) | 
|---|
| 75 | ; | 
|---|
| 76 | ; Variables used: | 
|---|
| 77 | ; | 
|---|
| 78 | ;    DIR      = Fileman user input routine. | 
|---|
| 79 | ;    DIC      = Fileman lookup routine. | 
|---|
| 80 | ;    DIE      = Fileman edit routine. | 
|---|
| 81 | ;    DIK      = Fileman deletion routine. | 
|---|
| 82 | ;    ORTEAM   = Holder for team IEN. | 
|---|
| 83 | ;    ORNAME   = Holder for team name. | 
|---|
| 84 | ;    ORCNT    = Counter variable. | 
|---|
| 85 | ;    ORNONE   = Flag; if true there are no current team assignments. | 
|---|
| 86 | ;    ORACT    = User input holder. | 
|---|
| 87 | ;    ORRESULT = Result of file locking call. | 
|---|
| 88 | ; | 
|---|
| 89 | ; Set up outer control loop for this option's menu function: | 
|---|
| 90 | N ORACT | 
|---|
| 91 | S ORACT=0 | 
|---|
| 92 | F  Q:ORACT=3  D  ; Overall control loop. | 
|---|
| 93 | .; | 
|---|
| 94 | .N DIR,DIC,DIE,DIK,ORTEAM,ORNAME,ORNONE,ORRESULT | 
|---|
| 95 | .W ! ; Leave a blank line on the screen for clarity. | 
|---|
| 96 | .S ORNONE=1 | 
|---|
| 97 | .I $D(^OR(100.21,"C",DUZ)) S ORNONE=0 D  ; Current team assignments display control loop. | 
|---|
| 98 | ..; | 
|---|
| 99 | ..; Get list of currently-assigned Teams: | 
|---|
| 100 | ..S ORTEAM="" ; Initialize. | 
|---|
| 101 | ..F  S ORTEAM=$O(^OR(100.21,"C",DUZ,ORTEAM))  Q:ORTEAM=""  D  ; Each Team where user is asociated. | 
|---|
| 102 | ...; | 
|---|
| 103 | ...; Next two lines of executable code create ^TMP entries as: | 
|---|
| 104 | ...;       ^TMP("ORLPAR",$J,228)="TEAM ABC" | 
|---|
| 105 | ...;    where 228 is a Team List IEN and "TEAM ABC" is a Team name, | 
|---|
| 106 | ...;    and the Team is an autolink type and subscribable (i.e., | 
|---|
| 107 | ...;    the SUBSCRIBE field has a "Y" entry in it): | 
|---|
| 108 | ...I $P(^OR(100.21,ORTEAM,0),"^",2)["A",$P($G(^OR(100.21,ORTEAM,0)),"^",6)="Y" S ^TMP("ORLPAR",$J,ORTEAM)=$P(^OR(100.21,ORTEAM,0),"^") | 
|---|
| 109 | ..; | 
|---|
| 110 | ..; If still no valid data, reset ORNONE and punt: | 
|---|
| 111 | ..I '$D(^TMP("ORLPAR",$J)) S ORNONE=1 Q | 
|---|
| 112 | ..; | 
|---|
| 113 | ..; Display currently-associated Teams: | 
|---|
| 114 | ..W !,"You are associated with the following autolinked teams:",! | 
|---|
| 115 | ..S ORTEAM="" ; Initialize. | 
|---|
| 116 | ..F  S ORTEAM=$O(^TMP("ORLPAR",$J,ORTEAM))  Q:ORTEAM=""  D  ; Each team name. | 
|---|
| 117 | ...S ORNAME=^TMP("ORLPAR",$J,ORTEAM) ; Assign name variable. | 
|---|
| 118 | ...W !,"     "_ORNAME                ; Print to screen. | 
|---|
| 119 | .; | 
|---|
| 120 | .; If no current associations, indicate same: | 
|---|
| 121 | .I ORNONE W !,"You are not currently assigned to any teams." | 
|---|
| 122 | .W ! ; Whether current assignments or not, leave a blank line for clarity. | 
|---|
| 123 | .; | 
|---|
| 124 | .; Set up call to DIR and get user input: | 
|---|
| 125 | .S DIR("A")="Next action" | 
|---|
| 126 | .S DIR("B")="Quit" | 
|---|
| 127 | .S DIR("0")="SET^1:Add;2:Delete;3:Quit" | 
|---|
| 128 | .S DIR("?")="Enter 1, 2, or 3: " | 
|---|
| 129 | .I ORNONE D  ; Change menu choices if deletions not appropriate. | 
|---|
| 130 | ..S DIR("0")="S^1:Add;3:Quit" | 
|---|
| 131 | ..S DIR("?")="Enter either 1 or 3: " | 
|---|
| 132 | .D ^DIR | 
|---|
| 133 | .K DIR | 
|---|
| 134 | .I Y<0!$D(DIRUT)!$D(DTOUT)!$D(DUOUT) S ORACT=3 Q  ; Quit on errors. | 
|---|
| 135 | .I (+Y'=1)&(+Y'=2)&(+Y'=3) S ORACT=3 Q  ; Quit if no acceptable response. | 
|---|
| 136 | .S ORACT=+Y                ; Assign user's response. | 
|---|
| 137 | .I ORACT=3 Q               ; Quit if user doesn't want any changes. | 
|---|
| 138 | .; | 
|---|
| 139 | .; Process deletions: | 
|---|
| 140 | .I ORACT=2 D               ; Deletion control loop. | 
|---|
| 141 | ..; | 
|---|
| 142 | ..; Get user input on Team List for removal: | 
|---|
| 143 | ..S DIC(0)="AEMQZ" | 
|---|
| 144 | ..S DIC="^OR(100.21," | 
|---|
| 145 | ..S DIC("S")="I $D(^TMP(""ORLPAR"",$J,+Y))" | 
|---|
| 146 | ..S DIC("A")="Autolinked team for removal of yourself as user/provider: " | 
|---|
| 147 | ..D ^DIC | 
|---|
| 148 | ..I $D(DTOUT)!$D(DUOUT) Q  ; Entry error. | 
|---|
| 149 | ..I +Y<1 Q                 ; No selection made or bad selection. | 
|---|
| 150 | ..S ORTEAM=+Y              ; Assign team IEN variable. | 
|---|
| 151 | ..S ORNAME=Y(0,0)          ; Assign team name variable. | 
|---|
| 152 | ..K DIC | 
|---|
| 153 | ..; | 
|---|
| 154 | ..; Remove the user from the list: | 
|---|
| 155 | ..S ORRESULT=$$ARLOCK | 
|---|
| 156 | ..I 'ORRESULT Q            ; Quit if there's a locking problem. | 
|---|
| 157 | ..S DA=DUZ | 
|---|
| 158 | ..S DA(1)=ORTEAM | 
|---|
| 159 | ..S DIK="^OR(100.21,"_DA(1)_","_1_"," | 
|---|
| 160 | ..D ^DIK | 
|---|
| 161 | ..K DIK | 
|---|
| 162 | ..L -^OR(100.21,ORTEAM)    ; Clean up file lock. | 
|---|
| 163 | ..Q | 
|---|
| 164 | .; | 
|---|
| 165 | .; Process additions: | 
|---|
| 166 | .I ORACT=1 D               ; Addition control loop. | 
|---|
| 167 | ..; | 
|---|
| 168 | ..; Get user input on Team List for addition: | 
|---|
| 169 | ..S DIC="^OR(100.21," | 
|---|
| 170 | ..S DIC(0)="AEMQZ" | 
|---|
| 171 | ..S DIC("S")="I $P(^OR(100.21,+Y,0),""^"",2)[""A"",$P($G(^OR(100.21,+Y,0)),""^"",6)=""Y"",'$D(^TMP(""ORLPAR"",$J,+Y))" | 
|---|
| 172 | ..S DIC("A")="Autolinked team for addition of yourself as user/provider: " | 
|---|
| 173 | ..D ^DIC | 
|---|
| 174 | ..K DIC | 
|---|
| 175 | ..I $D(DTOUT)!$D(DUOUT) Q  ; Entry error. | 
|---|
| 176 | ..I Y<1 Q                  ; No selection made or bad selection. | 
|---|
| 177 | ..S ORTEAM=+Y              ; Assign Team IEN variable. | 
|---|
| 178 | ..; | 
|---|
| 179 | ..; Add user to selected Team List: | 
|---|
| 180 | ..S ORRESULT=$$ARLOCK | 
|---|
| 181 | ..I 'ORRESULT Q            ; Quit if there's a locking problem. | 
|---|
| 182 | ..K Y,X | 
|---|
| 183 | ..S DIC("P")=$P(^DD(100.21,2,0),"^",2) | 
|---|
| 184 | ..S DIC(0)="LM" | 
|---|
| 185 | ..S DA=DUZ | 
|---|
| 186 | ..S DA(1)=ORTEAM | 
|---|
| 187 | ..S DLAYGO=100.212 | 
|---|
| 188 | ..S X=$P($G(^VA(200,DUZ,0)),"^",1) | 
|---|
| 189 | ..S DIC="^OR(100.21,"_DA(1)_",1," | 
|---|
| 190 | ..D ^DIC | 
|---|
| 191 | ..K DIC,DLAYGO | 
|---|
| 192 | ..L -^OR(100.21,ORTEAM)    ; Clean up file lock. | 
|---|
| 193 | ..Q | 
|---|
| 194 | .; | 
|---|
| 195 | .K ^TMP("ORLPAR",$J)       ; Cleanup each time through. | 
|---|
| 196 | ; | 
|---|
| 197 | K ^TMP("ORLPAR",$J)        ; Cleanup at end to be sure. | 
|---|
| 198 | K DIRUT,DTOUT,DUOUT        ; Cleanup error variables. | 
|---|
| 199 | Q | 
|---|
| 200 | ; | 
|---|
| 201 | ARLOCK(ORTEST) ; Handle locking of select Team List before editing. | 
|---|
| 202 | ; | 
|---|
| 203 | ; Variable used: | 
|---|
| 204 | ; | 
|---|
| 205 | ;    ORTEST = Result of locking call. | 
|---|
| 206 | ; | 
|---|
| 207 | L +^OR(100.21,ORTEAM):5 | 
|---|
| 208 | S ORTEST=$TEST | 
|---|
| 209 | I 'ORTEST W !,"Another user is editing this team.",! | 
|---|
| 210 | Q ORTEST | 
|---|
| 211 | ; | 
|---|