ORLPTU ; SLC/PKS OE/RR - Terminated users, pointer removal. ; [3/13/00 1:04pm]
;;3.0;ORDER ENTRY/RESULTS REPORTING;**44**;Dec 17, 1997
;
; OE/RR - Remove pointers from team lists file.
; The records to be edited are pointers to file #200, NEW PERSON.
; Routine is triggered by Kernel's XU USER TERMINATE event.
;
; This routine also removes the complete team list record from
; team file ^OR(100.21 if the Team List involved is a Personal
; type list and the terminated user is the only user on the list.
;
; Entries are removed from the following files::
;
; File Name File#,Field# Field Name
; -------------------------------------------------------------
; OE/RR LIST 100.21,2 USER
; OE/RR LIST 100.21,3 AUTOLINK
;
; The first example is a subfile multiple pointer and DINUM field.
; The second example is a subfile multiple variable pointer.
; Variable "USER" is DUZ of user for whom entries will be removed;
; it's value must be available to the routine from Kernel.
;
; =============================================================
;
; EXAMPLES of file entries with pointers being removed:
; (Where "777" is the USER) -
;
; ^OR(100.21,140,1,777,0) = 777
; ^OR(100,21,140,2,1,0) = 777;VA(200,^B
;
; =============================================================
;
; Variables used:
;
; USER = DUZ of terminated user.
; DIK,DA = Used by call to ^DIK.
; RFILE = Root file.
; IEN = Record IEN.
; SIEN = Subfile IEN.
; TEAM = IEN of team to kill if terminated user is only user.
; ORYDAT = File data holder.
;
; -------------------------------------------------------------
;
Q
;
PASS(TU) ; TU (Terminated User = USER variable) sent in call at this tag.
;
N USER
S USER=TU ; Assign USER variable.
I USER="" Q ; Punt right away if there's a problem.
D MAIN ; Skip next tag, go to main processing.
Q
;
KUSER ; Get USER from kernel - called by option: OR TERMINATE CLEANUP.
;
N USER
S USER=$GET(XUIFN) ; Assign USER variable.
I USER="" Q ; Punt here if there's a problem.
;
MAIN ; Processing portion of routine.
;
N DIK,DA,RFILE,IEN,TEAM,CNT,SIEN,ORYDAT
;
; Order through the file for each team:
S RFILE="^OR(100.21," ; Assign root file string.
S IEN=0 ; Initialize.
;
F S IEN=$ORDER(^OR(100.21,IEN)) Q:+IEN=0 D ; Each team.
.S TEAM=""
.S CNT=0
.S SIEN=0
.;
.; Check and remove user from teams as applicable:
.F CNT=0:1 S SIEN=$ORDER(^OR(100.21,IEN,1,SIEN)) Q:+SIEN=0 D
..I SIEN=USER D ; If user is on team, set FM vars and call DIK.
...N DA
...S DA=SIEN,DA(1)=IEN,DIK=RFILE_DA(1)_",1,"
...D ^DIK
...;
...; Set up for possible team kill if team type is "P" (Personal):
...I $P(^OR(100.21,IEN,0),"^",2)="P" S TEAM=IEN
.;
.; Check and remove user for AUTOLINKS if found:
.S SIEN=0 ; Initialize again.
.F S SIEN=$O(^OR(100.21,IEN,2,SIEN)) Q:+SIEN=0 D
..I +(^OR(100.21,IEN,2,SIEN,0))=USER D
...;
...; Check for correct type of AUTOLINK:
...S ORYDAT="^OR(100.21,"_IEN_",2,"_SIEN_",0)"
...I $G(@ORYDAT)'["VA" Q ; Not a ^VA(200 file pointer.
...;
...N DA
...S DA=SIEN,DA(1)=IEN,DIK=RFILE_DA(1)_",2,"
...D ^DIK
.;
.; Remove team entry altogether if terminated user is only user:
.I CNT=1&'(TEAM="") D ; Set FM vars, call DIK, kill team entry.
..N DA
..S DA=TEAM,DIK=RFILE
..D ^DIK
..;
..; Call tag/routine to clean up pointers to the list in file 123.5:
..D CLNLIST^GMRCTU(TEAM,0)
;
Q
;
ORLPTU ; SLC/PKS OE/RR - Terminated users, pointer removal. ; [3/13/00 1:04pm]
+1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**44**;Dec 17, 1997
+2 ;
+3 ; OE/RR - Remove pointers from team lists file.
+4 ; The records to be edited are pointers to file #200, NEW PERSON.
+5 ; Routine is triggered by Kernel's XU USER TERMINATE event.
+6 ;
+7 ; This routine also removes the complete team list record from
+8 ; team file ^OR(100.21 if the Team List involved is a Personal
+9 ; type list and the terminated user is the only user on the list.
+10 ;
+11 ; Entries are removed from the following files::
+12 ;
+13 ; File Name File#,Field# Field Name
+14 ; -------------------------------------------------------------
+15 ; OE/RR LIST 100.21,2 USER
+16 ; OE/RR LIST 100.21,3 AUTOLINK
+17 ;
+18 ; The first example is a subfile multiple pointer and DINUM field.
+19 ; The second example is a subfile multiple variable pointer.
+20 ; Variable "USER" is DUZ of user for whom entries will be removed;
+21 ; it's value must be available to the routine from Kernel.
+22 ;
+23 ; =============================================================
+24 ;
+25 ; EXAMPLES of file entries with pointers being removed:
+26 ; (Where "777" is the USER) -
+27 ;
+28 ; ^OR(100.21,140,1,777,0) = 777
+29 ; ^OR(100,21,140,2,1,0) = 777;VA(200,^B
+30 ;
+31 ; =============================================================
+32 ;
+33 ; Variables used:
+34 ;
+35 ; USER = DUZ of terminated user.
+36 ; DIK,DA = Used by call to ^DIK.
+37 ; RFILE = Root file.
+38 ; IEN = Record IEN.
+39 ; SIEN = Subfile IEN.
+40 ; TEAM = IEN of team to kill if terminated user is only user.
+41 ; ORYDAT = File data holder.
+42 ;
+43 ; -------------------------------------------------------------
+44 ;
+45 QUIT
+46 ;
PASS(TU) ; TU (Terminated User = USER variable) sent in call at this tag.
+1 ;
+2 NEW USER
+3 ; Assign USER variable.
SET USER=TU
+4 ; Punt right away if there's a problem.
IF USER=""
QUIT
+5 ; Skip next tag, go to main processing.
DO MAIN
+6 QUIT
+7 ;
KUSER ; Get USER from kernel - called by option: OR TERMINATE CLEANUP.
+1 ;
+2 NEW USER
+3 ; Assign USER variable.
SET USER=$GET(XUIFN)
+4 ; Punt here if there's a problem.
IF USER=""
QUIT
+5 ;
MAIN ; Processing portion of routine.
+1 ;
+2 NEW DIK,DA,RFILE,IEN,TEAM,CNT,SIEN,ORYDAT
+3 ;
+4 ; Order through the file for each team:
+5 ; Assign root file string.
SET RFILE="^OR(100.21,"
+6 ; Initialize.
SET IEN=0
+7 ;
+8 ; Each team.
FOR
SET IEN=$ORDER(^OR(100.21,IEN))
IF +IEN=0
QUIT
Begin DoDot:1
+9 SET TEAM=""
+10 SET CNT=0
+11 SET SIEN=0
+12 ;
+13 ; Check and remove user from teams as applicable:
+14 FOR CNT=0:1
SET SIEN=$ORDER(^OR(100.21,IEN,1,SIEN))
IF +SIEN=0
QUIT
Begin DoDot:2
+15 ; If user is on team, set FM vars and call DIK.
IF SIEN=USER
Begin DoDot:3
+16 NEW DA
+17 SET DA=SIEN
SET DA(1)=IEN
SET DIK=RFILE_DA(1)_",1,"
+18 DO ^DIK
+19 ;
+20 ; Set up for possible team kill if team type is "P" (Personal):
+21 IF $PIECE(^OR(100.21,IEN,0),"^",2)="P"
SET TEAM=IEN
End DoDot:3
End DoDot:2
+22 ;
+23 ; Check and remove user for AUTOLINKS if found:
+24 ; Initialize again.
SET SIEN=0
+25 FOR
SET SIEN=$ORDER(^OR(100.21,IEN,2,SIEN))
IF +SIEN=0
QUIT
Begin DoDot:2
+26 IF +(^OR(100.21,IEN,2,SIEN,0))=USER
Begin DoDot:3
+27 ;
+28 ; Check for correct type of AUTOLINK:
+29 SET ORYDAT="^OR(100.21,"_IEN_",2,"_SIEN_",0)"
+30 ; Not a ^VA(200 file pointer.
IF $GET(@ORYDAT)'["VA"
QUIT
+31 ;
+32 NEW DA
+33 SET DA=SIEN
SET DA(1)=IEN
SET DIK=RFILE_DA(1)_",2,"
+34 DO ^DIK
End DoDot:3
End DoDot:2
+35 ;
+36 ; Remove team entry altogether if terminated user is only user:
+37 ; Set FM vars, call DIK, kill team entry.
IF CNT=1&'(TEAM="")
Begin DoDot:2
+38 NEW DA
+39 SET DA=TEAM
SET DIK=RFILE
+40 DO ^DIK
+41 ;
+42 ; Call tag/routine to clean up pointers to the list in file 123.5:
+43 DO CLNLIST^GMRCTU(TEAM,0)
End DoDot:2
End DoDot:1
+44 ;
+45 QUIT
+46 ;