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 | ; |
---|