DVBAUDUU ;ALB/CP - Audited Option User Utilization Prompt ; 8/4/26 12:53pm
;;2.7;AMIE;**256**;;Build 19
; Per VHA Directive 6402 this routine should not be modified
; $$NOW^XLFDT ; #10103 ; API for current date & time:
; ^DISV ; IA # 510
;
Q
;
ENTER ; From option: Audited Option User Utilization
; [DVBA AUDITED OPTION USER UTIL]
;
N DVBOPTION,DVBRPT
S DVBOPTION="AUDITED OPTION USER UTILIZATION"
;
PROMPT ; Issue prompts for screening and sorted report output.
N POP,DVBASKDT,DVBDTBEG,DVBDTEND,DVBFTBEG,DVBFTEND,DVBLEGEND
N DVBOPT,DVBPKG,DVBQUIT,DVBSORT,DVBULIMIT
; ZEXCEPT: IO,IOF,DVBOPTION,DVBRPT
;
W @IOF,!?1,"*** ",DVBOPTION," ***" S (DVBQUIT,DVBLEGEND)=0
D KILLTMP
D GETOPTS G:DVBQUIT EXIT ; Determine Options to include on the report
I DVBRPT=1 D OPTSOUT^DVBAUDDIC("AEMQ",0,1) G:DVBQUIT PROMPT ; Select opts
I DVBRPT=2 D FTVALS^DVBAUDASK2("OPTION") G:DVBQUIT PROMPT ; Free text opt. range
I DVBRPT=3 D ASKPKG^DVBAUDASK1 G:DVBQUIT PROMPT ;All opts for a namespace
;
D ASKDT($T(+0)) G:DVBQUIT PROMPT ;........... Limit report to a dt. range?
I DVBASKDT="YES" D GETDTS^DVBAUDDT1("report LAST USED date") G:DVBQUIT PROMPT
;
D USRLIMIT^DVBAUDASK1($T(+0)) G:DVBQUIT PROMPT ;Active/Inactive Users?
D GETSORT($T(+0)) G:DVBQUIT PROMPT ;.........Prompt for sort criteria
D DEVICE^DVBAUDDEV1($T(+0),"",132) G:$G(POP)!DVBQUIT PROMPT U IO
D IOM132^DVBAUDDEV1($T(+0)) ;..................Change to 132 columns
W @IOF
;
START ; Queued report will start here
N DVBBEG,DVBEND
S DVBBEG=$$NOW^XLFDT()
D BUILD^DVBAUDUU1 ;..........................Build sorted ^TMP global
S DVBEND=$$NOW^XLFDT()
D PRINT^DVBAUDUU2 ;..........................Print the report
D PROCTIME^DVBAUDPRT1(DVBBEG,DVBEND) ;...........Display processing time
D CONTINUE^DVBAUDPRT1 ;........................Press <Enter> to continue
;
EXIT ; Close the Device and kill the ^TMP globals.
; From: PROMPT (above)
;
D IOMRESET^DVBAUDDEV1($T(+0)) ;................ Reset screen to 80 cols
D CLOSE^DVBAUDDEV1 ;........................... Close device, cleanup
;
KILLTMP ; Kill ^TMP global
K ^TMP("AMIE",$J)
;
Q ; Quit routine DVBAUDUU
;
ASKDT(DVBRTN) ; Limit the report to a specific date range?
;
N DVBDEF
; ZEXCEPT: DUZ,DVBASKDT,DVBQUIT
;
S DVBDEF=$G(^DISV(DUZ,DVBRTN,"DVBASKDT"),"NO")
;
W !
S DVBASKDT=$$ASKYESNO^DVBAUDASK1("LIMIT THE REPORT TO A SPECIFIC DATE RANGE",DVBDEF)
I DVBASKDT="^" S DVBQUIT=1 Q
S DVBASKDT=$S(DVBASKDT="Y":"YES",1:"NO")
;
S ^DISV(DUZ,DVBRTN,"DVBASKDT")=DVBASKDT
;
Q ; Quit ASKDT
;
GETOPTS ; Determine how options will be selected for this report
;
N DVBDEF,DVBMAXIMUM,DVBSUB
; ZEXCEPT: DUZ,DVBQUIT,DVBRPT
;
S DVBDEF=$G(^DISV(DUZ,$T(+0),"DVBRPT"),1)
I $G(DVBRPT) S DVBDEF="" ; No default when repeatedly executed
;
S DVBMAXIMUM=3,DVBQUIT=0
W !!,"Which report selection"
S DVBRPT(1)="Select specific options"
S DVBRPT(2)="Select a from-to free text range of options"
S DVBRPT(3)="All the options for a selected package namespace"
F DVBSUB=1:1:3 W !?5,DVBSUB,". ",DVBRPT(DVBSUB)
;
S DVBRPT=$$ASKNUM^DVBAUDASK1(DVBMAXIMUM,DVBDEF)
I "^"[DVBRPT S DVBQUIT=1 Q
S ^DISV(DUZ,$T(+0),"DVBRPT")=DVBRPT
;
Q ; Quit GETOPTS
;
GETSORT(DVBRTN) ; Get sorting criteria
;
N DVBDEF ; Default response
; ZEXCEPT: DUZ,DVBQUIT,DVBSORT
;
S DVBDEF=$G(^DISV(DUZ,DVBRTN,"DVBSORT"))
;
S DVBSORT(1)="Option & User"
S DVBSORT(2)="Option, Parent Service & User"
S DVBSORT(3)="Option, Date Last Used & User"
S DVBSORT(4)="Option, Usage Count & User"
S DVBSORT(5)="Usage Count, Option & User"
S DVBSORT(6)="Usage Count, Parent Service & User"
S DVBSORT(7)="Parent Service, Option & User"
S DVBSORT(8)="Parent Service, User & Option"
S DVBSORT(9)="Parent Service, Date Last Used & User"
S DVBSORT(10)="Parent Service, Date Last Used & Option"
S DVBSORT(11)="Date Last Used, Option, & User"
S DVBSORT(12)="Date Last Used, User & Option"
;
D GETSORT^DVBAUDASK1($T(+0),.DVBSORT,DVBDEF) Q:DVBQUIT
;
S DVBSORT=$G(^DISV(DUZ,DVBRTN,"DVBSORT"))
;
Q ; Quit GETSORT
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDVBAUDUU 4164 printed Sep 17, 2026@20:27:36 Page 2
DVBAUDUU ;ALB/CP - Audited Option User Utilization Prompt ; 8/4/26 12:53pm
+1 ;;2.7;AMIE;**256**;;Build 19
+2 ; Per VHA Directive 6402 this routine should not be modified
+3 ; $$NOW^XLFDT ; #10103 ; API for current date & time:
+4 ; ^DISV ; IA # 510
+5 ;
+6 QUIT
+7 ;
ENTER ; From option: Audited Option User Utilization
+1 ; [DVBA AUDITED OPTION USER UTIL]
+2 ;
+3 NEW DVBOPTION,DVBRPT
+4 SET DVBOPTION="AUDITED OPTION USER UTILIZATION"
+5 ;
PROMPT ; Issue prompts for screening and sorted report output.
+1 NEW POP,DVBASKDT,DVBDTBEG,DVBDTEND,DVBFTBEG,DVBFTEND,DVBLEGEND
+2 NEW DVBOPT,DVBPKG,DVBQUIT,DVBSORT,DVBULIMIT
+3 ; ZEXCEPT: IO,IOF,DVBOPTION,DVBRPT
+4 ;
+5 WRITE @IOF,!?1,"*** ",DVBOPTION," ***"
SET (DVBQUIT,DVBLEGEND)=0
+6 DO KILLTMP
+7 ; Determine Options to include on the report
DO GETOPTS
if DVBQUIT
GOTO EXIT
+8 ; Select opts
IF DVBRPT=1
DO OPTSOUT^DVBAUDDIC("AEMQ",0,1)
if DVBQUIT
GOTO PROMPT
+9 ; Free text opt. range
IF DVBRPT=2
DO FTVALS^DVBAUDASK2("OPTION")
if DVBQUIT
GOTO PROMPT
+10 ;All opts for a namespace
IF DVBRPT=3
DO ASKPKG^DVBAUDASK1
if DVBQUIT
GOTO PROMPT
+11 ;
+12 ;........... Limit report to a dt. range?
DO ASKDT($TEXT(+0))
if DVBQUIT
GOTO PROMPT
+13 IF DVBASKDT="YES"
DO GETDTS^DVBAUDDT1("report LAST USED date")
if DVBQUIT
GOTO PROMPT
+14 ;
+15 ;Active/Inactive Users?
DO USRLIMIT^DVBAUDASK1($TEXT(+0))
if DVBQUIT
GOTO PROMPT
+16 ;.........Prompt for sort criteria
DO GETSORT($TEXT(+0))
if DVBQUIT
GOTO PROMPT
+17 DO DEVICE^DVBAUDDEV1($TEXT(+0),"",132)
if $GET(POP)!DVBQUIT
GOTO PROMPT
USE IO
+18 ;..................Change to 132 columns
DO IOM132^DVBAUDDEV1($TEXT(+0))
+19 WRITE @IOF
+20 ;
START ; Queued report will start here
+1 NEW DVBBEG,DVBEND
+2 SET DVBBEG=$$NOW^XLFDT()
+3 ;..........................Build sorted ^TMP global
DO BUILD^DVBAUDUU1
+4 SET DVBEND=$$NOW^XLFDT()
+5 ;..........................Print the report
DO PRINT^DVBAUDUU2
+6 ;...........Display processing time
DO PROCTIME^DVBAUDPRT1(DVBBEG,DVBEND)
+7 ;........................Press <Enter> to continue
DO CONTINUE^DVBAUDPRT1
+8 ;
EXIT ; Close the Device and kill the ^TMP globals.
+1 ; From: PROMPT (above)
+2 ;
+3 ;................ Reset screen to 80 cols
DO IOMRESET^DVBAUDDEV1($TEXT(+0))
+4 ;........................... Close device, cleanup
DO CLOSE^DVBAUDDEV1
+5 ;
KILLTMP ; Kill ^TMP global
+1 KILL ^TMP("AMIE",$JOB)
+2 ;
+3 ; Quit routine DVBAUDUU
QUIT
+4 ;
ASKDT(DVBRTN) ; Limit the report to a specific date range?
+1 ;
+2 NEW DVBDEF
+3 ; ZEXCEPT: DUZ,DVBASKDT,DVBQUIT
+4 ;
+5 SET DVBDEF=$GET(^DISV(DUZ,DVBRTN,"DVBASKDT"),"NO")
+6 ;
+7 WRITE !
+8 SET DVBASKDT=$$ASKYESNO^DVBAUDASK1("LIMIT THE REPORT TO A SPECIFIC DATE RANGE",DVBDEF)
+9 IF DVBASKDT="^"
SET DVBQUIT=1
QUIT
+10 SET DVBASKDT=$SELECT(DVBASKDT="Y":"YES",1:"NO")
+11 ;
+12 SET ^DISV(DUZ,DVBRTN,"DVBASKDT")=DVBASKDT
+13 ;
+14 ; Quit ASKDT
QUIT
+15 ;
GETOPTS ; Determine how options will be selected for this report
+1 ;
+2 NEW DVBDEF,DVBMAXIMUM,DVBSUB
+3 ; ZEXCEPT: DUZ,DVBQUIT,DVBRPT
+4 ;
+5 SET DVBDEF=$GET(^DISV(DUZ,$TEXT(+0),"DVBRPT"),1)
+6 ; No default when repeatedly executed
IF $GET(DVBRPT)
SET DVBDEF=""
+7 ;
+8 SET DVBMAXIMUM=3
SET DVBQUIT=0
+9 WRITE !!,"Which report selection"
+10 SET DVBRPT(1)="Select specific options"
+11 SET DVBRPT(2)="Select a from-to free text range of options"
+12 SET DVBRPT(3)="All the options for a selected package namespace"
+13 FOR DVBSUB=1:1:3
WRITE !?5,DVBSUB,". ",DVBRPT(DVBSUB)
+14 ;
+15 SET DVBRPT=$$ASKNUM^DVBAUDASK1(DVBMAXIMUM,DVBDEF)
+16 IF "^"[DVBRPT
SET DVBQUIT=1
QUIT
+17 SET ^DISV(DUZ,$TEXT(+0),"DVBRPT")=DVBRPT
+18 ;
+19 ; Quit GETOPTS
QUIT
+20 ;
GETSORT(DVBRTN) ; Get sorting criteria
+1 ;
+2 ; Default response
NEW DVBDEF
+3 ; ZEXCEPT: DUZ,DVBQUIT,DVBSORT
+4 ;
+5 SET DVBDEF=$GET(^DISV(DUZ,DVBRTN,"DVBSORT"))
+6 ;
+7 SET DVBSORT(1)="Option & User"
+8 SET DVBSORT(2)="Option, Parent Service & User"
+9 SET DVBSORT(3)="Option, Date Last Used & User"
+10 SET DVBSORT(4)="Option, Usage Count & User"
+11 SET DVBSORT(5)="Usage Count, Option & User"
+12 SET DVBSORT(6)="Usage Count, Parent Service & User"
+13 SET DVBSORT(7)="Parent Service, Option & User"
+14 SET DVBSORT(8)="Parent Service, User & Option"
+15 SET DVBSORT(9)="Parent Service, Date Last Used & User"
+16 SET DVBSORT(10)="Parent Service, Date Last Used & Option"
+17 SET DVBSORT(11)="Date Last Used, Option, & User"
+18 SET DVBSORT(12)="Date Last Used, User & Option"
+19 ;
+20 DO GETSORT^DVBAUDASK1($TEXT(+0),.DVBSORT,DVBDEF)
if DVBQUIT
QUIT
+21 ;
+22 SET DVBSORT=$GET(^DISV(DUZ,DVBRTN,"DVBSORT"))
+23 ;
+24 ; Quit GETSORT
QUIT