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

AGGLOCK.m

Go to the documentation of this file.
  1. AGGLOCK ;VNGT/HS/ALA-Locking Routine for Patient Reg ; 16 May 2010 1:07 PM
  1. ;;1.0;PATIENT REGISTRATION GUI;;Nov 15, 2010
  1. ;
  1. ;
  1. LOCK(DATA,DFN) ; EP - AGG LOCK PATIENT
  1. ; Input
  1. ; DFN - Patient IEN
  1. ;
  1. ; Output:
  1. ; DATA = name of global (passed by reference) in which the data is stored
  1. ;
  1. ; RESULT = 1 if the lock succeeded
  1. ; = 0 if the lock failed
  1. ; = -1 if invalid patient IEN (shouldn't happen)
  1. ; USER = DUZ of the last user to successfully lock this panel
  1. ; or
  1. ; BMXSEC - if M error encountered
  1. ;
  1. NEW UID,X,II,MSG,VAL,RESULT
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("AGGLCK",UID))
  1. K @DATA
  1. ;
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^AGGLOCK D UNWIND^%ZTER" ; SAC 2006 2.2.3.3.2
  1. ;
  1. ; Create header record
  1. S II=0,@DATA@(II)="I00010RESULT^T00080MESSAGE"_$C(30)
  1. ;
  1. ;S AGIEN=$$FIND1^DIC(9009068.3,"","BX",DEF,"","","ERROR")
  1. ;I AGIEN=0 S BMXSEC="RPC Failed: Passed in window name "_DEF_" not found" Q
  1. ;
  1. ;S FILE=$P(^AGG(9009068.3,AGIEN,0),U,2),SECFILE=$P(^AGG(9009068.3,AGIEN,0),U,14)
  1. ;
  1. S VAL=$$VAL(DFN),MSG=$P(VAL,U,2),VAL=$P(VAL,U)
  1. I VAL=-1 S RESULT=-1 D SET Q
  1. ;
  1. NEW USER
  1. ; Attempt lock and set RESULT accordingly
  1. S RESULT=1
  1. L +^DPT(DFN):1 E S RESULT=0
  1. L +^AUPNPAT(DFN):1 E S RESULT=0 L -^DPT(DFN)
  1. ; figure out what to lock
  1. ;
  1. ;
  1. LST ; If lock is unsuccessful, get 'LAST LOCKED BY' from the panel.
  1. I RESULT=0 D
  1. . S USER=$P($G(^XTMP("AGGLCK",DFN)),"^")
  1. . S NAME=$$GET1^DIQ(200,USER,.01,"E")
  1. . I NAME="" S NAME="an unknown user"
  1. . S MSG="This event is locked for editing by "_NAME_"."
  1. ; If lock is successful, update 'LAST LOCKED BY' in ^XTMP.
  1. I RESULT=1 D
  1. . S ^XTMP("AGGLCK",0)=$$FMADD^XLFDT(DT,1)_U_$$DT^XLFDT()_U_"Maintain locked by information for current locks of Reg data"
  1. . S CNT=+$P($G(^XTMP("AGGLCK",DFN)),"^",2)+1
  1. . S ^XTMP("AGGLCK",DFN)=DUZ_"^"_CNT
  1. ;
  1. D SET
  1. Q
  1. ;
  1. UNLOCK(DATA,DFN) ; EP - AGG UNLOCK PATIENT
  1. ; Input
  1. ; DFN - Patient IEN
  1. ;
  1. ; Output:
  1. ; DATA = name of global (passed by reference) in which the data is stored
  1. ; RESULT = 1 (unlock will always succeed)
  1. ; RESULT = -1 if invalid patient IEN (shouldn't happen)
  1. ; or
  1. ; BMXSEC - if M error encountered
  1. ;
  1. NEW UID,X,II,MSG,VAL
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("AGGLCK",UID))
  1. K @DATA
  1. ;
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^AGGLOCK D UNWIND^%ZTER" ; SAC 2006 2.2.3.3.2
  1. ;
  1. ; Create header record
  1. S II=0,@DATA@(II)="I00010RESULT^T00080MESSAGE"_$C(30)
  1. NEW RESULT,USER
  1. S VAL=$$VAL(DFN),MSG=$P(VAL,U,2),VAL=$P(VAL,U)
  1. I VAL=-1 S RESULT=-1 D SET Q
  1. ;
  1. ; Unlock and set RESULT
  1. D UNL(DFN)
  1. S RESULT=1
  1. D SET
  1. Q
  1. ;
  1. SET ; Report results
  1. S II=II+1,@DATA@(II)=RESULT_"^"_$G(MSG)_$C(30)
  1. S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. ERR ;
  1. D ^%ZTER
  1. NEW Y,ERRDTM
  1. S Y=$$NOW^XLFDT() X ^DD("DD") S ERRDTM=Y
  1. S BMXSEC="Recording that an error occurred at "_ERRDTM
  1. I $D(II),$D(DATA) S II=II+1,@DATA@(II)=$C(31)
  1. D UNL(DFN)
  1. Q
  1. ;
  1. VAL(IEN) ; Validate RECORD ien
  1. I $G(^DPT(IEN,0))="" Q "-1^Invalid Patient selected"
  1. I $G(^AUPNPAT(IEN,0))="" Q "-1^Invalid Patient selected"
  1. Q 1
  1. ;
  1. UNL(DFN) ;
  1. Q:$G(DFN)=""
  1. ; Get 'LAST LOCKED BY'.
  1. N DAT,CNT
  1. S DAT=$G(^XTMP("AGGLCK",DFN))
  1. S USER=$P(DAT,"^")
  1. S CNT=+$P(DAT,"^",2)
  1. ;
  1. ; If 'LAST LOCKED BY' is this DUZ then delete the lock entry from ^XTMP.
  1. I USER=DUZ K ^XTMP("AGGLCK",DFN)
  1. F I=1:1:CNT L -^AUPNPAT(DFN),-^DPT(DFN)
  1. Q