Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SDES2GETDEVICES

SDES2GETDEVICES.m

Go to the documentation of this file.
SDES2GETDEVICES ;ALB/JHC - VISTA SCHEDULING RPCS - DEVICE RETRIEVAL ; MAY 05,2025
 ;;5.3;Scheduling;**907**;Aug 13, 1993;Build 5
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 ; External References
 ; -------------------
 ; Reference to ^%ZIS(1 supported by IA #2963
 ; Reference to ^%ZIS(2 supported by IA #2964
 ;
 ; RPC: SDES2 GET VISTA DEVICES
 ;
 ; SDINPUT("LOOKUPSTRING") = Search string to match device name (* not allowed)
 ; length must be 15 characters or less
 ;
 ; This will return up to 80 devices.
 ;
 Q
DEVICES(JSON,SDCONTEXT,SDINPUT) ;
 N ERRORS,DEVICES,DEVLIST,DEV,DEVDAT,LOOKUP,LOOKUPSHORT
 ; Validation
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 I $D(ERRORS) S RETURN("Device",1)="" M RETURN=ERRORS D BUILDJSON^SDES2JSON(.JSON,.RETURN) Q
 S LOOKUP=$G(SDINPUT("LOOKUPSTRING"))
 D VALLOOKUP(.ERRORS,LOOKUP)
 S LOOKUPSHORT=$E(LOOKUP,1,$L(LOOKUP)-1)
 I $D(ERRORS) S ERRORS("Device",1)="" D BUILDJSON^SDESBUILDJSON(.JSON,.ERRORS) Q
 ; Loop through device info
 D DEVICE(.DEVICES,LOOKUPSHORT,1)
 I '$D(DEVICES) S DEVLIST("Device",1)="" D BUILDJSON^SDESBUILDJSON(.JSON,.DEVLIST) Q
 ; Build output
 D BLDOUTPUT(.DEVICES,.DEVLIST)
  I '$D(DEVLIST) S DEVLIST("Device",1)="" D BUILDJSON^SDESBUILDJSON(.JSON,.DEVLIST) Q
 ; Build JSON output
 D BUILDJSON^SDESBUILDJSON(.JSON,.DEVLIST)
 Q
VALLOOKUP(ERRORS,LOOKUP) ;
 I LOOKUP["*" D ERRLOG^SDESJSON(.ERRORS,52,"Search string cannot contain an *") Q
 I LOOKUP="" D ERRLOG^SDESJSON(.ERRORS,277) Q
 I $L(LOOKUP)>15 D ERRLOG^SDESJSON(.ERRORS,278)
 Q
DEVICE(RETURN,SEARCHSTRING,DIRECTION,RIGHTMARGIN) ; Return a subset of entries from the Device file
 ; Return up to 80 entries.
 ; RETURN(n)=Device IEN^Device Name^Display Name^Location^Right Margin^Page Length
 ; SEARCHSTRING=text to $O from. Allow the Display Name to be used.
 ; Allow "NAME*" to get count limit from that starting point.
 ; DIRECTION=$O direction
 ; [RIGHTMARGIN]=min RM value or min-max value (Default to 80).
 N FOUNDCNT,DEVICEIEN,MAXCOUNT,SEARCH,DTYP,RML,RMH
 S FOUNDCNT=0,MAXCOUNT=$G(MAXCOUNT,80),RIGHTMARGIN=$G(RIGHTMARGIN,80)
 I '$G(DIRECTION) S DIRECTION=1
 S RML=+RIGHTMARGIN,RMH=$S(RIGHTMARGIN["-":$P(RIGHTMARGIN,"-",2),1:99999)
 ;Allow the DisplayName to be used.
 I SEARCHSTRING[" <" S SEARCHSTRING=$RE($P($RE(SEARCHSTRING),"< ",2))
 S SEARCH=SEARCHSTRING I SEARCHSTRING["*" S SEARCHSTRING=$P(SEARCHSTRING,"*",1),SEARCH=""
 F  Q:FOUNDCNT'<MAXCOUNT  S SEARCHSTRING=$O(^%ZIS(1,"B",SEARCHSTRING),DIRECTION) Q:(SEARCHSTRING="")  D
 . I $L(SEARCH),($E(SEARCHSTRING,1,$L(SEARCH))'=SEARCH) Q
 . S DEVICEIEN=0
 . F  S DEVICEIEN=$O(^%ZIS(1,"B",SEARCHSTRING,DEVICEIEN)) Q:'DEVICEIEN  D
 . . Q:'$D(^%ZIS(1,DEVICEIEN,0))
 . . N OUTOFSERVDT,MARGINWIDTH,SECURITY,XTYPE,XSTYPE,XTIME
 . . N DEVICENAME,DISPLAYNAME
 . . N LOCKTIME,CURRTIME,ULIM,LLIM,SECSTRNG,EXT,SCODE
 . . ; Device Info (filter)
 . . S OUTOFSERVDT=$P($G(^%ZIS(1,DEVICEIEN,90)),U)
 . . S MARGINWIDTH=$P($G(^%ZIS(1,DEVICEIEN,91)),U)
 . . S SECURITY=$G(^%ZIS(1,DEVICEIEN,95))
 . . S XSTYPE=$G(^%ZIS(1,DEVICEIEN,"SUBTYPE"))
 . . S XTIME=$G(^%ZIS(1,DEVICEIEN,"TIME"))
 . . S XTYPE=$G(^%ZIS(1,DEVICEIEN,"TYPE"))
 . . ; Device Filters
 . . I $E($G(^%ZIS(2,+XSTYPE,0)))'="P" Q  ;Printers only
 . . S DTYP=$P(XTYPE,"^") I DTYP'="TRM",DTYP'="HG",DTYP'="HFS",DTYP'="CHAN" Q  ;Device Types
 . . Q:($P($G(^%ZIS(1,DEVICEIEN,0)),U,2)="0")!($P($G(^%ZIS(1,DEVICEIEN,0)),U,12)=2)  ;Queuing allowed
 . . I OUTOFSERVDT,(OUTOFSERVDT'>DT) Q  ;Out of Service
 . . ;Prohibited Times -CURRTIME is current time, LLIM is lower limit, ULIM is upper limit
 . . S LOCKTIME=$P(XTIME,"^")
 . . I $L(LOCKTIME) S CURRTIME=$P($H,",",2),CURRTIME=CURRTIME\60#60+(CURRTIME\3600*100),ULIM=$P(LOCKTIME,"-",2),LLIM=+LOCKTIME I $S(ULIM'<LLIM:(CURRTIME'>ULIM&(CURRTIME'<LLIM)),1:(CURRTIME'<LLIM!(CURRTIME'>ULIM))) Q
 . . S EXT=0
 . . I SECURITY]"" S SECSTRNG=$G(DUZ(0)) I SECSTRNG'="@" S EXT=1 F SCODE=1:1:$L(SECSTRNG) I SECURITY[$E(SECSTRNG,SCODE) S EXT=0 Q
 . . Q:EXT  ;User Security check
 . . ; Device data to return
 . . I '+MARGINWIDTH S MARGINWIDTH=$G(^%ZIS(2,+XSTYPE,1),"80^#^60^") ;Get default width & page length p542
 . . I RML>0,(+MARGINWIDTH<RML)!(+MARGINWIDTH>RMH) Q
 . . S DEVICENAME=$P($G(^%ZIS(1,DEVICEIEN,0)),U),DISPLAYNAME=DEVICENAME
 . . S:DEVICENAME'=SEARCHSTRING DISPLAYNAME=SEARCHSTRING_" <"_DEVICENAME_">"
 . . S FOUNDCNT=FOUNDCNT+1,RETURN(FOUNDCNT)=DEVICEIEN_U_DEVICENAME_U_DISPLAYNAME_U_$P($G(^%ZIS(1,DEVICEIEN,1)),U)_U_$P(MARGINWIDTH,U)_U_$P(MARGINWIDTH,U,3)
 Q
BLDOUTPUT(DEVICES,DEVLIST) ;
 S DEV=0 F  S DEV=$O(DEVICES(DEV)) Q:'DEV  D
 .S DEVDAT=$G(DEVICES(DEV))
 .I ($P(DEVDAT,U,2)'[LOOKUP),($P(DEVDAT,U,3)'[LOOKUP) Q
 .S DEVLIST("Device",DEV,"ID")=$P(DEVDAT,U)
 .S DEVLIST("Device",DEV,"Name")=$P(DEVDAT,U,2)
 .S DEVLIST("Device",DEV,"DisplayName")=$P(DEVDAT,U,3)
 .S DEVLIST("Device",DEV,"Location")=$P(DEVDAT,U,4)
 .S DEVLIST("Device",DEV,"RightMargin")=$P(DEVDAT,U,5)
 .S DEVLIST("Device",DEV,"PageLength")=$P(DEVDAT,U,6)
 Q