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

BSDX29.m

Go to the documentation of this file.
  1. BSDX29 ; IHS/OIT/HMW/MSC/SAT - WINDOWS SCHEDULING RPCS ;
  1. ;;3.0;IHS WINDOWS SCHEDULING;;DEC 09, 2010
  1. ;
  1. ;
  1. BSDXCPD(BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND) ;EP
  1. ;Entry point for debugging
  1. ;
  1. ;D DEBUG^%Serenji("BSDXCP^BSDX29(.BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND)")
  1. Q
  1. ;
  1. BSDXCP(BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND) ;EP
  1. ;Copy appointments from HOSPITAL LOCATION entry BSDX44 to BSDX RESOURCE entry BSDXRES
  1. ;Beginning with appointments on day BSDXBEG and ending on BSDXEND, inclusive
  1. ;
  1. ;Returns ADO Recordset formatted fields containing count of records copied and error message:
  1. ;
  1. ;
  1. S BSDXY="^BSDXTMP("_$J_")"
  1. N BSDXI,BSDXST,ZTSK
  1. S BSDXI=0
  1. S X="ETRAP^BSDX29",@^%ZOSF("TRAP")
  1. S ^BSDXTMP($J,0)="T00010TASK_NUMBER^T00020ERRORID"_$C(30)
  1. ;
  1. ;Convert beginning and ending dates
  1. ;
  1. S X=BSDXBEG,%DT="X" D ^%DT S BSDXBEG=$P(Y,"."),BSDXBEG=BSDXBEG-1
  1. I Y=-1 D ERR(BSDXI,0,"Routine: BSDX29, Error: Invalid Date") Q
  1. S X=BSDXEND,%DT="X" D ^%DT S BSDXEND=$P(Y,"."),BSDXEND=BSDXEND+1
  1. I Y=-1 D ERR(BSDXI,0,"Routine: BSDX29, Error: Invalid Date") Q
  1. ;
  1. S ZTRTN="ZTM^BSDX29",ZTDTH=$H,ZTDESC="COPY PATIENT APPTS"
  1. S ZTSAVE("BSDXBEG")="",ZTSAVE("BSDXEND")="",ZTSAVE("BSDX44")="",ZTSAVE("BSDXRES")=""
  1. D ^%ZTLOAD
  1. ;
  1. S BSDXI=BSDXI+1
  1. S BSDXST=$S($G(ZTSK)>0:"OK",1:"Unable to create task.")
  1. S ^BSDXTMP($J,BSDXI)=$G(ZTSK)_"^"_BSDXST_$C(30)_$C(31)
  1. Q
  1. ;
  1. ZTMTST ;
  1. ;
  1. S %DT="AE" D ^%DT S BSDXBEG=Y
  1. S %DT="AE" D ^%DT S BSDXEND=Y
  1. S BSDX44=3,BSDXSRES=1,ZTSK=3380
  1. D ZTM
  1. Q
  1. ;
  1. ZTMD ;EP - Debug entry point
  1. ;D DEBUG^%Serenji("ZTM^BSDX29")
  1. Q
  1. ;
  1. ZTM ;EP
  1. ;Taskman entry point
  1. S X="ZTMERR^BSDX29",@^%ZOSF("TRAP")
  1. ;$O through ^SC(BSDX44,"S",
  1. Q:'$D(ZTSK)
  1. N BSDXCNT,BSDXIEN,BSDXNOD,BSDXNOTE,BSDXCAN,BSDXPAT,BSDXLEN,BSDXMADE,BSDXCLRK,BSDXPAT,BSDXQUIT
  1. S BSDXCNT=0,BSDXQUIT=0
  1. S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT
  1. TSTART
  1. F S BSDXBEG=$O(^SC(BSDX44,"S",BSDXBEG)) Q:'+BSDXBEG Q:BSDXBEG>BSDXEND Q:BSDXQUIT D
  1. . S BSDXIEN=0 F S BSDXIEN=$O(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN)) Q:'+BSDXIEN Q:BSDXQUIT D
  1. . . S BSDXNOD=$G(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN,0))
  1. . . Q:'+BSDXNOD
  1. . . S BSDXCAN=$P(BSDXNOD,U,9)
  1. . . Q:BSDXCAN="C"
  1. . . S BSDXPAT=$P(BSDXNOD,U)
  1. . . S BSDXLEN=$P(BSDXNOD,U,2) ;duration in minutes
  1. . . S BSDXCLRK=$P(BSDXNOD,U,6) ;appt made by (clerk)
  1. . . S BSDXMADE=$P(BSDXNOD,U,7) ;date appt made
  1. . . S BSDXNOTE=$P(BSDXNOD,U,4) ;'OTHER' field contains note
  1. . . S BSDXCNT=BSDXCNT+$$XFER(BSDXRES,BSDXBEG,BSDXPAT,BSDXLEN,BSDXCLRK,BSDXMADE,BSDXNOTE)
  1. . . I +BSDXCNT,BSDXCNT#10=0 S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT_" records copied." ;every 10th record
  1. . . I $D(^BSDXTMP("BSDXCOPY",ZTSK,"CANCEL")) S BSDXQUIT=1 ;Check for cancel flag
  1. . . Q
  1. . Q
  1. I 'BSDXQUIT TCOMMIT
  1. E TROLLBACK
  1. S ^BSDXTMP("BSDXCOPY",ZTSK)=$S(BSDXQUIT:"Cancelled. No records copied.",1:"Finished. "_BSDXCNT_" records copied.")
  1. Q
  1. ;
  1. ZTMERR ;
  1. TROLLBACK
  1. D ^%ZTER
  1. Q
  1. ;
  1. XFER(BSDXRES,BSDXBEG,BSDXPAT,BSDXLEN,BSDXCLRK,BSDXMADE,BSDXNOTE) ;EP
  1. ;
  1. ;Copy record to BSDX APPOINTMENT file
  1. ;Return 1 if record copied, otherwise 0
  1. ;
  1. ;$O Thru ^BSDXAPPT to determine if this appt already added
  1. N BSDXEND,BSDXIEN,BSDXFND,BSDXPAT2
  1. S BSDXIEN=0,BSDXFND=0
  1. F S BSDXIEN=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXBEG,BSDXIEN)) Q:'+BSDXIEN D Q:BSDXFND
  1. . S BSDXNOD=$G(^BSDXAPPT(BSDXIEN,0))
  1. . Q:'+BSDXNOD
  1. . S BSDXPAT2=$P(BSDXNOD,U,5)
  1. . S BSDXFND=0
  1. . I BSDXPAT2=BSDXPAT S BSDXFND=1
  1. . Q
  1. Q:BSDXFND 0
  1. ;
  1. ;Add to BSDX APPOINTMENT
  1. S BSDXEND=BSDXBEG
  1. ;Calculate ending time from beginning time and duration.
  1. S BSDXEND=$$ADDMIN(BSDXBEG,BSDXLEN)
  1. S BSDXIENS="+1,"
  1. S BSDXFDA(9002018.4,BSDXIENS,.01)=BSDXBEG
  1. S BSDXFDA(9002018.4,BSDXIENS,.02)=BSDXEND
  1. S BSDXFDA(9002018.4,BSDXIENS,.05)=BSDXPAT
  1. S BSDXFDA(9002018.4,BSDXIENS,.07)=BSDXRES
  1. S BSDXFDA(9002018.4,BSDXIENS,.08)=BSDXCLRK
  1. S BSDXFDA(9002018.4,BSDXIENS,.09)=BSDXMADE
  1. ;
  1. K BSDXIEN
  1. D UPDATE^DIE("","BSDXFDA","BSDXIEN","BSDXMSG")
  1. S BSDXIEN=+$G(BSDXIEN(1))
  1. I '+BSDXIEN Q 0
  1. ;
  1. ;Add WP field
  1. I BSDXNOTE]"" S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE="" D
  1. . D WP^DIE(9002018.4,BSDXIEN_",",1,"","BSDXNOTE","BSDXMSG")
  1. ;
  1. Q 1
  1. ;
  1. ERR(BSDXI,BSDXCNT,BSDXERR) ;Error processing
  1. S BSDXI=BSDXI+1
  1. S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_BSDXERR_$C(30)
  1. S BSDXI=BSDXI+1
  1. S ^BSDXTMP($J,BSDXI)=$C(31)
  1. Q
  1. ;
  1. ETRAP ;EP Error trap entry
  1. D ^%ZTER
  1. I '$D(BSDXI) N BSDXI S BSDXI=999
  1. S BSDXI=BSDXI+1
  1. D ERR(BSDXI,$G(BSDXCNT),"Routine: BSDX29, Error: "_$G(%ZTERROR))
  1. Q
  1. ;
  1. CPSTAT(BSDXY,BSDXTSK) ;EP
  1. ;Return status (copied record count) of tasked job having ZTSK=BSDXTSK
  1. ;
  1. S BSDXY="^BSDXTMP("_$J_")"
  1. N BSDXI,BSDXCNT
  1. S BSDXI=0
  1. S X="ETRAP^BSDX29",@^%ZOSF("TRAP")
  1. S ^BSDXTMP($J,0)="T00020RECORD_COUNT^T00020ERRORID"_$C(30)
  1. S BSDXCNT=$G(^BSDXTMP("BSDXCOPY",BSDXTSK))
  1. I BSDXCNT["Finished" K ^BSDXTMP("BSDXCOPY",BSDXTSK)
  1. I BSDXCNT["Cancelled" K ^BSDXTMP("BSDXCOPY",BSDXTSK)
  1. ;I $D(^BSDXTMP("BSDXCOPY",BSDXTSK,"CANCEL")) K ^BSDXTMP("BSDXCOPY",BSDXTSK)
  1. S BSDXI=BSDXI+1
  1. S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_"OK"_$C(30)_$C(31)
  1. Q
  1. ;
  1. CPCANC(BSDXY,BSDXTSK) ;EP
  1. ;Signal tasked job having ZTSK=BSDXTSK to cancel
  1. ;Returns current record count of copy process
  1. ;
  1. S BSDXY="^BSDXTMP("_$J_")"
  1. N BSDXI,BSDXCNT
  1. S BSDXI=0
  1. S X="ETRAP^BSDX29",@^%ZOSF("TRAP")
  1. S ^BSDXTMP($J,0)="T00020RECORD_COUNT^T00020ERRORID"_$C(30)
  1. S BSDXCNT=$G(^BSDXTMP("BSDXCOPY",BSDXTSK))
  1. I BSDXCNT["FINISHED" K ^BSDXTMP("BSDXCOPY",BSDXTSK)
  1. E S ^BSDXTMP("BSDXCOPY",BSDXTSK,"CANCEL")=""
  1. S BSDXI=BSDXI+1
  1. S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_"OK"_$C(30)_$C(31)
  1. Q
  1. ;
  1. ADDMIN(BSDXSTRT,BSDXLEN) ;
  1. ;
  1. ;Add BSDXLEN minutes to time BSDXSTRT and return end time
  1. N BSDXEND,BSDXH,BSDXM,BSDXSTIM,BSDXETIM
  1. S BSDXEND=$P(BSDXSTRT,".")
  1. ;
  1. ;Convert start time to minutes past midnight
  1. S BSDXSTIM=$P(BSDXSTRT,".",2)
  1. S BSDXSTIM=BSDXSTIM_"0000"
  1. S BSDXSTIM=$E(BSDXSTIM,1,4)
  1. S BSDXH=$E(BSDXSTIM,1,2)
  1. S BSDXH=BSDXH*60
  1. S BSDXH=BSDXH+$E(BSDXSTIM,3,4)
  1. ;
  1. ;Add duration to find minutes past midnight of end time
  1. S BSDXETIM=BSDXH+BSDXLEN
  1. ;
  1. ;Convert back to a time
  1. S BSDXH=BSDXETIM\60
  1. S BSDXH="00"_BSDXH
  1. S BSDXH=$E(BSDXH,$L(BSDXH)-1,$L(BSDXH))
  1. S BSDXM=BSDXETIM#60
  1. S BSDXM="00"_BSDXM
  1. S BSDXM=$E(BSDXM,$L(BSDXM)-1,$L(BSDXM))
  1. S BSDXETIM=BSDXH_BSDXM
  1. I BSDXETIM>2400 S BSDXETIM=2400
  1. S $P(BSDXEND,".",2)=BSDXETIM
  1. Q BSDXEND