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

BSDNAA.m

Go to the documentation of this file.
  1. BSDNAA ; IHS/ANMC/LJF - NUM AVAIL APPT REPORT ; [ 02/10/2005 3:59 PM ]
  1. ;;5.3;PIMS;**1002**;APR 26, 2002
  1. ;
  1. ASK ; -- ask user for clinics and device
  1. NEW VAUTC,VAUTD,BSDNUM,X,POP,BSDATE
  1. S X="Enter date to start 14 day range for viewing available appts."
  1. S BSDATE=$$READ^BDGF("DO^::EX","Starting Date","TODAY",X) Q:BSDATE<1
  1. D CLINIC^BSDU(2) Q:$D(BSDQ)
  1. S Y=$$BROWSE^BDGF Q:"PB"'[Y I Y="B" D EN Q ;browse in list mgr mode
  1. ;IHS/ITSC/WAR 1/10/05 PATCH #1002 Added VALMHDR* variable for printing
  1. ;D ZIS^BDGF("PQ","START^BSDNAA","NUM AVAIL APPT","BSDATE;VAUTC*;VAUTD*")
  1. D ZIS^BDGF("PQ","START^BSDNAA","NUM AVAIL APPT","BSDATE;VAUTC*;VAUTD*;VALMHDR*")
  1. Q
  1. ;
  1. START ;EP; -- re-entry for printing to paper
  1. D INIT,PRINT Q
  1. ;
  1. EN ; -- main entry point for BSDRM NUM AVAIL APPT
  1. NEW VALMCNT D TERM^VALM0,CLEAR^VALM1
  1. D EN^VALM("BSDRM NUM AVAIL APPT")
  1. D EXIT,CLEAR^VALM1
  1. Q
  1. ;
  1. HDR ; -- header code
  1. S VALMHDR(1)=$$SP(20)_"NUMBER OF APPTS AVAILABLE BY CLINIC AND DATE"
  1. S VALMHDR(2)=$$SP(25)_$$RANGE^BDGF(BSDATE,$$FMADD^XLFDT(BSDATE,13))
  1. S VALMCAP=$$DAYS ;column headings
  1. Q
  1. ;
  1. INIT ; -- loop thru clinics selected and build display array
  1. S VALMCNT=0 K ^TMP("BSDNAA",$J),^TMP("BSDNAA1",$J)
  1. NEW ARRAY S ARRAY=$S(VAUTC:"^SC",1:"VAUTC")
  1. ;
  1. ; loop thru selected clinics and put in principal clinic order
  1. NEW CLINIC,PC,ABBR
  1. S CLINIC=0
  1. F S CLINIC=$O(@ARRAY@(CLINIC)) Q:'CLINIC D
  1. . Q:'$$OKAY(CLINIC) ;quit if inactive or no schedule
  1. . Q:$D(^SC("AIHSPC",CLINIC)) ;quit if principal clinic
  1. . S PC=$$PRIN^BSDU(CLINIC) ;get princ clinic name
  1. . S ABBR=$$GET1^DIQ(44,CLINIC,1) ;clinic's abbreviation
  1. . S:ABBR="" ABBR="??"_CLINIC
  1. . S ^TMP("BSDNAA1",$J,PC,ABBR,CLINIC)="" ;put in pc/clinic order
  1. ;
  1. ; loop thru sorted list and count available appts
  1. NEW PC,ABBR,CLINIC,LINE,DATE,SCHED,COUNT,END
  1. S PC=0 F S PC=$O(^TMP("BSDNAA1",$J,PC)) Q:PC="" D
  1. . D SET("Principal Clinic: "_PC,.VALMCNT)
  1. . S ABBR=0 F S ABBR=$O(^TMP("BSDNAA1",$J,PC,ABBR)) Q:ABBR="" D
  1. .. S CLINIC=0
  1. .. F S CLINIC=$O(^TMP("BSDNAA1",$J,PC,ABBR,CLINIC)) Q:'CLINIC D
  1. ... S LINE=$$PAD(ABBR,8)_"|" ;begin line for display array
  1. ... ;
  1. ... ; now loop thru date range, count and put in display array
  1. ... S DATE=BSDATE-1,END=$$FMADD^XLFDT(BSDATE,13)
  1. ... F S DATE=$$FMADD^XLFDT(DATE,1) Q:DATE>END D
  1. .... S SCHED=$G(^SC(CLINIC,"ST",DATE,1))
  1. .... I SCHED="" S LINE=LINE_" 0 |" Q
  1. .... S COUNT=$$COUNT(SCHED),LINE=LINE_$J(COUNT,3)_" |"
  1. ... D SET(LINE,.VALMCNT) ;add clinic's line to display array
  1. ;
  1. K ^TMP("BSDNAA1",$J)
  1. Q
  1. ;
  1. COUNT(LINE) ; returns # of avail appts in display line LINE
  1. NEW I,CNT,J,X
  1. I LINE["CANCELLED" Q 0
  1. S LINE=$P(LINE,"|",2,999)
  1. F I="|","[","]","*"," ","0" S LINE=$$STRIP^XLFSTR(LINE,I)
  1. ;
  1. ; -- count up appts left
  1. S CNT=0 F I=1:1:9 Q:LINE="" D
  1. . S X=LINE F J=1:1 Q:X="" S:$E(X)=I CNT=CNT+I S X=$E(X,2,99)
  1. . S LINE=$$STRIP^XLFSTR(LINE,I)
  1. Q +$G(CNT)
  1. ;
  1. SET(LINE,NUM) ; put display line into display array
  1. S NUM=NUM+1
  1. S ^TMP("BSDNAA",$J,NUM,0)=LINE
  1. Q
  1. ;
  1. HELP ; -- help code
  1. S X="?" D DISP^XQORM1 W !!
  1. Q
  1. ;
  1. EXIT ; -- exit code
  1. K ^TMP("BSDNAA",$J)
  1. Q
  1. ;
  1. EXPND ; -- expand code
  1. Q
  1. ;
  1. ;
  1. PRINT ; -- loop thru ^tmp and print
  1. ;IHS/ITSC/WAR 1/10/2005 PATCH 1002 Added next line for printing
  1. U IO D HDR
  1. NEW X,VALMHDR,BSDPG,BSDAYS
  1. S BSDAYS=$$DAYS D HED
  1. S X=0 F S X=$O(^TMP("BSDNAA",$J,X)) Q:'X D
  1. . I $Y>(IOSL-4) D HED
  1. . W !,^TMP("BSDNAA",$J,X,0)
  1. D ^%ZISC,EXIT
  1. Q
  1. ;
  1. ;
  1. HED ; -- heading
  1. ;IHS/ITSC/WAR 1/10/2005 PATCH 1002 - split command for form feed.
  1. ;W @IOF S BSDPG=$G(BSDPG)+1
  1. I +$G(BSDPG)>0 W @IOF
  1. S BSDPG=$G(BSDPG)+1
  1. F I=1:1 Q:'$D(VALMHDR(I)) W !,VALMHDR(I) W:I=1 ?70,"Page ",BSDPG
  1. W !,BSDAYS,!,$$REPEAT^XLFSTR("=",80)
  1. Q
  1. ;
  1. DAYS() ; -- creates array of date range
  1. NEW X,DAYS,Y,END
  1. S DAYS(BSDATE)="",X=BSDATE,END=$$FMADD^XLFDT(BSDATE,13)
  1. F S X=$$FMADD^XLFDT(X,1) Q:X>END S DAYS(X)=""
  1. S Y=$$SP(8)_"| "
  1. S X=0 F S X=$O(DAYS(X)) Q:X="" S Y=Y_$E(X,6,7)_" | "
  1. Q $G(Y)
  1. ;
  1. OKAY(C) ; -- active clinic with schedule? (yes=true)
  1. NEW X
  1. S X=$G(^SC(C,"I")) Q:'$D(^SC(C,"ST")) 0 Q:'$O(^("ST",BSDATE)) 0
  1. Q $S($P(^SC(C,0),U,3)'="C":0,'X:1,(BSDATE>(X-1))&('$P(X,U,2)):0,1:1)
  1. ;
  1. PAD(D,L) ;EP -- SUBRTN to pad length of data
  1. ; -- D=data L=length
  1. Q $E(D_$$REPEAT^XLFSTR(" ",L),1,L)
  1. ;
  1. SP(N) ; -- SUBRTN to pad N number of spaces
  1. Q $$PAD(" ",N)