DGPFLF1 ;ALB/KCL - PRF FLAG MANAGEMENT BUILD LIST AREA ; 3/11/03
;;5.3;Registration;**425**;Aug 13, 1993
;
;no direct entry
QUIT
;
EN(DGARY,DGCAT,DGSRTBY,DGCNT) ;Entry point to build list area for PRF Flags.
;
; The following variables are 'system wide variables' in the
; DGPF RECORD FLAG MANAGEMENT List Manager application:
; Input:
; DGARY - global array subscript
; DGCAT - flag category (1=National, 2=Local)
; DGSRTBY - list sort by criteria (N=Flag Name, T=Flage Type)
;
; Output:
; DGCNT - number of lines in the list
;
;display wait msg
D WAIT^DICD
;
;retrieve all flags for the category specified
D GET(DGARY,DGCAT,DGSRTBY)
;
;build list area for flag screen
D BLD(DGSRTBY,.DGCNT)
;
;if no entries in list, display message in list area
I 'DGCNT D
. D SET^DGPFLMU1(DGARY,1,"",1,,,.DGCNT)
. D SET^DGPFLMU1(DGARY,2,"There are currently no flags on file to display.",4,$G(IOINHI),$G(IOINORM),.DGCNT)
;
Q
;
;
GET(DGARY,DGCAT,DGSRTBY) ;Get flag entries for display.
;
; Input:
; DGARY - global array subscript
; DGCAT - flag category (1=National, 2=Local)
; DGSRTBY - list sort by criteria (N=Flag Name, T=Flage Type)
;
; Output: None
;
N DGFILE ;file root of LOCAL or NATIONAL flag file
N DGFLAG ;local array used to hold flag record
N DGIEN ;ien of record in LOCAL or NATIONAL flag file
N DGVPTR ;IEN of record in PRF NATIONAL FLAG or PRF LOCAL FLAG file
N DGRSULT
;
;determine LOCAL or NATIONAL flag file
S DGFILE=$S(DGCAT=1:"^DGPF(26.15)",DGCAT=2:"^DGPF(26.11)",1:0)
;
;loop through each ien of flag file determined by value of DGFILE
S DGIEN=0 F S DGIEN=$O(@DGFILE@(DGIEN)) Q:'DGIEN D
. K DGFLAG
. ;- if national, get flag into DGFLAG array
. I DGCAT=1 D Q:'$G(DGRSULT)
. . S DGRSULT=$$GETNF^DGPFANF(DGIEN,.DGFLAG)
. . S:DGRSULT DGVPTR=DGIEN_";DGPF(26.15,"
. ;
. ;- if local, get flag into DGFLAG array
. I DGCAT=2 D Q:'$G(DGRSULT)
. . S DGRSULT=$$GETLF^DGPFALF(DGIEN,.DGFLAG)
. . S:DGRSULT DGVPTR=DGIEN_";DGPF(26.11,"
. ;
. ;- set flag entry into sorted output array
. D SORT(DGVPTR,DGSRTBY,DGIEN,.DGFLAG)
;
Q
;
;
SORT(DGVPTR,DGSRTBY,DGIEN,DGFLAG) ;Set flag data into sorted output array based on the sort criteria passed.
;
; Input:
; DGVPTR - IEN of record in PRF NATIONAL FLAG or PRF LOCAL FLAG file
; [ex: "1;DGPF(26.15,"]
; DGSRTBY - list sort by criteria (N=Flag Name, T=Flage Type)
; DGIEN - ien of record in LOCAL or NATIONAL flag file
; DGFLAG - local array containing flag record
;
; Output:
; Temporary global with following structure -
; Flag list sorted by flag name:
; ^TMP("DGPFSORT",$J,<status>,<flag name>,<ien>)=<var pointer>^<flag name>^<flag type>^<flag status>
; OR
; Flag list sorted by flag type:
; ^TMP("DGPFSORT",$J,<status>,<flag type>,<ien>)=<var pointer>^<flag name>^<flag type>^<flag status>
;
I DGSRTBY="N" D ;flag name
. S ^TMP("DGPFSORT",$J,$P($G(DGFLAG("STAT")),U),$P($G(DGFLAG("FLAG")),U,2),DGIEN)=DGVPTR_U_$P($G(DGFLAG("FLAG")),U,2)_U_$P($G(DGFLAG("TYPE")),U,2)_U_$P($G(DGFLAG("STAT")),U,2)
E D ;else flag type
. S ^TMP("DGPFSORT",$J,$P($G(DGFLAG("STAT")),U),$P($G(DGFLAG("TYPE")),U,2),DGIEN)=DGVPTR_U_$P($G(DGFLAG("FLAG")),U,2)_U_$P($G(DGFLAG("TYPE")),U,2)_U_$P($G(DGFLAG("STAT")),U,2)
;
Q
;
;
BLD(DGSRTBY,DGCNT) ;Build list area for flag screen.
;
; Input:
; DGSRTBY - list sort by criteria (N=Flag Name, T=Flage Type)
;
; Output:
; DGCNT - number of lines in the list
;
N DGFIEN ;^tmp global subscript (flag ien)
N DGLINE ;line counter
N DGNAME ;flag name
N DGNUM ;list selction number
N DGSI ;flag status internal value
N DGSTAT ;flag status
N DGSUB ;^tmp global subscript (flag name or type)
N DGTYPE ;flag type
N DGVPTR ;IEN of record in PRF NATIONAL FLAG or PRF LOCAL FLAG file
; [ex: "1;DGPF(26.15,"]
N DGTEMP ;sort array root
;
;init line counter and selection number
S (DGLINE,DGNUM)=0
;- loop through ^TMP global by status, active (1) then inactive (0)
F DGSI=1,0 D
. ;- loop through sort selection by flag name or flag type
. S DGSUB=$S(DGSRTBY="N":"",1:0)
. F S DGSUB=$O(^TMP("DGPFSORT",$J,DGSI,DGSUB)) Q:DGSUB="" D
. . ;- loop through flag file ien's
. . S DGFIEN=0
. . F S DGFIEN=$O(^TMP("DGPFSORT",$J,DGSI,DGSUB,DGFIEN)) Q:'DGFIEN D
. . . ;-- get flag data fields from entry in ^TMP global
. . . S DGTEMP=$NA(^TMP("DGPFSORT",$J))
. . . S DGVPTR=$P($G(@DGTEMP@(DGSI,DGSUB,DGFIEN)),U) ;flag IEN
. . . S DGNAME=$P($G(@DGTEMP@(DGSI,DGSUB,DGFIEN)),U,2) ;flag name
. . . S DGTYPE=$P($G(@DGTEMP@(DGSI,DGSUB,DGFIEN)),U,3) ;flag type
. . . S DGSTAT=$P($G(@DGTEMP@(DGSI,DGSUB,DGFIEN)),U,4) ;flag status
. . . ;
. . . ;-- increment selection number
. . . S DGNUM=DGNUM+1
. . . ;
. . . ;-- increment line counter
. . . S DGLINE=DGLINE+1
. . . ;
. . . ;-- set line into list area
. . . D SET(DGARY,DGLINE,DGNUM,1,,,DGVPTR,DGNUM,.DGCNT)
. . . D SET(DGARY,DGLINE,DGNAME,6,,,DGVPTR,DGNUM,.DGCNT)
. . . D SET(DGARY,DGLINE,DGTYPE,38,,,DGVPTR,DGNUM,.DGCNT)
. . . D SET(DGARY,DGLINE,DGSTAT,65,,,DGVPTR,DGNUM,.DGCNT)
;
Q
;
;
SET(DGARY,DGLINE,DGTEXT,DGCOL,DGON,DGOFF,DGVPTR,DGNUM,DGCNT) ;This procedure will set the lines of flag details in the LM display area.
;
; Input:
; DGARY - global array subscript
; DGLINE - line number
; DGTEXT - text
; DGVPTR - (optional) IEN of record in PRF NATIONAL FLAG or PRF LOCAL
; FLAG file [ex: "1;DGPF(26.15,"]
; DGNUM - (optional) selection number
; DGCOL - starting column
; DGON - highlighting on
; DGOFF - highlighting off
;
; Output:
; DGCNT - number of lines in the list, pass by reference
;
N DGX
S:DGLINE>DGCNT DGCNT=DGLINE
S DGX=$S($D(^TMP(DGARY,$J,DGLINE,0)):^(0),1:"")
S ^TMP(DGARY,$J,DGLINE,0)=$$SETSTR^VALM1(DGTEXT,DGX,DGCOL,$L(DGTEXT))
D:$G(DGON)]""!($G(DGOFF)]"") CNTRL^VALM10(DGLINE,DGCOL,$L(DGTEXT),$G(DGON),$G(DGOFF))
;
;associate flag ien with list item for flag selection
S:($G(DGVPTR)]"")&($G(DGNUM)) ^TMP(DGARY,$J,"IDX",DGLINE,DGNUM)=""
S:($G(DGVPTR)]"")&($G(DGNUM)) ^TMP(DGARY,$J,"IDX",DGNUM)=DGVPTR
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGPFLF1 6316 printed Nov 22, 2024@17:58:01 Page 2
DGPFLF1 ;ALB/KCL - PRF FLAG MANAGEMENT BUILD LIST AREA ; 3/11/03
+1 ;;5.3;Registration;**425**;Aug 13, 1993
+2 ;
+3 ;no direct entry
+4 QUIT
+5 ;
EN(DGARY,DGCAT,DGSRTBY,DGCNT) ;Entry point to build list area for PRF Flags.
+1 ;
+2 ; The following variables are 'system wide variables' in the
+3 ; DGPF RECORD FLAG MANAGEMENT List Manager application:
+4 ; Input:
+5 ; DGARY - global array subscript
+6 ; DGCAT - flag category (1=National, 2=Local)
+7 ; DGSRTBY - list sort by criteria (N=Flag Name, T=Flage Type)
+8 ;
+9 ; Output:
+10 ; DGCNT - number of lines in the list
+11 ;
+12 ;display wait msg
+13 DO WAIT^DICD
+14 ;
+15 ;retrieve all flags for the category specified
+16 DO GET(DGARY,DGCAT,DGSRTBY)
+17 ;
+18 ;build list area for flag screen
+19 DO BLD(DGSRTBY,.DGCNT)
+20 ;
+21 ;if no entries in list, display message in list area
+22 IF 'DGCNT
Begin DoDot:1
+23 DO SET^DGPFLMU1(DGARY,1,"",1,,,.DGCNT)
+24 DO SET^DGPFLMU1(DGARY,2,"There are currently no flags on file to display.",4,$GET(IOINHI),$GET(IOINORM),.DGCNT)
End DoDot:1
+25 ;
+26 QUIT
+27 ;
+28 ;
GET(DGARY,DGCAT,DGSRTBY) ;Get flag entries for display.
+1 ;
+2 ; Input:
+3 ; DGARY - global array subscript
+4 ; DGCAT - flag category (1=National, 2=Local)
+5 ; DGSRTBY - list sort by criteria (N=Flag Name, T=Flage Type)
+6 ;
+7 ; Output: None
+8 ;
+9 ;file root of LOCAL or NATIONAL flag file
NEW DGFILE
+10 ;local array used to hold flag record
NEW DGFLAG
+11 ;ien of record in LOCAL or NATIONAL flag file
NEW DGIEN
+12 ;IEN of record in PRF NATIONAL FLAG or PRF LOCAL FLAG file
NEW DGVPTR
+13 NEW DGRSULT
+14 ;
+15 ;determine LOCAL or NATIONAL flag file
+16 SET DGFILE=$SELECT(DGCAT=1:"^DGPF(26.15)",DGCAT=2:"^DGPF(26.11)",1:0)
+17 ;
+18 ;loop through each ien of flag file determined by value of DGFILE
+19 SET DGIEN=0
FOR
SET DGIEN=$ORDER(@DGFILE@(DGIEN))
if 'DGIEN
QUIT
Begin DoDot:1
+20 KILL DGFLAG
+21 ;- if national, get flag into DGFLAG array
+22 IF DGCAT=1
Begin DoDot:2
+23 SET DGRSULT=$$GETNF^DGPFANF(DGIEN,.DGFLAG)
+24 if DGRSULT
SET DGVPTR=DGIEN_";DGPF(26.15,"
End DoDot:2
if '$GET(DGRSULT)
QUIT
+25 ;
+26 ;- if local, get flag into DGFLAG array
+27 IF DGCAT=2
Begin DoDot:2
+28 SET DGRSULT=$$GETLF^DGPFALF(DGIEN,.DGFLAG)
+29 if DGRSULT
SET DGVPTR=DGIEN_";DGPF(26.11,"
End DoDot:2
if '$GET(DGRSULT)
QUIT
+30 ;
+31 ;- set flag entry into sorted output array
+32 DO SORT(DGVPTR,DGSRTBY,DGIEN,.DGFLAG)
End DoDot:1
+33 ;
+34 QUIT
+35 ;
+36 ;
SORT(DGVPTR,DGSRTBY,DGIEN,DGFLAG) ;Set flag data into sorted output array based on the sort criteria passed.
+1 ;
+2 ; Input:
+3 ; DGVPTR - IEN of record in PRF NATIONAL FLAG or PRF LOCAL FLAG file
+4 ; [ex: "1;DGPF(26.15,"]
+5 ; DGSRTBY - list sort by criteria (N=Flag Name, T=Flage Type)
+6 ; DGIEN - ien of record in LOCAL or NATIONAL flag file
+7 ; DGFLAG - local array containing flag record
+8 ;
+9 ; Output:
+10 ; Temporary global with following structure -
+11 ; Flag list sorted by flag name:
+12 ; ^TMP("DGPFSORT",$J,<status>,<flag name>,<ien>)=<var pointer>^<flag name>^<flag type>^<flag status>
+13 ; OR
+14 ; Flag list sorted by flag type:
+15 ; ^TMP("DGPFSORT",$J,<status>,<flag type>,<ien>)=<var pointer>^<flag name>^<flag type>^<flag status>
+16 ;
+17 ;flag name
IF DGSRTBY="N"
Begin DoDot:1
+18 SET ^TMP("DGPFSORT",$JOB,$PIECE($GET(DGFLAG("STAT")),U),$PIECE($GET(DGFLAG("FLAG")),U,2),DGIEN)=DGVPTR_U_$PIECE($GET(DGFLAG("FLAG")),U,2)_U_$PIECE($GET(DGFLAG("TYPE")),U,2)_U_$PIECE($GET(DGFLAG("STAT")),U,2)
End DoDot:1
+19 ;else flag type
IF '$TEST
Begin DoDot:1
+20 SET ^TMP("DGPFSORT",$JOB,$PIECE($GET(DGFLAG("STAT")),U),$PIECE($GET(DGFLAG("TYPE")),U,2),DGIEN)=DGVPTR_U_$PIECE($GET(DGFLAG("FLAG")),U,2)_U_$PIECE($GET(DGFLAG("TYPE")),U,2)_U_$PIECE($GET(DGFLAG("STAT")),U,2)
End DoDot:1
+21 ;
+22 QUIT
+23 ;
+24 ;
BLD(DGSRTBY,DGCNT) ;Build list area for flag screen.
+1 ;
+2 ; Input:
+3 ; DGSRTBY - list sort by criteria (N=Flag Name, T=Flage Type)
+4 ;
+5 ; Output:
+6 ; DGCNT - number of lines in the list
+7 ;
+8 ;^tmp global subscript (flag ien)
NEW DGFIEN
+9 ;line counter
NEW DGLINE
+10 ;flag name
NEW DGNAME
+11 ;list selction number
NEW DGNUM
+12 ;flag status internal value
NEW DGSI
+13 ;flag status
NEW DGSTAT
+14 ;^tmp global subscript (flag name or type)
NEW DGSUB
+15 ;flag type
NEW DGTYPE
+16 ;IEN of record in PRF NATIONAL FLAG or PRF LOCAL FLAG file
NEW DGVPTR
+17 ; [ex: "1;DGPF(26.15,"]
+18 ;sort array root
NEW DGTEMP
+19 ;
+20 ;init line counter and selection number
+21 SET (DGLINE,DGNUM)=0
+22 ;- loop through ^TMP global by status, active (1) then inactive (0)
+23 FOR DGSI=1,0
Begin DoDot:1
+24 ;- loop through sort selection by flag name or flag type
+25 SET DGSUB=$SELECT(DGSRTBY="N":"",1:0)
+26 FOR
SET DGSUB=$ORDER(^TMP("DGPFSORT",$JOB,DGSI,DGSUB))
if DGSUB=""
QUIT
Begin DoDot:2
+27 ;- loop through flag file ien's
+28 SET DGFIEN=0
+29 FOR
SET DGFIEN=$ORDER(^TMP("DGPFSORT",$JOB,DGSI,DGSUB,DGFIEN))
if 'DGFIEN
QUIT
Begin DoDot:3
+30 ;-- get flag data fields from entry in ^TMP global
+31 SET DGTEMP=$NAME(^TMP("DGPFSORT",$JOB))
+32 ;flag IEN
SET DGVPTR=$PIECE($GET(@DGTEMP@(DGSI,DGSUB,DGFIEN)),U)
+33 ;flag name
SET DGNAME=$PIECE($GET(@DGTEMP@(DGSI,DGSUB,DGFIEN)),U,2)
+34 ;flag type
SET DGTYPE=$PIECE($GET(@DGTEMP@(DGSI,DGSUB,DGFIEN)),U,3)
+35 ;flag status
SET DGSTAT=$PIECE($GET(@DGTEMP@(DGSI,DGSUB,DGFIEN)),U,4)
+36 ;
+37 ;-- increment selection number
+38 SET DGNUM=DGNUM+1
+39 ;
+40 ;-- increment line counter
+41 SET DGLINE=DGLINE+1
+42 ;
+43 ;-- set line into list area
+44 DO SET(DGARY,DGLINE,DGNUM,1,,,DGVPTR,DGNUM,.DGCNT)
+45 DO SET(DGARY,DGLINE,DGNAME,6,,,DGVPTR,DGNUM,.DGCNT)
+46 DO SET(DGARY,DGLINE,DGTYPE,38,,,DGVPTR,DGNUM,.DGCNT)
+47 DO SET(DGARY,DGLINE,DGSTAT,65,,,DGVPTR,DGNUM,.DGCNT)
End DoDot:3
End DoDot:2
End DoDot:1
+48 ;
+49 QUIT
+50 ;
+51 ;
SET(DGARY,DGLINE,DGTEXT,DGCOL,DGON,DGOFF,DGVPTR,DGNUM,DGCNT) ;This procedure will set the lines of flag details in the LM display area.
+1 ;
+2 ; Input:
+3 ; DGARY - global array subscript
+4 ; DGLINE - line number
+5 ; DGTEXT - text
+6 ; DGVPTR - (optional) IEN of record in PRF NATIONAL FLAG or PRF LOCAL
+7 ; FLAG file [ex: "1;DGPF(26.15,"]
+8 ; DGNUM - (optional) selection number
+9 ; DGCOL - starting column
+10 ; DGON - highlighting on
+11 ; DGOFF - highlighting off
+12 ;
+13 ; Output:
+14 ; DGCNT - number of lines in the list, pass by reference
+15 ;
+16 NEW DGX
+17 if DGLINE>DGCNT
SET DGCNT=DGLINE
+18 SET DGX=$SELECT($DATA(^TMP(DGARY,$JOB,DGLINE,0)):^(0),1:"")
+19 SET ^TMP(DGARY,$JOB,DGLINE,0)=$$SETSTR^VALM1(DGTEXT,DGX,DGCOL,$LENGTH(DGTEXT))
+20 if $GET(DGON)]""!($GET(DGOFF)]"")
DO CNTRL^VALM10(DGLINE,DGCOL,$LENGTH(DGTEXT),$GET(DGON),$GET(DGOFF))
+21 ;
+22 ;associate flag ien with list item for flag selection
+23 if ($GET(DGVPTR)]"")&($GET(DGNUM))
SET ^TMP(DGARY,$JOB,"IDX",DGLINE,DGNUM)=""
+24 if ($GET(DGVPTR)]"")&($GET(DGNUM))
SET ^TMP(DGARY,$JOB,"IDX",DGNUM)=DGVPTR
+25 QUIT