[796] | 1 | TMGSDAU ;TMG/kst/Schedule Availability Utilities ;1/06/09
|
---|
| 2 | ;;1.0;TMG-LIB;**1**;12/08/08
|
---|
| 3 | ;
|
---|
| 4 | ;"TMG SCHEDULING AVAILIBILITY UTILITIES
|
---|
| 5 | ;"Kevin Toppenberg MD
|
---|
| 6 | ;"GNU General Public License (GPL) applies
|
---|
| 7 | ;"12/22/08
|
---|
| 8 | ;
|
---|
| 9 | ;"NOTE: Much of this code originated from SDB*.m (heavily modified!)
|
---|
| 10 | ;"
|
---|
| 11 | ;"=======================================================================
|
---|
| 12 | ;" API -- Public Functions.
|
---|
| 13 | ;"=======================================================================
|
---|
| 14 | ;"FRSH7ST(TMGIEN,TMG1DATE,TMGMSG) -- Refresh 7 weeks of "ST" nodes, starting at given date.
|
---|
| 15 | ;"ENSUR1ST(TMGIEN,TMG1DATE,TMGMSG) -- Ensure a "ST" node exists for a given date.
|
---|
| 16 | ;"FORCE1ST(TMGIEN,TMG1DATE,TMGMSG) -- make/remake a "ST" node for a given date.
|
---|
| 17 | ;"PAT4DAY(TMGIEN,TMG1DATE,TMGARR,TMGMSG) -- return a pattern appropriate for placing in "ST" for date.
|
---|
| 18 | ;"FIX1ST(TMGIEN,TMG1DATE,TMGMSG) -- set slot numbers to match existing appts.
|
---|
| 19 | ;"DEC1SLOT(TMGIEN,APPT,TMGMSG) -- decrement the availability number for a slot at a given time
|
---|
| 20 | ;"SLTINDEX(TMGIEN,APPT,SAVARR) -- return INDEX in "ST" PATTERN node for given appt slot time
|
---|
| 21 | ;"SPECPAT(TMGIEN,DATE,AVAILSTR) -- Add header to AvailStr
|
---|
| 22 | ;
|
---|
| 23 | ;"=======================================================================
|
---|
| 24 | ;"Dependancies
|
---|
| 25 | ;"=======================================================================
|
---|
| 26 | ;"=======================================================================
|
---|
| 27 | ;
|
---|
| 28 | FRSH7ST(TMGIEN,TMG1DATE,TMGMSG)
|
---|
| 29 | ;"Purpose: To Refresh 7 weeks of "ST" nodes, starting at given date.
|
---|
| 30 | ;" (All on same day of week.)
|
---|
| 31 | ;" It will copy from LIMDTate nodes if needed, and then check for
|
---|
| 32 | ;" any existing appts on that date, and add them if needed.
|
---|
| 33 | ;" NOTE: if the "ST" node already exists, it Will be remade.
|
---|
| 34 | ;"Input: TMGIEN -- IEN in file 44 to work on
|
---|
| 35 | ;" TMG1DATE -- the date to start refreshing ST on
|
---|
| 36 | ;" TMGMSG -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
| 37 | ;" TMGMSG=line count of error messages
|
---|
| 38 | ;" TMGMSG(1)=ErrMsg
|
---|
| 39 | ;" TMGMSG(2)=ErrMsg etc..
|
---|
| 40 | ;"Globally-scoped vars used: ...
|
---|
| 41 | ;"Result: 1 = Success or
|
---|
| 42 | ;" 0 = Intermediate success
|
---|
| 43 | ;" -1 = error
|
---|
| 44 | ;
|
---|
| 45 | NEW TMGRESULT SET TMGRESULT=1
|
---|
| 46 | LOCK +^SC(TMGIEN,"ST"):10
|
---|
| 47 | ELSE DO GOTO FR7DONE
|
---|
| 48 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 49 | . SET TMGMSG(TMGMSG)="Unable to get lock on ^SC("_TMGIEN_",""ST"",)."
|
---|
| 50 | . SET TMGRESULT=-1
|
---|
| 51 | NEW COUNT,DATE
|
---|
| 52 | SET DATE=TMG1DATE
|
---|
| 53 | FOR COUNT=1:1:7 DO QUIT:(TMGRESULT'=1)
|
---|
| 54 | . KILL ^SC(TMGIEN,"ST",DATE)
|
---|
| 55 | . SET TMGRESULT=$$FORCE1ST(TMGIEN,DATE,.TMGMSG)
|
---|
| 56 | . SET DATE=$$ADD2DATE^TMGAVLS1(DATE,7)
|
---|
| 57 | LOCK -^SC(TMGIEN,"ST")
|
---|
| 58 | FR7DONE ;
|
---|
| 59 | QUIT TMGRESULT
|
---|
| 60 | ;
|
---|
| 61 | ;
|
---|
| 62 | ENSUR1ST(TMGIEN,TMG1DATE,TMGMSG)
|
---|
| 63 | ;"Purpose: To Ensure a "ST" node exists for a given date.
|
---|
| 64 | ;" It will copy from LIMDTate nodes if needed, and then check for
|
---|
| 65 | ;" any existing appts on that date, and add them if needed.
|
---|
| 66 | ;" NOTE: if the "ST" node already exists, it will NOT be remade.
|
---|
| 67 | ;"Input: TMGIEN -- IEN in file 44 to work on
|
---|
| 68 | ;" TMG1DATE -- the date to force ST for. Don't pass by reference
|
---|
| 69 | ;" TMGMSG -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
| 70 | ;" TMGMSG=line count of error messages
|
---|
| 71 | ;" TMGMSG(1)=ErrMsg
|
---|
| 72 | ;" TMGMSG(2)=ErrMsg etc..
|
---|
| 73 | ;"Globally-scoped vars used: ...
|
---|
| 74 | ;"Result: 1 = Success or
|
---|
| 75 | ;" 0 = Intermediate success
|
---|
| 76 | ;" -1 = error
|
---|
| 77 | ;
|
---|
| 78 | NEW TMGRESULT SET TMGRESULT=1
|
---|
| 79 | SET TMG1DATE=$GET(TMG1DATE)\1
|
---|
| 80 | LOCK +^SC(TMGIEN,"ST",TMG1DATE):10
|
---|
| 81 | ELSE DO GOTO E1STDONE
|
---|
| 82 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 83 | . SET TMGMSG(TMGMSG)="Unable to get lock on ^SC("_TMGIEN_",""ST"","_TMG1DATE_")."
|
---|
| 84 | . SET TMGRESULT=-1
|
---|
| 85 | IF $DATA(^SC(TMGIEN,"ST",TMG1DATE))=0 DO
|
---|
| 86 | . SET TMGRESULT=$$FORCE1ST(TMGIEN,TMG1DATE,.TMGMSG)
|
---|
| 87 | LOCK -^SC(TMGIEN,"ST",TMG1DATE)
|
---|
| 88 | E1STDONE ;
|
---|
| 89 | QUIT TMGRESULT
|
---|
| 90 | ;
|
---|
| 91 | ;
|
---|
| 92 | FORCE1ST(TMGIEN,TMG1DATE,TMGMSG)
|
---|
| 93 | ;"Purpose: To make/remake a "ST" node for a given date.
|
---|
| 94 | ;" It will copy from LIMDTate nodes if needed, and then check for
|
---|
| 95 | ;" any existing appts on that date, and add them if needed.
|
---|
| 96 | ;" NOTE: if the "ST" node already exists, it WILL be remade.
|
---|
| 97 | ;"Input: TMGIEN -- IEN in file 44 to work on
|
---|
| 98 | ;" TMG1DATE -- the date to force ST for.
|
---|
| 99 | ;" TMGMSG -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
| 100 | ;" TMGMSG=line count of error messages
|
---|
| 101 | ;" TMGMSG(1)=ErrMsg
|
---|
| 102 | ;" TMGMSG(2)=ErrMsg etc..
|
---|
| 103 | ;"Globally-scoped vars used: ...
|
---|
| 104 | ;"Result: 1 = Success or
|
---|
| 105 | ;" 0 = Intermediate success
|
---|
| 106 | ;" -1 = error
|
---|
| 107 | ;
|
---|
| 108 | NEW TMGRESULT,TMGARR
|
---|
| 109 | NEW DATE SET DATE=TMG1DATE\1
|
---|
| 110 | LOCK +^SC(TMGIEN,"ST",DATE):10
|
---|
| 111 | ELSE DO GOTO M1STDONE
|
---|
| 112 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 113 | . SET TMGMSG(TMGMSG)="Unable to get lock on ^SC("_TMGIEN_",""ST"","_DATE_")."
|
---|
| 114 | . SET TMGRESULT=-1
|
---|
| 115 | SET TMGRESULT=$$PAT4DAY(TMGIEN,TMG1DATE,.TMGARR,.TMGMSG)
|
---|
| 116 | IF TMGRESULT'=1 GOTO M1STDONE
|
---|
| 117 | KILL ^SC(TMGIEN,"ST",DATE)
|
---|
| 118 | MERGE ^SC(TMGIEN,"ST",DATE)=TMGARR
|
---|
| 119 | IF $$FIX1ST(TMGIEN,TMG1DATE,.TMGMSG)=-1 SET TMGRESULT=0
|
---|
| 120 | LOCK -^SC(TMGIEN,"ST",TMG1DATE)
|
---|
| 121 | M1STDONE ;
|
---|
| 122 | QUIT TMGRESULT
|
---|
| 123 | ;
|
---|
| 124 | ;
|
---|
| 125 | PAT4DAY(TMGIEN,TMG1DATE,TMGARR,TMGMSG)
|
---|
| 126 | ;"Purpose: To return a pattern appropriate for placing in "ST" for date.
|
---|
| 127 | ;"Input: TMGIEN -- IEN in file 44 to work on
|
---|
| 128 | ;" TMG1DATE -- the date to work on.
|
---|
| 129 | ;" TMGARR -- PASS BY REFERENCE. An OUT PARAMETER. Prior results killed.
|
---|
| 130 | ;" This is an array that may be merged with ^SC(TMGIEN,"ST",DATE)
|
---|
| 131 | ;" TMGMSG -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
| 132 | ;" TMGMSG=line count of error messages
|
---|
| 133 | ;" TMGMSG(1)=ErrMsg
|
---|
| 134 | ;" TMGMSG(2)=ErrMsg etc..
|
---|
| 135 | ;"Globally-scoped vars used: ...
|
---|
| 136 | ;"Result: 1 = Success or
|
---|
| 137 | ;" -1 = error
|
---|
| 138 | ;
|
---|
| 139 | KILL TMGARR
|
---|
| 140 | NEW TMGRESULT SET TMGRESULT=-1 ;"default to failure
|
---|
| 141 | NEW TMGSLNOD SET TMGSLNOD=$GET(^SC(TMGIEN,"SL")) ;"^SC(IEN,"SL", SL node
|
---|
| 142 | NEW TMGSOH SET TMGSOH=($PIECE(TMGSLNOD,"^",8)="Y") ;"SOH=Schedule On Holidays.
|
---|
| 143 | NEW DATE SET DATE=TMG1DATE\1 ;"strip minutes
|
---|
| 144 | NEW DOW SET DOW=$$DOW^XLFDT(DATE,1)#7
|
---|
| 145 | ;
|
---|
| 146 | IF $DATA(^HOLIDAY(DATE))&('TMGSOH) DO GOTO P4DDONE
|
---|
| 147 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 148 | . SET TMGMSG(TMGMSG)=$$EXTDAT^TMGAVLS1(DATE)_" is a holiday, and Location settings don't allow scheduling."
|
---|
| 149 | ;
|
---|
| 150 | IF $DATA(^SC(TMGIEN,"OST",DATE,1)) DO
|
---|
| 151 | . MERGE TMGARR=^SC(TMGIEN,"OST",DATE)
|
---|
| 152 | . SET TMGARR(9)=TMGIEN
|
---|
| 153 | . SET TMGRESULT=1
|
---|
| 154 | ;
|
---|
| 155 | ;"IF '$DATA(^SC(TMGIEN,"ST",DATE,1)) DO ;"Copy from TEMPLATE for this day, date
|
---|
| 156 | IF TMGRESULT'=1 DO ;"Copy from TEMPLATE for this day, date
|
---|
| 157 | . NEW STR
|
---|
| 158 | . NEW LIMDT SET LIMDT=+$ORDER(^SC(TMGIEN,"T"_DOW,DATE)) ;"Tx entries are LIMIT dated...
|
---|
| 159 | . IF LIMDT'>0 QUIT
|
---|
| 160 | . NEW TEMPL SET TEMPL=$GET(^SC(TMGIEN,"T"_DOW,LIMDT,1))
|
---|
| 161 | . IF TEMPL="" QUIT
|
---|
| 162 | . SET STR=$$SPECPAT(TMGIEN,DATE,TEMPL) ;"Return string like this: MO 05 | [2 2 2 2|2 2 2 2]
|
---|
| 163 | . SET TMGARR(1)=STR
|
---|
| 164 | . SET TMGARR(0)=DATE
|
---|
| 165 | . SET TMGRESULT=1
|
---|
| 166 | ;
|
---|
| 167 | IF TMGRESULT=-1 DO
|
---|
| 168 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 169 | . SET TMGMSG(TMGMSG)="NO TEMPLATE; Unable to find a slot pattern defined for "_$$EXTDAT^TMGSDAU1(DATE)
|
---|
| 170 | ;
|
---|
| 171 | P4DDONE ;
|
---|
| 172 | QUIT TMGRESULT
|
---|
| 173 | ;
|
---|
| 174 | ;
|
---|
| 175 | FIX1ST(TMGIEN,TMG1DATE,TMGMSG)
|
---|
| 176 | ;"Purpose: To set slot numbers to match existing appts.
|
---|
| 177 | ;"IMPORTANT NOTICE: This should *only* be called after a fresh template pattern
|
---|
| 178 | ;" has been copied into the ST node. This is because this function
|
---|
| 179 | ;" will decrease availability count for slots based on existing appts.
|
---|
| 180 | ;" If this has already been done, then calling this again will result
|
---|
| 181 | ;" in the availability count being reduced AGAIN--making it appear
|
---|
| 182 | ;" that the slot is being used, when it actually is NOT.
|
---|
| 183 | ;"Input: TMGIEN -- IEN in file 44 to work on
|
---|
| 184 | ;" TMG1DATE -- the date to fix ST for.
|
---|
| 185 | ;" TMGMSG -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
| 186 | ;" TMGMSG=line count of error messages
|
---|
| 187 | ;" TMGMSG(1)=ErrMsg
|
---|
| 188 | ;" TMGMSG(2)=ErrMsg etc..
|
---|
| 189 | ;"Globally-scoped vars used: TMGIEN
|
---|
| 190 | ;"Result: 1 = Success or
|
---|
| 191 | ;" -1 = error
|
---|
| 192 | ;
|
---|
| 193 | NEW TMGRESULT SET TMGRESULT=1
|
---|
| 194 | NEW APPT SET APPT=TMG1DATE\1 ;"All appts should have time, by trimming time, will sort before actual appts
|
---|
| 195 | FOR SET APPT=$ORDER(^SC(TMGIEN,"S",APPT)) QUIT:(APPT\1'=TMG1DATE\1)!(TMGRESULT=-1) DO ;"Only check same day
|
---|
| 196 | . IF $$NONAPPT(TMGIEN,APPT) QUIT
|
---|
| 197 | . SET TMGRESULT=$$DEC1SLOT(TMGIEN,APPT,.TMGMSG)
|
---|
| 198 | F1STDONE ;
|
---|
| 199 | QUIT TMGRESULT
|
---|
| 200 | ;
|
---|
| 201 | ;
|
---|
| 202 | DEC1SLOT(TMGIEN,APPT,TMGMSG)
|
---|
| 203 | ;"Purpose: To decrement the availability number for a slot at a given time
|
---|
| 204 | ;"Input: TMGIEN -- IEN in file 44 to work on
|
---|
| 205 | ;" APPT -- A FMDateTime number to indicate date & time of appt.
|
---|
| 206 | ;" TMGMSG -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
| 207 | ;" TMGMSG=line count of error messages
|
---|
| 208 | ;" TMGMSG(1)=ErrMsg
|
---|
| 209 | ;" TMGMSG(2)=ErrMsg etc..
|
---|
| 210 | ;"Globally-scoped vars used: TMGIEN
|
---|
| 211 | ;"Result: 1 = Success or
|
---|
| 212 | ;" -1 = error
|
---|
| 213 | ;
|
---|
| 214 | NEW TMGRESULT SET TMGRESULT=1 ;"default to success
|
---|
| 215 | NEW DATE SET DATE=APPT\1
|
---|
| 216 | LOCK +^SC(TMGIEN,"ST",DATE):10 ;"Prevent interferance from any other process.
|
---|
| 217 | ELSE DO GOTO D1SDONE
|
---|
| 218 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 219 | . SET TMGMSG(TMGMSG)="Unable to get lock on ^SC("_TMGIEN_",""ST"","_DATE_")."
|
---|
| 220 | . SET TMGRESULT=-1
|
---|
| 221 | NEW STR SET STR=$GET(^SC(TMGIEN,"ST",DATE,1))
|
---|
| 222 | IF STR="" DO GOTO D1SUL
|
---|
| 223 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 224 | . SET TMGMSG(TMGMSG)="Can't find a PATTERN entry for "_$$EXTDAT^TMGAVLS1(DATE)_", so can't decrease slot availability."
|
---|
| 225 | . SET TMGRESULT=-1
|
---|
| 226 | ;
|
---|
| 227 | NEW INDX SET INDX=$$SLTINDEX(TMGIEN,APPT)
|
---|
| 228 | ;"G X:(I<1!'$F(S,"["))&(S'["CAN")
|
---|
| 229 | ;"I SM<7 S %=$F(S,"[",SS-1) S:'%!($P(SL,"^",6)<3) %=999 I $F(S,"]",SS)'<%!(SDDIF=2&$E(S,ST+ST+1,SS-1)["[") S SM=7
|
---|
| 230 | ;
|
---|
| 231 | NEW CODES SET CODES="{}&%?#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz"
|
---|
| 232 | FOR QUIT:(INDX'>$LENGTH(STR))!($LENGTH(STR)'<IOM) SET STR=STR_" "
|
---|
| 233 | ;
|
---|
| 234 | ;"Note: I am not sure what SDDIF or SS is here, and trials runs only went through once, will will not loop
|
---|
| 235 | ;"FOR INDX=(SLOTINDX*2):SDDIF:SS-SDDIF DO QUIT:(TMGRESULT=-1)
|
---|
| 236 | DO
|
---|
| 237 | . NEW TEMP,DECCHR
|
---|
| 238 | . SET TEMP=$EXTRACT(STR,INDX)
|
---|
| 239 | . IF TEMP="" SET TEMP=" "
|
---|
| 240 | . SET DECCHR=$EXTRACT(CODES,$FIND(CODES,TEMP)-2) ;"Return char occuring just before TEMP value in STR
|
---|
| 241 | . IF (STR["CAN")!((TEMP="X")&($DATA(^SC(TMGIEN,"ST",DATE,"CAN")))) DO QUIT
|
---|
| 242 | . . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 243 | . . SET TMGMSG(TMGMSG)="Can't alter slots within a CANCELLED time period.!"
|
---|
| 244 | . . SET TMGRESULT=-1
|
---|
| 245 | . IF DECCHR="" DO QUIT
|
---|
| 246 | . . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
| 247 | . . SET TMGMSG(TMGMSG)="Error in DEC1SLOT^TMGAVLG: DECCHR=''"
|
---|
| 248 | . . SET TMGRESULT=-1
|
---|
| 249 | . ;"IF (DECCHR'?1NL)&(SM<6) SET SM=6 ;"Look for DECCHR as number or lowercase letter
|
---|
| 250 | . SET TEMP=$EXTRACT(STR,INDX+1,999)
|
---|
| 251 | . IF TEMP="" SET TEMP=" "
|
---|
| 252 | . SET STR=$EXTRACT(STR,1,INDX-1)_DECCHR_TEMP
|
---|
| 253 | ;
|
---|
| 254 | SET ^SC(TMGIEN,"ST",DATE,1)=STR ;"Store new pattern.
|
---|
| 255 | D1SUL LOCK -^SC(TMGIEN,"ST",DATE) ;"Release lock
|
---|
| 256 | D1SDONE ;
|
---|
| 257 | QUIT TMGRESULT
|
---|
| 258 | ;
|
---|
| 259 | ;
|
---|
| 260 | SLTINDEX(TMGIEN,APPT,SAVARR)
|
---|
| 261 | ;"Purpose: To return INDEX in "ST" PATTERN node for given appt slot time
|
---|
| 262 | ;"Input: TMGIEN -- IEN in file 44
|
---|
| 263 | ;" APPT -- FMDateTime of appointment
|
---|
| 264 | ;" SAVARR -- PASS BY REFERANCE. A save array, so that prior lookups can be reused. Format:
|
---|
| 265 | ;" SAVARR(DateTime)=Index
|
---|
| 266 | ;" SAVARR(DateTime)=Index
|
---|
| 267 | ;" SAVARR("T",STR,MilitaryTime)=Index
|
---|
| 268 | ;" SAVARR("T",STR,MilitaryTime)=Index
|
---|
| 269 | ;"Globally-scoped vars used: TMGIEN
|
---|
| 270 | ;"Result: Returns 0 if problem
|
---|
| 271 | ;" Otherwise returns index value for accessing character in "ST",1) node.
|
---|
| 272 | ;
|
---|
| 273 | NEW TMGRESULT SET TMGRESULT=0
|
---|
| 274 | IF $DATA(SAVARR(APPT)) DO GOTO SLIDONE ;"Use prior lookup if possible
|
---|
| 275 | . SET TMGRESULT=+$GET(SAVARR(APPT))
|
---|
| 276 | NEW DATE SET DATE=APPT\1
|
---|
| 277 | NEW MILTIME SET MILTIME=(APPT#1)*1000
|
---|
| 278 | NEW STR SET STR=$GET(^SC(TMGIEN,"ST",DATE,1))
|
---|
| 279 | IF STR="" SET TMGRESULT=0 GOTO SLIDONE
|
---|
| 280 | SET STR=$PIECE(STR,"|",2,25)
|
---|
| 281 | IF $DATA(SAVARR("T",STR,MILTIME)) DO GOTO SLIDONE
|
---|
| 282 | . SET TMGRESULT=+$GET(SAVARR("T",STR,MILTIME))
|
---|
| 283 | ;
|
---|
| 284 | NEW TMGSPH SET TMGSPH=+$P($GET(^SC(TMGIEN,"SL")),"^",6) ;"SL;6 = DISPLAY INCS PER HOUR (Slots per Hr)
|
---|
| 285 | IF TMGSPH'>0 SET TMGSPH=4 ;"Default to 4 slots/hr
|
---|
| 286 | NEW STARTDAY SET STARTDAY=+$P($GET(^SC(TMGIEN,"SL")),"^",3) ;"SL;3=HR CLINIC DISPLAY BEGINS
|
---|
| 287 | NEW SB SET SB=(STARTDAY-1)/100 ;"Eg 8 am --> .07
|
---|
| 288 | ;
|
---|
| 289 | ;"Convert Hrs.Min --> fractional hours. e.g. 1:30 --> 1.5; 3.45 --> 3.75
|
---|
| 290 | NEW HROFFSET SET HROFFSET=((APPT#1)-SB)*100 ;"HROFFSET=Num of Hrs (i.e. hrs.min 1.3=1 hr, 30 min) **past** display start time (i.e. 7am)
|
---|
| 291 | ;"Note: SB is usually 1 hr before true display start time. I.e. .07 for start time of 8 am
|
---|
| 292 | ;" I think this is to allow for the header info (e.g. 'SUN 04 |')
|
---|
| 293 | NEW MINOFFST SET MINOFFST=HROFFSET#1 ;"Get just minutes part, e.g. 0.3 (i.e. 30 minutes)
|
---|
| 294 | SET HROFFSET=HROFFSET\1 ;"Get just hrs part
|
---|
| 295 | SET MINOFFST=MINOFFST/0.6 ;"integer divide (i.e round output) by 0.6, e.g. 1.2/0.6 --> 2. Note, 0.6 here means 60 minutes
|
---|
| 296 | ;"SET MINOFFST=MINOFFST*TMGSPH ;"multiply by slots/hr, e.g. 4 --> 0.3 * 4 = 1.2 (i.e. 120 minutes)
|
---|
| 297 | NEW SLOTINDX SET SLOTINDX=(HROFFSET+MINOFFST)*TMGSPH ;"Add number of hrs past display start time * slots/hr --> slot index #
|
---|
| 298 | ;
|
---|
| 299 | SET TMGRESULT=(SLOTINDX*2)+1 ;"x2 because of spaces etc between character values, and 1st slot begins 1 character after '|'
|
---|
| 300 | ;
|
---|
| 301 | SET SAVARR(APPT)=TMGRESULT
|
---|
| 302 | SET SAVARR("T",STR,MILTIME)=TMGRESULT
|
---|
| 303 | SLIDONE ;
|
---|
| 304 | QUIT TMGRESULT
|
---|
| 305 | ;
|
---|
| 306 | ;
|
---|
| 307 | SPECPAT(TMGIEN,DATE,AVAILSTR)
|
---|
| 308 | ;"Purpose: Return string like this: MO 05 | [2 2 2 2|2 2 2 2]
|
---|
| 309 | ;" ... given the original pattern string ('AvailStr'), e.g. ' [2 2 2 2|2 2 2 2]'
|
---|
| 310 | NEW DOW SET DOW=$$DOW^XLFDT(DATE,1) ;"DOW=Day of Week (0-6)
|
---|
| 311 | NEW TMGSPH SET TMGSPH=+$P($GET(^SC(TMGIEN,"SL")),"^",6) ;"SL;6 = DISPLAY INCS PER HOUR (Slots per Hr)
|
---|
| 312 | IF TMGSPH'>0 SET TMGSPH=4 ;"Default to 4 slots/hr
|
---|
| 313 | NEW SI SET SI=+TMGSPH
|
---|
| 314 | IF (SI=0)!(SI=1)!(SI=2) SET SI=4
|
---|
| 315 | NEW SM
|
---|
| 316 | SET SM=$P("SU^MO^TU^WE^TH^FR^SA",U,DOW+1)_" "
|
---|
| 317 | SET SM=SM_$EXTRACT(DATE,6,7)_$J("",SI+SI-6)
|
---|
| 318 | SET SM=SM_AVAILSTR_$J("",64-$LENGTH(AVAILSTR))
|
---|
| 319 | QUIT SM
|
---|
| 320 | ;
|
---|
| 321 | ;
|
---|
| 322 | NONAPPT(TMGIEN,APPT)
|
---|
| 323 | ;"Purpose: To see if appointment is inactivated (i.e. a Non-Appt)
|
---|
| 324 | ;"Input: TMGIEN -- IEN in file 44
|
---|
| 325 | ;" APPT -- FMDateTime of appointment
|
---|
| 326 | ;"Result: 0 if appt is active, 1 if cancelled etc.
|
---|
| 327 | NEW TMGRESULT SET TMGRESULT=1 ;"Default to cancelled.
|
---|
| 328 | NEW DFN SET DFN=+$PIECE($GET(^SC(TMGIEN,"S",APPT,1,1,0)),"^",1) ;"Patient IEN
|
---|
| 329 | IF DFN'>0 SET TMGRESULT=-1 GOTO NADONE
|
---|
| 330 | NEW STATUS SET STATUS=$PIECE($GET(^DPT(DFN,"S",APPT,0)),"^",2) ;"Status field
|
---|
| 331 | IF STATUS="" SET TMGRESULT=0
|
---|
| 332 | NADONE QUIT TMGRESULT
|
---|
| 333 | ;
|
---|
| 334 | ; |
---|