DGPMDDLD ;ALB/MRL - DETERMINE LODGER X-REF'S; 9 FEB 89
;;5.3;Registration;**54,1015**;Aug 13, 1993;Build 21
;
EN ; -- lodger x-ref on ward field in
I $S(('$D(DA)#2):1,'$D(DGPMDDF):1,'$D(DGPMDDT):1,1:0) G KX
I DGPMDDF'=6,DGPMDDF'=7 G KX
N DFN S DFN=+$P(^DGPM(+DA,0),"^",3) I '$D(^DPT(DFN,0)) G KX
I 'DGPMDDT D @("K"_+DGPMDDF) G Q
D FIND
I $S('DGWD:1,1:$P(DGWD,"^",2)="") D G Q
. N VAWD
. D INPTCK^DGPMDDCN
. I VAWD,($P(VAWD,"^",2)]"") D 1^DGPMDDCN Q
. K X
D @("S"_+DGPMDDF)
G Q
;
KX K X
Q K DGPMX,DGPMX,DGWD,DGRM,DGMV,DGMV0,DGFLD,DGPMDD,DGPMDDF,DGPMDDT Q
;
S6 ; -- ward x-ref
S DGFLD=.107 I $D(^DPT(DFN,.107)) S DGPMX=^(.107) I DGPMX]"" K ^DGPM("LD",DGPMX,DA) D KILL^DGPMDDCN
S DGPMX=$P(DGWD,"^",2),^DGPM("LD",DGPMX,DGMV)=""
D SET^DGPMDDCN
Q
;
K6 ;
I X S W=$S($D(^DIC(42,+X,0)):$P(^(0),"^",1),1:"") I W]"" K ^DGPM("LD",W,DA) I $D(^DPT(DFN,.107)),^(.107)=W S DGPMX=W,DGFLD=.107 D KILL^DGPMDDCN
K W
Q
;
S7 S DGFLD=.108
I $D(^DPT(DFN,.108)) S DGPMX=^(.108),DGFLD=.108 D KILL^DGPMDDCN F DGPMX1=0:0 S DGPMX1=+$O(^DGPM("ARM",DGPMX,DGPMX1)) D CHK I $T K ^DGPM("ARM",DGPMX,DGPMX1) Q
S DGPMX=+DGRM D SET^DGPMDDCN:DGPMX
I +DGRM S DGFLD=.108,DGPMX=+DGRM,^DGPM("ARM",DGPMX,DGMV)=1 D SET^DGPMDDCN
Q
;
K7 I $D(^DPT(DFN,.108)),X=+^(.108) S DGPMX=X I $D(^DGPM("ARM",DGPMX,DA)) K ^(DA) S DGFLD=.108 D KILL^DGPMDDCN
Q
;
CHK ;
I '$D(^DGPM(DGPMX1,0)) Q
I $P(^DGPM(DGPMX1,0),"^",3)=DFN Q
Q
;
LD ; -- set "LD" x-ref for file #2 equal to corresp adm mv (#.107)
N DFN,DGMV,DGMV0,DGX S DFN=DA
S DGX=X D FIND S:$P(DGWD,U,2)=DGX ^DPT("LD",DGX,DFN)=DGMV
Q
;
FIND ;
D NOW^%DTC S DGID=9999999.999999-%,(DGMV,DGMV0)=0,(DGWD,DGRM)=""
F DGID=DGID:0 S DGID=$O(^DGPM("ATID4",DFN,DGID)) Q:'DGID S DGMV=+$O(^(DGID,0)) I $D(^DGPM(DGMV,0)) S DGMV0=^(0) S:$S('$D(^DGPM(+$P(DGMV0,"^",17),0)):0,1:+^(0)'>%) (DGMV,DGMV0)=0 Q
I $D(^DIC(42,+$P(DGMV0,"^",6),0)) S DGWD=$P(DGMV0,"^",6)_"^"_$P(^(0),"^")
I $D(^DG(405.4,+$P(DGMV0,"^",7),0)) S DGRM=+$P(DGMV0,"^",7)_"^"_$P(^(0),"^")
K DGID Q
;
RESET ; -- reset ^DPT nodes and x-refs
; input: DFN
;
; -- kill data and x-refs
I $D(^DPT(DFN,.107)) S DGPMX=^(.107),DGFLD=.107 I DGPMX]"" K ^DGPM("LD",DGPMX,DA) D KILL^DGPMDDCN
I $D(^DPT(DFN,.108)) S DGPMX=^(.108),DGFLD=.108 D KILL^DGPMDDCN F DGPMX1=0:0 S DGPMX1=+$O(^DGPM("ARM",DGPMX,DGPMX1)) D CHK I $T K ^DGPM("ARM",DGPMX,DGPMX1) Q
; -- reset data and x-refs
D FIND
I $S('DGWD:1,1:$P(DGWD,"^",2)="") D G RESETQ
. N VAWD
. D INPTCK^DGPMDDCN
. I VAWD,($P(VAWD,"^",2)]"") D RESET^DGPMDDCN
D S6,S7
;
RESETQ K DGWD,DGRM,DGPMX,DGPMX1,DGFLD,I,DGMV,DGMV0 Q
;
XREF ;
Q:$P(^DGPM(DA,0),U,2)'=4
N DFN S DFN=+$P(^DGPM(DA,0),U,3) D RESET
Q
DGPMDDLD ;ALB/MRL - DETERMINE LODGER X-REF'S; 9 FEB 89
+1 ;;5.3;Registration;**54,1015**;Aug 13, 1993;Build 21
+2 ;
EN ; -- lodger x-ref on ward field in
+1 IF $SELECT(('$DATA(DA)#2):1,'$DATA(DGPMDDF):1,'$DATA(DGPMDDT):1,1:0)
GOTO KX
+2 IF DGPMDDF'=6
IF DGPMDDF'=7
GOTO KX
+3 NEW DFN
SET DFN=+$PIECE(^DGPM(+DA,0),"^",3)
IF '$DATA(^DPT(DFN,0))
GOTO KX
+4 IF 'DGPMDDT
DO @("K"_+DGPMDDF)
GOTO Q
+5 DO FIND
+6 IF $SELECT('DGWD:1,1:$PIECE(DGWD,"^",2)="")
Begin DoDot:1
+7 NEW VAWD
+8 DO INPTCK^DGPMDDCN
+9 IF VAWD
IF ($PIECE(VAWD,"^",2)]"")
DO 1^DGPMDDCN
QUIT
+10 KILL X
End DoDot:1
GOTO Q
+11 DO @("S"_+DGPMDDF)
+12 GOTO Q
+13 ;
KX KILL X
Q KILL DGPMX,DGPMX,DGWD,DGRM,DGMV,DGMV0,DGFLD,DGPMDD,DGPMDDF,DGPMDDT
QUIT
+1 ;
S6 ; -- ward x-ref
+1 SET DGFLD=.107
IF $DATA(^DPT(DFN,.107))
SET DGPMX=^(.107)
IF DGPMX]""
KILL ^DGPM("LD",DGPMX,DA)
DO KILL^DGPMDDCN
+2 SET DGPMX=$PIECE(DGWD,"^",2)
SET ^DGPM("LD",DGPMX,DGMV)=""
+3 DO SET^DGPMDDCN
+4 QUIT
+5 ;
K6 ;
+1 IF X
SET W=$SELECT($DATA(^DIC(42,+X,0)):$PIECE(^(0),"^",1),1:"")
IF W]""
KILL ^DGPM("LD",W,DA)
IF $DATA(^DPT(DFN,.107))
IF ^(.107)=W
SET DGPMX=W
SET DGFLD=.107
DO KILL^DGPMDDCN
+2 KILL W
+3 QUIT
+4 ;
S7 SET DGFLD=.108
+1 IF $DATA(^DPT(DFN,.108))
SET DGPMX=^(.108)
SET DGFLD=.108
DO KILL^DGPMDDCN
FOR DGPMX1=0:0
SET DGPMX1=+$ORDER(^DGPM("ARM",DGPMX,DGPMX1))
DO CHK
IF $TEST
KILL ^DGPM("ARM",DGPMX,DGPMX1)
QUIT
+2 SET DGPMX=+DGRM
IF DGPMX
DO SET^DGPMDDCN
+3 IF +DGRM
SET DGFLD=.108
SET DGPMX=+DGRM
SET ^DGPM("ARM",DGPMX,DGMV)=1
DO SET^DGPMDDCN
+4 QUIT
+5 ;
K7 IF $DATA(^DPT(DFN,.108))
IF X=+^(.108)
SET DGPMX=X
IF $DATA(^DGPM("ARM",DGPMX,DA))
KILL ^(DA)
SET DGFLD=.108
DO KILL^DGPMDDCN
+1 QUIT
+2 ;
CHK ;
+1 IF '$DATA(^DGPM(DGPMX1,0))
QUIT
+2 IF $PIECE(^DGPM(DGPMX1,0),"^",3)=DFN
QUIT
+3 QUIT
+4 ;
LD ; -- set "LD" x-ref for file #2 equal to corresp adm mv (#.107)
+1 NEW DFN,DGMV,DGMV0,DGX
SET DFN=DA
+2 SET DGX=X
DO FIND
IF $PIECE(DGWD,U,2)=DGX
SET ^DPT("LD",DGX,DFN)=DGMV
+3 QUIT
+4 ;
FIND ;
+1 DO NOW^%DTC
SET DGID=9999999.999999-%
SET (DGMV,DGMV0)=0
SET (DGWD,DGRM)=""
+2 FOR DGID=DGID:0
SET DGID=$ORDER(^DGPM("ATID4",DFN,DGID))
IF 'DGID
QUIT
SET DGMV=+$ORDER(^(DGID,0))
IF $DATA(^DGPM(DGMV,0))
SET DGMV0=^(0)
IF $SELECT('$DATA(^DGPM(+$PIECE(DGMV0,"^",17),0))
SET (DGMV,DGMV0)=0
QUIT
+3 IF $DATA(^DIC(42,+$PIECE(DGMV0,"^",6),0))
SET DGWD=$PIECE(DGMV0,"^",6)_"^"_$PIECE(^(0),"^")
+4 IF $DATA(^DG(405.4,+$PIECE(DGMV0,"^",7),0))
SET DGRM=+$PIECE(DGMV0,"^",7)_"^"_$PIECE(^(0),"^")
+5 KILL DGID
QUIT
+6 ;
RESET ; -- reset ^DPT nodes and x-refs
+1 ; input: DFN
+2 ;
+3 ; -- kill data and x-refs
+4 IF $DATA(^DPT(DFN,.107))
SET DGPMX=^(.107)
SET DGFLD=.107
IF DGPMX]""
KILL ^DGPM("LD",DGPMX,DA)
DO KILL^DGPMDDCN
+5 IF $DATA(^DPT(DFN,.108))
SET DGPMX=^(.108)
SET DGFLD=.108
DO KILL^DGPMDDCN
FOR DGPMX1=0:0
SET DGPMX1=+$ORDER(^DGPM("ARM",DGPMX,DGPMX1))
DO CHK
IF $TEST
KILL ^DGPM("ARM",DGPMX,DGPMX1)
QUIT
+6 ; -- reset data and x-refs
+7 DO FIND
+8 IF $SELECT('DGWD:1,1:$PIECE(DGWD,"^",2)="")
Begin DoDot:1
+9 NEW VAWD
+10 DO INPTCK^DGPMDDCN
+11 IF VAWD
IF ($PIECE(VAWD,"^",2)]"")
DO RESET^DGPMDDCN
End DoDot:1
GOTO RESETQ
+12 DO S6
DO S7
+13 ;
RESETQ KILL DGWD,DGRM,DGPMX,DGPMX1,DGFLD,I,DGMV,DGMV0
QUIT
+1 ;
XREF ;
+1 IF $PIECE(^DGPM(DA,0),U,2)'=4
QUIT
+2 NEW DFN
SET DFN=+$PIECE(^DGPM(DA,0),U,3)
DO RESET
+3 QUIT