XMKP ;ISC-SF/GMB-Address and Post msg ;09/17/2002 12:52
;;8.0;MailMan;**1**;Jun 28, 2002
; Replaces ENT1^XMAD1,ENT^XMAD1,FINAL^XMAD1X (ISC-WASH/CAP)
SEND(XMDUZ,XMZ,XMINSTR) ;
; XMINSTR("SHARE DATE") Delete date for mail addressed to SHARED,MAIL
; XMINSTR("SHARE BSKT") Basket for mail addressed to SHARED,MAIL
; XMINSTR("SELF BSKT") Basket to deliver to if recipient is the sender
N XMTOCNT,XMPRI,XMINST
S XMPRI=($G(XMINSTR("FLAGS"))["P")
D SADDRTO(XMDUZ,XMZ) ; Populate ADDRESSED TO multiple
D SRECIP(XMDUZ,XMZ,XMPRI,.XMTOCNT) ; Populate RECIPIENT multiple
I XMTOCNT!$$BRODCAST D SPOST(XMDUZ,XMZ,XMTOCNT,.XMINSTR)
S XMINST=""
F S XMINST=$O(^XMB(3.9,XMZ,1,"AQUEUE",XMINST)) Q:'XMINST D
. D REMOTE^XMKPR(XMZ,XMINST)
D:$D(^XMB(3.9,XMZ,1,"AFAX")) FAX^XMFAX(XMZ)
Q
SPOST(XMDUZ,XMZ,XMTOCNT,XMINSTR) ;
N XMTSTAMP,XMPREC
S XMTSTAMP=$$TSTAMP^XMXUTIL1
S XMPREC=XMTOCNT
I $D(^TMP("XMY",$J,XMDUZ)) D
. S $P(XMPREC,U,2)=$G(XMINSTR("SELF BSKT"),1)
I $D(^TMP("XMY",$J,.6)) D
. S $P(XMPREC,U,3,4)=$G(XMINSTR("SHARE BSKT"),1)_U_$G(XMINSTR("SHARE DATE"),$$FMADD^XLFDT(DT,30))
I $$BRODCAST D
. S $P(XMPREC,U,1)=$P(^XMB(3.7,0),U,4)
. S $P(XMPREC,U,5)="*"
S ^XMBPOST("BOX",XMTSTAMP,"M",XMZ)=XMPREC
Q
BRODCAST() ;
Q $D(^TMP("XMY",$J,$$EZBLD^DIALOG(39006))) ; * (Broadcast to all local users)
SRECIP(XMDUZ,XMZ,XMPRI,XMTOCNT) ; "Send" to recipients
N XMTO,XMFDA,XMIEN,XMIENS,XMPREFIX,XMNOW
; Put addressees into RECIPIENT multiple
S XMTO="",XMTOCNT=0
F S XMTO=$O(^TMP("XMY",$J,XMTO)) Q:XMTO="" D
. K XMPREFIX,XMIEN
. D NEW(XMZ,XMPRI,XMTO,$G(^TMP("XMY",$J,XMTO,1)),.XMFDA,.XMIENS) ; New recipient
. I $D(^TMP("XMY",$J,XMTO,"F")) D
. . S:'$D(XMNOW) XMNOW=$$MMDT^XMXUTIL1($P(^XMB(3.9,XMZ,0),U,3))
. . D RCPTFWD^XMKP1("S",XMTO,.XMFDA,XMIENS,XMNOW)
. I +XMTO=XMTO S XMTOCNT=XMTOCNT+1
. E D STATUS(XMTO,.XMFDA,XMIENS,.XMPREFIX) ; Transmission Status
. D UPDATE^DIE("","XMFDA","XMIEN")
. S XMIENS=XMIEN(1)_","_XMZ_","
. I ".D.H.S."[("."_$G(XMPREFIX)_".") D OPOST(XMDUZ,XMZ,XMTO,XMIENS,XMPREFIX)
Q
SADDRTO(XMDUZ,XMZ) ; Put addressees into ADDRESSED TO multiple
N XMTO
S XMTO=""
F S XMTO=$O(^TMP("XMY0",$J,XMTO)) Q:XMTO="" D ADDRTO(XMDUZ,XMZ,XMTO)
Q
ADDRTO(XMDUZ,XMZ,XMTO) ;
N XMFDA,XMPREFIX,XMMULT
S XMPREFIX=$G(^TMP("XMY0",$J,XMTO,1))
I $D(^TMP("XMY0",$J,XMTO,"L")) D
. I XMTO=XMV("NAME") D Q
. . D LTRADD^XMJMD(XMDUZ,XMZ,$G(^TMP("XMY0",$J,XMTO,"L")))
. . S XMMULT=3.911
. S XMMULT=3.914
. S XMFDA(3.914,"?+1,"_XMZ_",",2)=XMDUZ
. S XMFDA(3.914,"?+1,"_XMZ_",",3)=XMV("NAME")_$S(XMDUZ=DUZ:"",1:$$EZBLD^DIALOG(38008,XMV("DUZ NAME"))) ; " (Surrogate: _x_)"
. S XMFDA(3.914,"?+1,"_XMZ_",",4)=^TMP("XMY0",$J,XMTO,"L")
E S XMMULT=3.911
S XMFDA(XMMULT,"?+1,"_XMZ_",",.01)=XMTO
S:XMPREFIX'="" XMFDA(XMMULT,"?+1,"_XMZ_",",1)=XMPREFIX
D UPDATE^DIE("","XMFDA")
Q
NEW(XMZ,XMPRI,XMTO,XMTYPE,XMFDA,XMIENS) ;
S XMIENS="+1,"_XMZ_","
S XMFDA(3.91,XMIENS,.01)=XMTO
; If addressee is also the creator of the msg, then I: or C: does not
; apply.
I $G(XMTYPE)'="" S XMFDA(3.91,XMIENS,6.5)=XMTYPE
I XMPRI,XMTO=+XMTO,$P($G(^XMB(3.7,XMTO,0)),U,11) S XMFDA(3.91,XMIENS,10)=$P(^(0),U,11) ; Priority response flag
Q
STATUS(XMTO,XMFDA,XMIENS,XMPREFIX) ;
I $E(XMTO,1,2)="F.",$P(^XMB(1,1,0),U,19),$D(^AKF("FAXR")),$E(XMTO,3,99)=$P($G(^AKF("FAXR",^TMP("XMY",$J,XMTO),0)),U) D Q
. S XMFDA(3.91,XMIENS,5)=$$EZBLD^DIALOG(39303.5) ; Awaiting Fax.
. S XMFDA(3.91,XMIENS,13)=^TMP("XMY",$J,XMTO)
I XMTO["@" D Q
. S XMFDA(3.91,XMIENS,5)=$$EZBLD^DIALOG(39303.1) ; Awaiting transmission.
. S XMFDA(3.91,XMIENS,6)=^TMP("XMY",$J,XMTO) ; sets x-ref "AQUEUE"
I $E(XMTO,2,2)="." D
. S XMPREFIX=$E(XMTO,1,1) ; We know it is upper case
. Q:"SDH"'[XMPREFIX
. S XMFDA(3.91,XMIENS,5)=$$EZBLD^DIALOG($S(XMPREFIX="S":39303.2,XMPREFIX="D":39303.3,1:39303.4)) ; "Awaiting Server."/"Awaiting Device."/"Awaiting H.Device."
Q
OPOST(XMDUZ,XMZ,XMTO,XMIENS,XMPREFIX) ;
I XMPREFIX="S" D SERVER^XMKPO(XMZ,XMTO,XMIENS) Q
I XMPREFIX="D" D DEVICE^XMKPO(XMDUZ,XMZ,XMTO,XMIENS,1) Q
I XMPREFIX="H" D DEVICE^XMKPO(XMDUZ,XMZ,XMTO,XMIENS,0) Q ; Headerless
Q
FWD(XMDUZ,XMZ,XMINSTR) ;
; XMFWDTYP fwding person recipient type: I:, CC:
; XMPRI 1=msg is priority msg; 0=not
; XMINSTR("SHARE DATE") Delete date for mail addressed to SHARED,MAIL
; XMINSTR("SHARE BSKT") Basket for mail addressed to SHARED,MAIL
; XMINSTR("FWD BY") String to replace standard 'Forwarded by'
; XMTOLIST Array of local recipients
; XMTOCNT Number of valid recipients
N XMTOLIST,XMPRI,XMFWDTYP,XMIEN,XMREMOTE,XMINST
S XMIEN=$O(^XMB(3.9,XMZ,1,"C",XMDUZ,0)) ; May have been fwd'd by a remote person
S XMFWDTYP=$S('XMIEN:"",1:$P($G(^XMB(3.9,XMZ,1,XMIEN,"T")),U))
S XMPRI=($P(^XMB(3.9,XMZ,0),U,7)["P")
D FADDRTO(XMDUZ,XMZ) ; Populate ADDRESSED TO multiple
D FRECIP(XMDUZ,XMZ,.XMINSTR,XMFWDTYP,XMPRI,.XMTOLIST,.XMREMOTE)
D:XMTOLIST(1)'=""!$$BRODCAST FPOST(XMDUZ,XMZ,.XMTOLIST,.XMINSTR)
S XMINST=""
F S XMINST=$O(XMREMOTE(XMINST)) Q:'XMINST D
. D REMOTE^XMKPR(XMZ,XMINST)
D:$D(^XMB(3.9,XMZ,1,"AFAX")) FAX^XMFAX(XMZ)
Q
FADDRTO(XMDUZ,XMZ) ; Put addressees into ADDRESSED TO multiple
N XMTO
S XMTO=""
F S XMTO=$O(^TMP("XMY0",$J,XMTO)) Q:XMTO="" D
. I '$$FIND1^DIC(3.911,","_XMZ_",","QX",XMTO,"B") D Q
. . D ADDRTO(XMDUZ,XMZ,XMTO)
. Q:'$D(^TMP("XMY0",$J,XMTO,"L"))
. I XMTO=XMV("NAME") D Q
. . D LTRADD^XMJMD(XMDUZ,XMZ,$G(^TMP("XMY0",$J,XMTO,"L")))
. N XMFDA,XMIENS
. S XMIENS="?+1,"_XMZ_","
. S XMFDA(3.914,XMIENS,.01)=XMTO
. ; we ignore any 'prefix' because these addressees are already on the msg
. S XMFDA(3.914,XMIENS,2)=XMDUZ
. S XMFDA(3.914,XMIENS,3)=XMV("NAME")_$S(XMDUZ=DUZ:"",1:$$EZBLD^DIALOG(38008,XMV("DUZ NAME"))) ; " (Surrogate: _x_)"
. S XMFDA(3.914,XMIENS,4)=^TMP("XMY0",$J,XMTO,"L")
. D UPDATE^DIE("","XMFDA")
Q
FPOST(XMDUZ,XMZ,XMTOLIST,XMINSTR) ; For local delivery
N XMTSTAMP,XMTOCNT,I,XMUID,XMPREC
S XMTSTAMP=$$TSTAMP^XMXUTIL1
I $D(^TMP("XMY",$J,XMDUZ)) D
. S $P(XMPREC,U,2)=$G(XMINSTR("SELF BSKT"),1)
I $D(^TMP("XMY",$J,.6)) D
. S $P(XMPREC,U,3,4)=$G(XMINSTR("SHARE BSKT"),1)_U_$G(XMINSTR("SHARE DATE"),$$FMADD^XLFDT(DT,30))
S XMUID=XMZ_U_$S(XMDUZ=.6:DUZ,1:XMDUZ)_U_$J
S (I,XMTOCNT)=0
I XMTOLIST(1)'="" F S I=$O(XMTOLIST(I)) Q:I="" D
. S XMTOCNT=XMTOCNT+$L(XMTOLIST(I),U)-1
. S ^XMBPOST("FWD",XMUID_U_XMTSTAMP,I)=$P(XMTOLIST(I),U,2,999)
I $$BRODCAST D
. S $P(XMPREC,U,1)=$P(^XMB(3.7,0),U,4)
. S $P(XMPREC,U,5)="*"
. I $P(^XMB(3.9,XMZ,0),U,12)'="y" S $P(^(0),U,12)="y" ; If not info only, make it so.
E S $P(XMPREC,U,1)=XMTOCNT
S ^XMBPOST("BOX",XMTSTAMP,"M",XMUID)=XMPREC
Q
FRECIP(XMDUZ,XMZ,XMINSTR,XMFWDTYP,XMPRI,XMTOLIST,XMREMOTE) ; "Forward" to recipients
; XMFWDBY Forwarded by: name (surrogate)
N XMTO,XMX,XMIEN,XMFDA,XMIENS,XMPREFIX,XMFWDBY,XMNOW
S XMNOW=$$MMDT^XMXUTIL1($$NOW^XLFDT)
S XMFWDBY=$S($D(XMINSTR("FWD BY")):XMINSTR("FWD BY"),1:XMV("NAME")_$S(XMDUZ=DUZ:"",1:$$EZBLD^DIALOG(38008,XMV("DUZ NAME")))) ; " (Surrogate: _x_)"
; Put addressees into RECIPIENT multiple
S XMTO="",XMX=1,XMTOLIST(XMX)=""
F S XMTO=$O(^TMP("XMY",$J,XMTO)) Q:XMTO="" D
. K XMPREFIX
. I +XMTO=XMTO D
. . S XMIEN=$O(^XMB(3.9,XMZ,1,"C",XMTO,0))
. E S XMIEN=$$FIND1^DIC(3.91,","_XMZ_",",$S(XMTO["@":"O",1:"QX"),XMTO,"C")
. I +XMIEN=0 D ; New recipient
. . N XMTYPE
. . ; If you are an info only recipient, then so is anyone you fwd to.
. . S XMTYPE=$S(XMFWDTYP'="":XMFWDTYP,1:$G(^TMP("XMY",$J,XMTO,1)))
. . D NEW(XMZ,XMPRI,XMTO,XMTYPE,.XMFDA,.XMIENS) ; New recipient
. E D
. . S XMIENS=XMIEN_","_XMZ_","
. . S:$G(^XMB(3.9,XMZ,1,XMIEN,"D")) XMFDA(3.91,XMIENS,7)="@" ; Unterminate
. I +XMTO'=XMTO D
. . D STATUS(XMTO,.XMFDA,XMIENS,.XMPREFIX) ; Transmission Status
. . S:$D(XMFDA(3.91,XMIENS,6)) XMREMOTE(XMFDA(3.91,XMIENS,6))=""
. I $D(^TMP("XMY",$J,XMTO,"F")) D
. . D RCPTFWD^XMKP1("F",XMTO,.XMFDA,XMIENS,XMNOW,XMFWDBY)
. E D
. . S XMFDA(3.91,XMIENS,8)=XMFWDBY_" "_XMNOW ; fwd by name date time
. . I '$D(XMINSTR("FWD BY"))!$D(XMINSTR("FWD BY XMDUZ")) S XMFDA(3.91,XMIENS,8.01)=XMDUZ ; fwd by duz
. I '$D(XMFDA(3.91,XMIENS,8.02)) D ; Filter-Forward or Regular-Forward
. . S XMFDA(3.91,XMIENS,8.02)=$S($G(XMINSTR("FWD BY XMDUZ"))="F":"F",1:"@")
. I XMIEN D
. . I '$D(XMFDA(3.91,XMIENS,8.03)) D
. . . S XMFDA(3.91,XMIENS,8.03)="@"
. . . S XMFDA(3.91,XMIENS,8.04)="@"
. . D FILE^DIE("","XMFDA")
. E D
. . K XMIEN
. . D UPDATE^DIE("","XMFDA","XMIEN")
. . S XMIENS=XMIEN(1)_","_XMZ_","
. D:"^D^H^S^"[(U_$G(XMPREFIX)_U) OPOST(XMDUZ,XMZ,XMTO,XMIENS,XMPREFIX)
. Q:+XMTO'=XMTO ; Quit if addressee not local
. I $L(XMTOLIST(XMX))+$L(XMTO)>244 S XMX=XMX+1,XMTOLIST(XMX)=""
. S XMTOLIST(XMX)=XMTOLIST(XMX)_U_XMTO
Q
RPOST(XMDUZ,XMZ,XMZR) ;
N XMFDA
RADD ; Add response to response multiple in original msg
S XMFDA(3.9001,"+1,"_XMZ_",",.01)=XMZR
D UPDATE^DIE("","XMFDA")
I $D(DIERR),$P(^XMB(3.9,XMZ,0),U,1)="" D G RADD
. S $P(^XMB(3.9,XMZ,0),U,1)=$$EZBLD^DIALOG(34012) ; * No Subject *
. S ^XMB(3.9,"B",$$EZBLD^DIALOG(34012),XMZ)=""
; Now put the message in the post box to be delivered.
; (If this is not a locally generated reply, then XMDUZ is "NR".)
S ^XMBPOST("BOX",$$TSTAMP^XMXUTIL1,"R",XMZ_U_XMZR)=$P(^XMB(3.9,XMZ,1,0),U,4)_U_$S(XMDUZ=.6:DUZ,1:XMDUZ)
Q
XMKP ;ISC-SF/GMB-Address and Post msg ;09/17/2002 12:52
+1 ;;8.0;MailMan;**1**;Jun 28, 2002
+2 ; Replaces ENT1^XMAD1,ENT^XMAD1,FINAL^XMAD1X (ISC-WASH/CAP)
SEND(XMDUZ,XMZ,XMINSTR) ;
+1 ; XMINSTR("SHARE DATE") Delete date for mail addressed to SHARED,MAIL
+2 ; XMINSTR("SHARE BSKT") Basket for mail addressed to SHARED,MAIL
+3 ; XMINSTR("SELF BSKT") Basket to deliver to if recipient is the sender
+4 NEW XMTOCNT,XMPRI,XMINST
+5 SET XMPRI=($GET(XMINSTR("FLAGS"))["P")
+6 ; Populate ADDRESSED TO multiple
DO SADDRTO(XMDUZ,XMZ)
+7 ; Populate RECIPIENT multiple
DO SRECIP(XMDUZ,XMZ,XMPRI,.XMTOCNT)
+8 IF XMTOCNT!$$BRODCAST
DO SPOST(XMDUZ,XMZ,XMTOCNT,.XMINSTR)
+9 SET XMINST=""
+10 FOR
SET XMINST=$ORDER(^XMB(3.9,XMZ,1,"AQUEUE",XMINST))
IF 'XMINST
QUIT
Begin DoDot:1
+11 DO REMOTE^XMKPR(XMZ,XMINST)
End DoDot:1
+12 IF $DATA(^XMB(3.9,XMZ,1,"AFAX"))
DO FAX^XMFAX(XMZ)
+13 QUIT
SPOST(XMDUZ,XMZ,XMTOCNT,XMINSTR) ;
+1 NEW XMTSTAMP,XMPREC
+2 SET XMTSTAMP=$$TSTAMP^XMXUTIL1
+3 SET XMPREC=XMTOCNT
+4 IF $DATA(^TMP("XMY",$JOB,XMDUZ))
Begin DoDot:1
+5 SET $PIECE(XMPREC,U,2)=$GET(XMINSTR("SELF BSKT"),1)
End DoDot:1
+6 IF $DATA(^TMP("XMY",$JOB,.6))
Begin DoDot:1
+7 SET $PIECE(XMPREC,U,3,4)=$GET(XMINSTR("SHARE BSKT"),1)_U_$GET(XMINSTR("SHARE DATE"),$$FMADD^XLFDT(DT,30))
End DoDot:1
+8 IF $$BRODCAST
Begin DoDot:1
+9 SET $PIECE(XMPREC,U,1)=$PIECE(^XMB(3.7,0),U,4)
+10 SET $PIECE(XMPREC,U,5)="*"
End DoDot:1
+11 SET ^XMBPOST("BOX",XMTSTAMP,"M",XMZ)=XMPREC
+12 QUIT
BRODCAST() ;
+1 ; * (Broadcast to all local users)
QUIT $DATA(^TMP("XMY",$JOB,$$EZBLD^DIALOG(39006)))
SRECIP(XMDUZ,XMZ,XMPRI,XMTOCNT) ; "Send" to recipients
+1 NEW XMTO,XMFDA,XMIEN,XMIENS,XMPREFIX,XMNOW
+2 ; Put addressees into RECIPIENT multiple
+3 SET XMTO=""
SET XMTOCNT=0
+4 FOR
SET XMTO=$ORDER(^TMP("XMY",$JOB,XMTO))
IF XMTO=""
QUIT
Begin DoDot:1
+5 KILL XMPREFIX,XMIEN
+6 ; New recipient
DO NEW(XMZ,XMPRI,XMTO,$GET(^TMP("XMY",$JOB,XMTO,1)),.XMFDA,.XMIENS)
+7 IF $DATA(^TMP("XMY",$JOB,XMTO,"F"))
Begin DoDot:2
+8 IF '$DATA(XMNOW)
SET XMNOW=$$MMDT^XMXUTIL1($PIECE(^XMB(3.9,XMZ,0),U,3))
+9 DO RCPTFWD^XMKP1("S",XMTO,.XMFDA,XMIENS,XMNOW)
End DoDot:2
+10 IF +XMTO=XMTO
SET XMTOCNT=XMTOCNT+1
+11 ; Transmission Status
IF '$TEST
DO STATUS(XMTO,.XMFDA,XMIENS,.XMPREFIX)
+12 DO UPDATE^DIE("","XMFDA","XMIEN")
+13 SET XMIENS=XMIEN(1)_","_XMZ_","
+14 IF ".D.H.S."[("."_$GET(XMPREFIX)_".")
DO OPOST(XMDUZ,XMZ,XMTO,XMIENS,XMPREFIX)
End DoDot:1
+15 QUIT
SADDRTO(XMDUZ,XMZ) ; Put addressees into ADDRESSED TO multiple
+1 NEW XMTO
+2 SET XMTO=""
+3 FOR
SET XMTO=$ORDER(^TMP("XMY0",$JOB,XMTO))
IF XMTO=""
QUIT
DO ADDRTO(XMDUZ,XMZ,XMTO)
+4 QUIT
ADDRTO(XMDUZ,XMZ,XMTO) ;
+1 NEW XMFDA,XMPREFIX,XMMULT
+2 SET XMPREFIX=$GET(^TMP("XMY0",$JOB,XMTO,1))
+3 IF $DATA(^TMP("XMY0",$JOB,XMTO,"L"))
Begin DoDot:1
+4 IF XMTO=XMV("NAME")
Begin DoDot:2
+5 DO LTRADD^XMJMD(XMDUZ,XMZ,$GET(^TMP("XMY0",$JOB,XMTO,"L")))
+6 SET XMMULT=3.911
End DoDot:2
QUIT
+7 SET XMMULT=3.914
+8 SET XMFDA(3.914,"?+1,"_XMZ_",",2)=XMDUZ
+9 ; " (Surrogate: _x_)"
SET XMFDA(3.914,"?+1,"_XMZ_",",3)=XMV("NAME")_$SELECT(XMDUZ=DUZ:"",1:$$EZBLD^DIALOG(38008,XMV("DUZ NAME")))
+10 SET XMFDA(3.914,"?+1,"_XMZ_",",4)=^TMP("XMY0",$JOB,XMTO,"L")
End DoDot:1
+11 IF '$TEST
SET XMMULT=3.911
+12 SET XMFDA(XMMULT,"?+1,"_XMZ_",",.01)=XMTO
+13 IF XMPREFIX'=""
SET XMFDA(XMMULT,"?+1,"_XMZ_",",1)=XMPREFIX
+14 DO UPDATE^DIE("","XMFDA")
+15 QUIT
NEW(XMZ,XMPRI,XMTO,XMTYPE,XMFDA,XMIENS) ;
+1 SET XMIENS="+1,"_XMZ_","
+2 SET XMFDA(3.91,XMIENS,.01)=XMTO
+3 ; If addressee is also the creator of the msg, then I: or C: does not
+4 ; apply.
+5 IF $GET(XMTYPE)'=""
SET XMFDA(3.91,XMIENS,6.5)=XMTYPE
+6 ; Priority response flag
IF XMPRI
IF XMTO=+XMTO
IF $PIECE($GET(^XMB(3.7,XMTO,0)),U,11)
SET XMFDA(3.91,XMIENS,10)=$PIECE(^(0),U,11)
+7 QUIT
STATUS(XMTO,XMFDA,XMIENS,XMPREFIX) ;
+1 IF $EXTRACT(XMTO,1,2)="F."
IF $PIECE(^XMB(1,1,0),U,19)
IF $DATA(^AKF("FAXR"))
IF $EXTRACT(XMTO,3,99)=$PIECE($GET(^AKF("FAXR",^TMP("XMY",$JOB,XMTO),0)),U)
Begin DoDot:1
+2 ; Awaiting Fax.
SET XMFDA(3.91,XMIENS,5)=$$EZBLD^DIALOG(39303.5)
+3 SET XMFDA(3.91,XMIENS,13)=^TMP("XMY",$JOB,XMTO)
End DoDot:1
QUIT
+4 IF XMTO["@"
Begin DoDot:1
+5 ; Awaiting transmission.
SET XMFDA(3.91,XMIENS,5)=$$EZBLD^DIALOG(39303.1)
+6 ; sets x-ref "AQUEUE"
SET XMFDA(3.91,XMIENS,6)=^TMP("XMY",$JOB,XMTO)
End DoDot:1
QUIT
+7 IF $EXTRACT(XMTO,2,2)="."
Begin DoDot:1
+8 ; We know it is upper case
SET XMPREFIX=$EXTRACT(XMTO,1,1)
+9 IF "SDH"'[XMPREFIX
QUIT
+10 ; "Awaiting Server."/"Awaiting Device."/"Awaiting H.Device."
SET XMFDA(3.91,XMIENS,5)=$$EZBLD^DIALOG($SELECT(XMPREFIX="S":39303.2,XMPREFIX="D":39303.3,1:39303.4))
End DoDot:1
+11 QUIT
OPOST(XMDUZ,XMZ,XMTO,XMIENS,XMPREFIX) ;
+1 IF XMPREFIX="S"
DO SERVER^XMKPO(XMZ,XMTO,XMIENS)
QUIT
+2 IF XMPREFIX="D"
DO DEVICE^XMKPO(XMDUZ,XMZ,XMTO,XMIENS,1)
QUIT
+3 ; Headerless
IF XMPREFIX="H"
DO DEVICE^XMKPO(XMDUZ,XMZ,XMTO,XMIENS,0)
QUIT
+4 QUIT
FWD(XMDUZ,XMZ,XMINSTR) ;
+1 ; XMFWDTYP fwding person recipient type: I:, CC:
+2 ; XMPRI 1=msg is priority msg; 0=not
+3 ; XMINSTR("SHARE DATE") Delete date for mail addressed to SHARED,MAIL
+4 ; XMINSTR("SHARE BSKT") Basket for mail addressed to SHARED,MAIL
+5 ; XMINSTR("FWD BY") String to replace standard 'Forwarded by'
+6 ; XMTOLIST Array of local recipients
+7 ; XMTOCNT Number of valid recipients
+8 NEW XMTOLIST,XMPRI,XMFWDTYP,XMIEN,XMREMOTE,XMINST
+9 ; May have been fwd'd by a remote person
SET XMIEN=$ORDER(^XMB(3.9,XMZ,1,"C",XMDUZ,0))
+10 SET XMFWDTYP=$SELECT('XMIEN:"",1:$PIECE($GET(^XMB(3.9,XMZ,1,XMIEN,"T")),U))
+11 SET XMPRI=($PIECE(^XMB(3.9,XMZ,0),U,7)["P")
+12 ; Populate ADDRESSED TO multiple
DO FADDRTO(XMDUZ,XMZ)
+13 DO FRECIP(XMDUZ,XMZ,.XMINSTR,XMFWDTYP,XMPRI,.XMTOLIST,.XMREMOTE)
+14 IF XMTOLIST(1)'=""!$$BRODCAST
DO FPOST(XMDUZ,XMZ,.XMTOLIST,.XMINSTR)
+15 SET XMINST=""
+16 FOR
SET XMINST=$ORDER(XMREMOTE(XMINST))
IF 'XMINST
QUIT
Begin DoDot:1
+17 DO REMOTE^XMKPR(XMZ,XMINST)
End DoDot:1
+18 IF $DATA(^XMB(3.9,XMZ,1,"AFAX"))
DO FAX^XMFAX(XMZ)
+19 QUIT
FADDRTO(XMDUZ,XMZ) ; Put addressees into ADDRESSED TO multiple
+1 NEW XMTO
+2 SET XMTO=""
+3 FOR
SET XMTO=$ORDER(^TMP("XMY0",$JOB,XMTO))
IF XMTO=""
QUIT
Begin DoDot:1
+4 IF '$$FIND1^DIC(3.911,","_XMZ_",","QX",XMTO,"B")
Begin DoDot:2
+5 DO ADDRTO(XMDUZ,XMZ,XMTO)
End DoDot:2
QUIT
+6 IF '$DATA(^TMP("XMY0",$JOB,XMTO,"L"))
QUIT
+7 IF XMTO=XMV("NAME")
Begin DoDot:2
+8 DO LTRADD^XMJMD(XMDUZ,XMZ,$GET(^TMP("XMY0",$JOB,XMTO,"L")))
End DoDot:2
QUIT
+9 NEW XMFDA,XMIENS
+10 SET XMIENS="?+1,"_XMZ_","
+11 SET XMFDA(3.914,XMIENS,.01)=XMTO
+12 ; we ignore any 'prefix' because these addressees are already on the msg
+13 SET XMFDA(3.914,XMIENS,2)=XMDUZ
+14 ; " (Surrogate: _x_)"
SET XMFDA(3.914,XMIENS,3)=XMV("NAME")_$SELECT(XMDUZ=DUZ:"",1:$$EZBLD^DIALOG(38008,XMV("DUZ NAME")))
+15 SET XMFDA(3.914,XMIENS,4)=^TMP("XMY0",$JOB,XMTO,"L")
+16 DO UPDATE^DIE("","XMFDA")
End DoDot:1
+17 QUIT
FPOST(XMDUZ,XMZ,XMTOLIST,XMINSTR) ; For local delivery
+1 NEW XMTSTAMP,XMTOCNT,I,XMUID,XMPREC
+2 SET XMTSTAMP=$$TSTAMP^XMXUTIL1
+3 IF $DATA(^TMP("XMY",$JOB,XMDUZ))
Begin DoDot:1
+4 SET $PIECE(XMPREC,U,2)=$GET(XMINSTR("SELF BSKT"),1)
End DoDot:1
+5 IF $DATA(^TMP("XMY",$JOB,.6))
Begin DoDot:1
+6 SET $PIECE(XMPREC,U,3,4)=$GET(XMINSTR("SHARE BSKT"),1)_U_$GET(XMINSTR("SHARE DATE"),$$FMADD^XLFDT(DT,30))
End DoDot:1
+7 SET XMUID=XMZ_U_$SELECT(XMDUZ=.6:DUZ,1:XMDUZ)_U_$JOB
+8 SET (I,XMTOCNT)=0
+9 IF XMTOLIST(1)'=""
FOR
SET I=$ORDER(XMTOLIST(I))
IF I=""
QUIT
Begin DoDot:1
+10 SET XMTOCNT=XMTOCNT+$LENGTH(XMTOLIST(I),U)-1
+11 SET ^XMBPOST("FWD",XMUID_U_XMTSTAMP,I)=$PIECE(XMTOLIST(I),U,2,999)
End DoDot:1
+12 IF $$BRODCAST
Begin DoDot:1
+13 SET $PIECE(XMPREC,U,1)=$PIECE(^XMB(3.7,0),U,4)
+14 SET $PIECE(XMPREC,U,5)="*"
+15 ; If not info only, make it so.
IF $PIECE(^XMB(3.9,XMZ,0),U,12)'="y"
SET $PIECE(^(0),U,12)="y"
End DoDot:1
+16 IF '$TEST
SET $PIECE(XMPREC,U,1)=XMTOCNT
+17 SET ^XMBPOST("BOX",XMTSTAMP,"M",XMUID)=XMPREC
+18 QUIT
FRECIP(XMDUZ,XMZ,XMINSTR,XMFWDTYP,XMPRI,XMTOLIST,XMREMOTE) ; "Forward" to recipients
+1 ; XMFWDBY Forwarded by: name (surrogate)
+2 NEW XMTO,XMX,XMIEN,XMFDA,XMIENS,XMPREFIX,XMFWDBY,XMNOW
+3 SET XMNOW=$$MMDT^XMXUTIL1($$NOW^XLFDT)
+4 ; " (Surrogate: _x_)"
SET XMFWDBY=$SELECT($DATA(XMINSTR("FWD BY")):XMINSTR("FWD BY"),1:XMV("NAME")_$SELECT(XMDUZ=DUZ:"",1:$$EZBLD^DIALOG(38008,XMV("DUZ NAME"))))
+5 ; Put addressees into RECIPIENT multiple
+6 SET XMTO=""
SET XMX=1
SET XMTOLIST(XMX)=""
+7 FOR
SET XMTO=$ORDER(^TMP("XMY",$JOB,XMTO))
IF XMTO=""
QUIT
Begin DoDot:1
+8 KILL XMPREFIX
+9 IF +XMTO=XMTO
Begin DoDot:2
+10 SET XMIEN=$ORDER(^XMB(3.9,XMZ,1,"C",XMTO,0))
End DoDot:2
+11 IF '$TEST
SET XMIEN=$$FIND1^DIC(3.91,","_XMZ_",",$SELECT(XMTO["@":"O",1:"QX"),XMTO,"C")
+12 ; New recipient
IF +XMIEN=0
Begin DoDot:2
+13 NEW XMTYPE
+14 ; If you are an info only recipient, then so is anyone you fwd to.
+15 SET XMTYPE=$SELECT(XMFWDTYP'="":XMFWDTYP,1:$GET(^TMP("XMY",$JOB,XMTO,1)))
+16 ; New recipient
DO NEW(XMZ,XMPRI,XMTO,XMTYPE,.XMFDA,.XMIENS)
End DoDot:2
+17 IF '$TEST
Begin DoDot:2
+18 SET XMIENS=XMIEN_","_XMZ_","
+19 ; Unterminate
IF $GET(^XMB(3.9,XMZ,1,XMIEN,"D"))
SET XMFDA(3.91,XMIENS,7)="@"
End DoDot:2
+20 IF +XMTO'=XMTO
Begin DoDot:2
+21 ; Transmission Status
DO STATUS(XMTO,.XMFDA,XMIENS,.XMPREFIX)
+22 IF $DATA(XMFDA(3.91,XMIENS,6))
SET XMREMOTE(XMFDA(3.91,XMIENS,6))=""
End DoDot:2
+23 IF $DATA(^TMP("XMY",$JOB,XMTO,"F"))
Begin DoDot:2
+24 DO RCPTFWD^XMKP1("F",XMTO,.XMFDA,XMIENS,XMNOW,XMFWDBY)
End DoDot:2
+25 IF '$TEST
Begin DoDot:2
+26 ; fwd by name date time
SET XMFDA(3.91,XMIENS,8)=XMFWDBY_" "_XMNOW
+27 ; fwd by duz
IF '$DATA(XMINSTR("FWD BY"))!$DATA(XMINSTR("FWD BY XMDUZ"))
SET XMFDA(3.91,XMIENS,8.01)=XMDUZ
End DoDot:2
+28 ; Filter-Forward or Regular-Forward
IF '$DATA(XMFDA(3.91,XMIENS,8.02))
Begin DoDot:2
+29 SET XMFDA(3.91,XMIENS,8.02)=$SELECT($GET(XMINSTR("FWD BY XMDUZ"))="F":"F",1:"@")
End DoDot:2
+30 IF XMIEN
Begin DoDot:2
+31 IF '$DATA(XMFDA(3.91,XMIENS,8.03))
Begin DoDot:3
+32 SET XMFDA(3.91,XMIENS,8.03)="@"
+33 SET XMFDA(3.91,XMIENS,8.04)="@"
End DoDot:3
+34 DO FILE^DIE("","XMFDA")
End DoDot:2
+35 IF '$TEST
Begin DoDot:2
+36 KILL XMIEN
+37 DO UPDATE^DIE("","XMFDA","XMIEN")
+38 SET XMIENS=XMIEN(1)_","_XMZ_","
End DoDot:2
+39 IF "^D^H^S^"[(U_$GET(XMPREFIX)_U)
DO OPOST(XMDUZ,XMZ,XMTO,XMIENS,XMPREFIX)
+40 ; Quit if addressee not local
IF +XMTO'=XMTO
QUIT
+41 IF $LENGTH(XMTOLIST(XMX))+$LENGTH(XMTO)>244
SET XMX=XMX+1
SET XMTOLIST(XMX)=""
+42 SET XMTOLIST(XMX)=XMTOLIST(XMX)_U_XMTO
End DoDot:1
+43 QUIT
RPOST(XMDUZ,XMZ,XMZR) ;
+1 NEW XMFDA
RADD ; Add response to response multiple in original msg
+1 SET XMFDA(3.9001,"+1,"_XMZ_",",.01)=XMZR
+2 DO UPDATE^DIE("","XMFDA")
+3 IF $DATA(DIERR)
IF $PIECE(^XMB(3.9,XMZ,0),U,1)=""
Begin DoDot:1
+4 ; * No Subject *
SET $PIECE(^XMB(3.9,XMZ,0),U,1)=$$EZBLD^DIALOG(34012)
+5 SET ^XMB(3.9,"B",$$EZBLD^DIALOG(34012),XMZ)=""
End DoDot:1
GOTO RADD
+6 ; Now put the message in the post box to be delivered.
+7 ; (If this is not a locally generated reply, then XMDUZ is "NR".)
+8 SET ^XMBPOST("BOX",$$TSTAMP^XMXUTIL1,"R",XMZ_U_XMZR)=$PIECE(^XMB(3.9,XMZ,1,0),U,4)_U_$SELECT(XMDUZ=.6:DUZ,1:XMDUZ)
+9 QUIT