Changeset 1080 for Scheduling/trunk/m/BSDX08.m
- Timestamp:
- Jan 25, 2011, 5:58:58 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Scheduling/trunk/m/BSDX08.m
r1077 r1080 1 BSDX08 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 1 2/6/10 12:35pm1 BSDX08 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 1/25/11 12:39pm 2 2 ;;1.42;BSDX;;Dec 07, 2010 3 3 ; … … 16 16 ; - Refactored all of APPDEL. 17 17 ; 18 ; 3111125 UJO/SMH v1.5 19 ; - Added ability to remove checked in appointments. Added a couple 20 ; of units tests for that under UT2. 21 ; - Minor reformatting because of how KIDS adds tabs. 22 ; 18 23 ; Error Reference: 19 24 ; -1~BSDX08: Appt record is locked. Please contact technical support. … … 72 77 D APPDEL^BSDX08(.ZZZ,999999,"PC",1,"Reasons") 73 78 I $P(^BSDXTMP($J,1),"~")'=-3 W "Error in -3",! 74 ; 75 ; Test 6: for Cancelling walkin and checked-in appointments (should fail). 79 UT2 ; More unit Tests 80 ; 81 ; Test 6: for Cancelling walkin and checked-in appointments 76 82 S BSDXSTART=$E($$NOW^XLFDT,1,12),BSDXEND=BSDXSTART+.0001 77 D APPADD^BSDX07(.ZZZ,BSDXSTART,BSDXEND,4,"Dr Office",10,"Sam's Note",1) 78 S APPID=+$P(^BSDXTMP($J,1),U) 79 B 80 D CHECKIN^BSDX25(.ZZZ,APPID,$$NOW^XLFDT) 81 B 82 D APPDEL^BSDX08(.ZZZ,APPID,"PC",10,"Cancel Note") 83 B 84 ; 85 ; Test 7: for cancelling walkin and checked-in appointments (this should pass) 83 D APPADD^BSDX07(.ZZZ,BSDXSTART,BSDXEND,4,"Dr Office",10,"Sam's Note",1) ; Add appt 84 S APPID=+$P(^BSDXTMP($J,1),U) 85 I APPID=0 W "Error in test 6",! 86 D CHECKIN^BSDX25(.ZZZ,APPID,$$NOW^XLFDT) ; check-in 87 D APPDEL^BSDX08(.ZZZ,APPID,"PC",10,"Cancel Note") ; Delete appt 88 I $P(^BSDXTMP($J,1),$C(30))'="" W "Error in test 6",! 89 ; 90 ; Test 7: for cancelling walkin and checked-in appointments 86 91 S BSDXSTART=$E($$NOW^XLFDT,1,12)+.0001,BSDXEND=BSDXSTART+.0001 87 D APPADD^BSDX07(.ZZZ,BSDXSTART,BSDXEND,4,"Dr Office",10,"Sam's Note",1) 88 S APPID=+$P(^BSDXTMP($J,1),U) 89 B90 D CHECKIN^BSDX25(.ZZZ,APPID,$$NOW^XLFDT) 92 D APPADD^BSDX07(.ZZZ,BSDXSTART,BSDXEND,4,"Dr Office",10,"Sam's Note",1) ; Add appt 93 S APPID=+$P(^BSDXTMP($J,1),U) 94 I APPID=0 W "Error in test 6",! 95 D CHECKIN^BSDX25(.ZZZ,APPID,$$NOW^XLFDT) ; Checkin 91 96 S BSDXRES=$O(^BSDXRES("B","Dr Office","")) 92 97 S BSDXCLN=$P(^BSDXRES(BSDXRES,0),U,4) 93 B 94 S BSDXRESULT=$$RMCI^BSDXAPI(4,BSDXCLN,BSDXSTART) 95 B 96 D APPDEL^BSDX08(.ZZZ,APPID,"PC",10,"Cancel Note") 97 ; 98 98 S BSDXRESULT=$$RMCI^BSDXAPI(4,BSDXCLN,BSDXSTART) ; remove checkin 99 D APPDEL^BSDX08(.ZZZ,APPID,"PC",10,"Cancel Note") ; delete appt 100 I $P(^BSDXTMP($J,1),$C(30))'="" W "Error in test 6",! 99 101 QUIT 100 ; Lock the node in another job for testing.101 UTL(APPID) L +^BSDXAPPT(APPID) HANG 10 QUIT102 ;103 102 APPDEL(BSDXY,BSDXAPTID,BSDXTYP,BSDXCR,BSDXNOT) ;EP 104 103 ;Called by RPC: BSDX CANCEL APPOINTMENT 105 104 ;Cancels existing appointment in BSDX APPOINTMENT and 44/2 subfiles 106 105 ;Input Parameters: 107 106 ; - BSDXAPTID is entry number in BSDX APPOINTMENT file 108 107 ; - BSDXTYP is C for clinic-cancelled and PC for patient cancelled … … 110 109 ; - BSDXNOT is user note 111 110 ; 112 ; Returns error code in recordset field ERRORID. Zerois success.113 114 ; 115 111 ; Returns error code in recordset field ERRORID. Empty string is success. 112 ; Returns Global Array. Must use this type in RPC. 113 ; 114 ; Return Array: set Return and clear array 116 115 S BSDXY=$NA(^BSDXTMP($J)) 117 118 ; 119 120 121 122 123 124 ; 125 116 K ^BSDXTMP($J) 117 ; 118 ; Set min DUZ vars if they don't exist 119 D ^XBKVAR 120 ; 121 ; $ET 122 N $ET S $ET="G ETRAP^BSDX08" 123 ; 124 ; Counter 126 125 N BSDXI S BSDXI=0 127 126 ; Header Node 128 127 S ^BSDXTMP($J,BSDXI)="T00100ERRORID"_$C(30) 129 128 ; 130 131 132 133 134 ; 135 136 137 138 ; 139 129 ; Lock BSDX node, only to synchronize access to the globals. 130 ; It's not expected that the error will ever happen as no filing 131 ; is supposed to take 5 seconds. 132 L +^BSDXAPPT(BSDXAPTID):5 I '$T D ERR(BSDXI,"-1~BSDX08: Appt record is locked. Please contact technical support.") Q 133 ; 134 ;Restartable Transaction; restore paramters when starting. 135 ; (Params restored are what's passed here + BSDXI) 136 TSTART (BSDXY,BSDXAPTID,BSDXTYP,BSDXCR,BSDXNOT,BSDXI):T="BSDX CANCEL APPOINTEMENT^BSDX08" 137 ; 138 ; Turn off SDAM APPT PROTOCOL BSDX Entries 140 139 N BSDXNOEV 141 140 S BSDXNOEV=1 ;Don't execute BSDX CANCEL APPOINTMENT protocol 142 141 ; 143 144 145 146 147 148 149 150 151 142 ;;;test for error inside transaction. See if %ZTER works 143 I $G(bsdxdie) S X=1/0 144 ;;;test 145 ;;;test for TRESTART 146 I $G(bsdxrestart) K bsdxrestart TRESTART 147 ;;;test 148 ; 149 ; Check appointment ID and whether it exists 150 I '+BSDXAPTID D ERR(BSDXI,"-2~BSDX08: Invalid Appointment ID") Q 152 151 I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(BSDXI,"-3~BSDX08: Invalid Appointment ID") Q 153 152 ; 154 153 ; Start Processing: 155 154 ; First, add cancellation date to appt entry in BSDX APPOINTMENT 156 155 N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPTID,0) ; BSDX Appt Node 157 156 N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; Patient ID … … 159 158 D BSDXCAN(BSDXAPTID) ; Add a cancellation date in BSDX APPOINTMENT 160 159 ; 161 160 ; Second, cancel appt in "S" nodes in file 2 and 44, then update Legacy PIMS Availability 162 161 N BSDXSC1 S BSDXSC1=$P(BSDXNOD,U,7) ;RESOURCEID 163 162 ; If the resouce id doesn't exist... 164 163 I BSDXSC1="" D ERR(BSDXI,"-4~BSDX08: Cancelled appointment does not have a Resouce ID") QUIT 165 164 I '$D(^BSDXRES(BSDXSC1,0)) D ERR(BSDXI,"-5~BSDX08: Resouce ID does not exist in BSDX RESOURCE") QUIT 166 165 ; Get zero node of resouce 167 168 166 S BSDXNOD=^BSDXRES(BSDXSC1,0) 167 ; Get Hosp location 169 168 N BSDXLOC S BSDXLOC=$P(BSDXNOD,U,4) 170 171 172 173 169 ; Error indicator for Hosp Location filing for getting out of routine 170 N BSDXERR S BSDXERR=0 171 ; Only file in 2/44 if there is an associated hospital location 172 I BSDXLOC D QUIT:BSDXERR 174 173 . I '$D(^SC(BSDXLOC,0)) S BSDXERR=1 D ERR(BSDXI,"-6~BSDX08: Invalid Hosp Location stored in Database") QUIT 175 176 174 . ; Get the IEN of the appointment in the "S" node of ^SC 175 . N BSDXSCIEN 177 176 . S BSDXSCIEN=$$SCIEN^BSDXAPI(BSDXPATID,BSDXLOC,BSDXSTART) 178 177 . I BSDXSCIEN="" S BSDXERR=1 D ERR(BSDXI,"-7~BSDX08: Patient does not have an appointment in PIMS Clinic") QUIT 179 178 . ; Get the appointment node 180 179 . S BSDXNOD=$G(^SC(BSDXLOC,"S",BSDXSTART,1,BSDXSCIEN,0)) 181 180 . I BSDXNOD="" S BSDXERR=1 D ERR(BSDXI,"-8^BSDX08: Unable to find associated PIMS appointment for this patient") QUIT 182 181 . N BSDXLEN S BSDXLEN=$P(BSDXNOD,U,2) 183 182 . ; Cancel through BSDXAPI 184 185 186 183 . N BSDXZ 184 . D APCAN(.BSDXZ,BSDXLOC,BSDXPATID,BSDXSTART) 185 . I +BSDXZ>0 S BSDXERR=1 D ERR(BSDXI,"-9^BSDX08: BSDXAPI returned an error: "_$P(BSDXZ,U,2)) QUIT 187 186 . ; Update Legacy PIMS clinic Availability 188 187 . D AVUPDT(BSDXLOC,BSDXSTART,BSDXLEN) … … 199 198 ;See SDCNP0 200 199 N SD,S ; Start Date 201 202 200 S (SD,S)=BSDXSTART 201 N I ; Clinic IEN in 44 203 202 S I=BSDXSCD 204 203 ; if day has no schedule in legacy PIMS, forget about this update. 205 204 Q:'$D(^SC(I,"ST",SD\1,1)) 206 205 N SL ; Clinic characteristics node (length of appt, when appts start etc) 207 206 S SL=^SC(I,"SL") 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 207 N X ; Hour Clinic Display Begins 208 S X=$P(SL,U,3) 209 N STARTDAY ; When does the day start? 210 S STARTDAY=$S($L(X):X,1:8) ; If defined, use it; otherwise, 8am 211 N SB ; ?? Who knows? Day Start - 1 divided by 100. 212 S SB=STARTDAY-1/100 213 S X=$P(SL,U,6) ; Now X is Display increments per hour 214 N HSI ; Slots per hour, try 1 215 S HSI=$S(X:X,1:4) ; if defined, use it; otherwise, 4 216 N SI ; Slots per hour, try 2 217 S SI=$S(X="":4,X<3:4,X:X,1:4) ; If slots "", or less than 3, then 4 218 N STR ; ?? 219 S STR="#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz" 220 N SDDIF ; Slots per hour diff?? 221 S SDDIF=$S(HSI<3:8/HSI,1:2) 223 222 S SL=BSDXLEN ; Dammit, reusing variable; SL now Appt Length from GUI 224 223 S S=^SC(I,"ST",SD\1,1) ; reusing var again; S now Day Pattern from PIMS 225 226 227 228 229 230 231 232 224 N Y ; Hours since start of Date 225 S Y=SD#1-SB*100 ;SD#1=FM Time portion; -SB minus start of day; conv to hrs 226 N ST ; ?? 227 ; Y#1 -> Minutes; *SI -> * Slots per hour; \.6 trunc min to hour 228 ; Y\1 -> Hours since start of day; * SI: * slots 229 S ST=Y#1*SI\.6+(Y\1*SI) 230 N SS ; how many slots are supposed to be taken by appointment 231 S SS=SL*HSI/60 ; (nb: try SL: 30 min; HSI: 4 slots) 233 232 N I 234 235 236 237 238 239 240 233 I Y'<1 D ; If Hours since start of Date is greater than 1 234 . ; loop through pattern. Tired of documenting. 235 . F I=ST+ST:SDDIF D Q:Y="" Q:SS'>0 236 . . S Y=$E(STR,$F(STR,$E(S,I+1))) Q:Y="" 237 . . S S=$E(S,1,I)_Y_$E(S,I+2,999) 238 . . S SS=SS-1 239 . . Q:SS'>0 241 240 S ^SC(BSDXSCD,"ST",SD\1,1)=S ; new pattern; global set 242 241 Q … … 321 320 ETRAP ;EP Error trap entry 322 321 N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap 323 324 325 326 322 ; Rollback, otherwise ^XTER will be empty from future rollback 323 I $TL>0 TROLLBACK 324 D ^%ZTER 325 S $EC="" ; Clear Error 327 326 ; Log error message and send to client 328 327 I '$D(BSDXI) N BSDXI S BSDXI=0 329 328 D ERR(BSDXI,"-100~BSDX08 Error: "_$G(%ZTERZE)) 330 329 QUIT 331 332 333 334 330 ; 331 ;;;NB: This is code that is unused in both original and port. 332 ; ; If not appt in the "S" node is found in ^SC then check associated RPMS Clinic Multiple 333 ; I BSDXSCIEN="" D I 'BSDXZ Q ;Q:BSDXZ 335 334 ; . S BSDXERR="BSDX08: Unable to find associated RPMS appointment for this patient. " 336 335 ; . S BSDXZ=1 337 336 ; . ; Check if there are associated RPMS clinics. (not currently used) Does the multiple exist? No, then quit 338 337 ; . I '$D(^BSDXRES(BSDXSC1,20)) S BSDXZ=0 QUIT 339 338 ; . ; Loop through the multiple. Get Location and then the ^SC "S" node IEN. 340 339 ; . N BSDX1 S BSDX1=0 341 340 ; . F S BSDX1=$O(^BSDXRES(BSDXSC1,20,BSDX1)) Q:'+BSDX1 Q:BSDXZ=0 D 342 341 ; . . Q:'$D(^BSDXRES(BSDXSC1,20,BSDX1,0)) 343 342 ; . . S BSDXLOC=$P(^BSDXRES(BSDXSC1,20,BSDX1,0),U) 344 .; . . S BSDXSCIEN=$$SCIEN^BSDXAPI(BSDXPATID,BSDXLOC,BSDXSTART) I +BSDXSCIEN S BSDXZ=0 Q343 ; . . S BSDXSCIEN=$$SCIEN^BSDXAPI(BSDXPATID,BSDXLOC,BSDXSTART) I +BSDXSCIEN S BSDXZ=0 Q
Note:
See TracChangeset
for help on using the changeset viewer.