| 1 | ECXTRANS ;ALB/GTS,JAP,BIR/DMA-Extract from Local Editing Files and Transmit ; 12/14/04 9:10am | 
|---|
| 2 | ;;3.0;DSS EXTRACTS;**2,9,12,8,13,14,23,24,33,49,54,75,71**;Dec 22, 1997 | 
|---|
| 3 | EN ;entry point | 
|---|
| 4 | N ECDA,ECRE,ECTMP,ECCHK,ECDIVVR,ECXDIQ,JJ,SS,OUT,DIR,DUOUT | 
|---|
| 5 | N DTOUT,DIRUT,DIC,X,Y,ECXLOGIC,ECSD,FODMN | 
|---|
| 6 | S ECXQUEUE=$P($G(^ECX(728,1,"QUEUE")),"^",1) | 
|---|
| 7 | I ECXQUEUE'?1"DM"1U D  Q | 
|---|
| 8 | .W !,"You have not defined a proper transmission queue" | 
|---|
| 9 | .W !,"for entry number 1 in the DSS EXTRACTS file (#728)." | 
|---|
| 10 | .W !,"No transmission allowed." | 
|---|
| 11 | .D PAUSE | 
|---|
| 12 | ;** check divisions for transmission | 
|---|
| 13 | S ECCHK=$$DIV4^XUSER(.ECTMP,DUZ) | 
|---|
| 14 | I 'ECCHK D  Q | 
|---|
| 15 | .W !,"You do not have any divisions defined in your user set up and cannot transmit." | 
|---|
| 16 | .S DIR(0)="FAO^1:1",DIR("A")="Hit Return to continue." D ^DIR K DIR,X,Y | 
|---|
| 17 | W !!,"Your user setup will only allow you to transmit extracts from the" | 
|---|
| 18 | W !,"following divisions:",! | 
|---|
| 19 | S ECDIVVR="" | 
|---|
| 20 | F  S ECDIVVR=$O(ECTMP(ECDIVVR)) Q:'(+ECDIVVR)  D | 
|---|
| 21 | .K ECXDIC S DA=ECDIVVR,DIC="^DIC(4,",DIQ(0)="I",DIQ="ECXDIC",DR=".01" | 
|---|
| 22 | .D EN^DIQ1 W !,"   ",$G(ECXDIC(4,DA,.01,"I")) K DIC,DIQ,DA,DR,ECXDIC | 
|---|
| 23 | W !!,"If you can't select an extract, it is probably from another division.",! | 
|---|
| 24 | D PAUSE Q:OUT | 
|---|
| 25 | AGAIN S ECRE="",DIC="^ECX(727,",DIC(0)="AEQM" | 
|---|
| 26 | S DIC("A")="Transmit which extract: " | 
|---|
| 27 | S DIC("S")="I '$D(^ECX(727,+Y,""L"")),'$D(^ECX(727,+Y,""PURG"")),$D(ECTMP(+$P($G(^ECX(727,+Y,""DIV"")),U,1)))" | 
|---|
| 28 | D ^DIC | 
|---|
| 29 | I Y<0 W !! Q | 
|---|
| 30 | ;get data on extract | 
|---|
| 31 | S DR="1;2;3;4;5;6;14;15",(ECDA,DA)=+Y,DIQ(0)="IE",DIQ="ECXDIQ" D EN^DIQ1 | 
|---|
| 32 | I ECXDIQ(727,ECDA,14,"I")="" D | 
|---|
| 33 | .S ECXDIQ(727,ECDA,14,"I")=$$FISCAL^ECXUTL1(ECXDIQ(727,ECDA,3,"I")) | 
|---|
| 34 | .S ECXDIQ(727,ECDA,14,"E")=ECXDIQ(727,ECDA,14,"I") | 
|---|
| 35 | S ECXLOGIC=ECXDIQ(727,ECDA,14,"I") | 
|---|
| 36 | S ECSD=ECXDIQ(727,ECDA,3,"I") | 
|---|
| 37 | W !!,ECXDIQ(727,ECDA,6,"E")_" Extract (#"_ECDA_")",?42,"Records:    ",ECXDIQ(727,ECDA,5,"E") | 
|---|
| 38 | W !,"Generated on: ",ECXDIQ(727,ECDA,1,"E"),?42,"Start date: ",ECXDIQ(727,ECDA,3,"E") | 
|---|
| 39 | W !,"Division:     ",$E(ECXDIQ(727,ECDA,15,"E"),1,26),?42,"End date:   ",ECXDIQ(727,ECDA,4,"E") | 
|---|
| 40 | S X=$E(ECXDIQ(727,ECDA,14,"I"),5) S X=$S((X="")!(X=" "):"",1:"revision "_X_" of ") | 
|---|
| 41 | W !!,"The data was extracted using "_X_"fiscal year "_$E(ECXDIQ(727,ECDA,14,"I"),1,4)_" logic." | 
|---|
| 42 | W !!,"MailMan transmission of the "_ECXDIQ(727,ECDA,2,"E")_" extract is set to a" | 
|---|
| 43 | W !,"limit of 131,000 bytes per message.  Each extract record ends with a ^~." | 
|---|
| 44 | I $G(^ECX(727,ECDA,"TR")) S ECX=^("TR") D  Q:OUT | 
|---|
| 45 | .S OUT=0 | 
|---|
| 46 | .W !!,"This extract was transmitted on ",$TR($$FMTE^XLFDT(ECX,"5DF")," ","0") | 
|---|
| 47 | .K ECX S DIR(0)="Y",DIR("A")="Do you want to retransmit " D ^DIR K DIR | 
|---|
| 48 | .I 'Y S OUT=1 Q | 
|---|
| 49 | .K ^ECX(727,ECDA,"TR") | 
|---|
| 50 | .S ECRE="re" | 
|---|
| 51 | S ECTYPE=$P(^ECX(727,ECDA,0),U,3),ECIEN=+$O(^ECX(727.1,"AC",ECTYPE,0)) | 
|---|
| 52 | S ECPIECE=$P($G(^ECX(727.1,ECIEN,0)),U,10) | 
|---|
| 53 | I ECPIECE>0,$P($G(^ECX(728,1,7.1)),U,ECPIECE)]"" D  Q | 
|---|
| 54 | .D MES^XPDUTL(" ") | 
|---|
| 55 | .D MES^XPDUTL("An "_ECTYPE_" Extract is currently running or scheduled to run.") | 
|---|
| 56 | .D MES^XPDUTL("Please wait until that job has completed before attempting") | 
|---|
| 57 | .D MES^XPDUTL("this transmission.") | 
|---|
| 58 | .D MES^XPDUTL(" ") | 
|---|
| 59 | .D PAUSE | 
|---|
| 60 | S ZTSK=$G(^ECX(727,ECDA,"Q")) | 
|---|
| 61 | I ZTSK D STAT^%ZTLOAD I ZTSK(0) I ZTSK(1)<3 D  Q | 
|---|
| 62 | .W !!,"Task ",ZTSK," is already queued to transmit this extract." | 
|---|
| 63 | .K ZTSK | 
|---|
| 64 | .D PAUSE | 
|---|
| 65 | S FODMN=$$FODMN() | 
|---|
| 66 | ;Field office reminder | 
|---|
| 67 | I FODMN D | 
|---|
| 68 | .W ! | 
|---|
| 69 | .W !,"** This extract is being sent from a field office domain.  **" | 
|---|
| 70 | .W !,"** Extract message(s) will only be delivered to you and    **" | 
|---|
| 71 | .W !,"** will be placed into your 'DSSXMIT' mail basket.         **" | 
|---|
| 72 | .W ! | 
|---|
| 73 | .;Ensure user has a DSSXMIT mail basket | 
|---|
| 74 | .N TMPARR | 
|---|
| 75 | .D LISTBSKT^XMXAPIB(DUZ,,,,"DSSXMIT","TMPARR") | 
|---|
| 76 | .I '$D(TMPARR("XMLIST","BSKT","DSSXMIT")) D | 
|---|
| 77 | ..;Create DSSXMIT basket | 
|---|
| 78 | ..N IEN,XMERR | 
|---|
| 79 | ..D CRE8BSKT^XMXAPIB(DUZ,"DSSXMIT",.IEN) | 
|---|
| 80 | ..K ^TMP("XMERR",$J) | 
|---|
| 81 | ;Test queue clearance | 
|---|
| 82 | ;I 'FODMN I (ECXLOGIC'=$$FISCAL^ECXUTL1(ECSD))!((ECXLOGIC>$$FISCAL^ECXUTL1(DT))!(ECXLOGIC=$$FISCAL^ECXUTL1(DT))) D  Q:OUT | 
|---|
| 83 | ;.S OUT=0 | 
|---|
| 84 | ;.K DIR | 
|---|
| 85 | ;.S DIR(0)="Y" | 
|---|
| 86 | ;.S DIR("A",1)="** This extract will be transmitted to the AAC test queue **" | 
|---|
| 87 | ;.S DIR("A")="Do you want to continue " | 
|---|
| 88 | ;.W !! D ^DIR | 
|---|
| 89 | ;.I 'Y S OUT=1 Q | 
|---|
| 90 | ;.S ECXQUEUE=$P($G(^ECX(728,1,"QUEUE")),"^",2) | 
|---|
| 91 | ;.S:ECXQUEUE="" ECXQUEUE="DMT" | 
|---|
| 92 | S ZTSAVE("ECDA")="",ZTSAVE("ECXQUEUE")="",ZTSAVE("ECRE")="" | 
|---|
| 93 | S ZTRTN="START^ECXTRANS",ZTIO="" | 
|---|
| 94 | S ZTDESC="Transmission of extract # "_ECDA | 
|---|
| 95 | W !! D ^%ZTLOAD | 
|---|
| 96 | I $D(ZTSK) D | 
|---|
| 97 | .W !,"Request queued as Task #",ZTSK,"." | 
|---|
| 98 | .S ^ECX(727,ECDA,"Q")=ZTSK K ZTSK | 
|---|
| 99 | .D PAUSE | 
|---|
| 100 | Q | 
|---|
| 101 | ; entry point for task | 
|---|
| 102 | START N DA,DIC,DIQ,DR,ECAR1,ECAR2,ECC1,ECC2,ECED,ECGPR,ECF,ECGRP,ECHEAD,ECINST | 
|---|
| 103 | N ECMAX,ECMAXR,ECMSN,ECPACK,ECSIZ,ECVER,ECXDIC,I,J,EXDT | 
|---|
| 104 | N STR,STRCNT,X,ECSD,ECXLOGIC | 
|---|
| 105 | S:$P(^ECX(727,ECDA,0),U,3)'="Prosthetics" ECINST=$P(^ECX(728,1,0),U) | 
|---|
| 106 | S:$P(^ECX(727,ECDA,0),U,3)="Prosthetics" ECINST=$P(^("DIV"),U) | 
|---|
| 107 | S DA=ECINST,DIC="^DIC(4,",DIQ(0)="I",DIQ="ECXDIC",DR=".01;99" | 
|---|
| 108 | D EN^DIQ1 S ECINST=$G(ECXDIC(4,DA,99,"I")) | 
|---|
| 109 | S ECF=^ECX(727,ECDA,"FILE"),ECHEAD=^("HEAD"),ECGRP=^("GRP") | 
|---|
| 110 | S X=^(0),ECPACK=$P(X,U,3),ECSD=$P(X,U,4),ECED=$P(X,U,5) | 
|---|
| 111 | S X=$G(^("VER")),ECVER=$P(X,"^",1),ECXLOGIC=$P(X,"^",2) | 
|---|
| 112 | S:'ECVER ECVER=1 S ECVER=$$RJ^XLFSTR(ECVER,3,0) | 
|---|
| 113 | I ECXLOGIC="" S ECXLOGIC=$$FISCAL^ECXUTL1(ECSD) | 
|---|
| 114 | S ECXLOGIC=$$PAD^ECXUTL1(ECXLOGIC,5,"B"," ") | 
|---|
| 115 | I ECPACK["(setup)" S ECXQUEUE="DMU" | 
|---|
| 116 | K ^TMP($J) | 
|---|
| 117 | S ECHD(1)=ECINST_ECHEAD_$$ECXYM^ECXUTL(ECED)_ECVER_ECXLOGIC | 
|---|
| 118 | S ECMAX=130000,ECMAXR=250,ECLN=2,ECMSN=1,(ECRN,ECSIZ)=0,J="" | 
|---|
| 119 | F  S J=$O(^ECX(ECF,"AC",ECDA,J)) Q:('J)  D | 
|---|
| 120 | .M ECAR1=^ECX(ECF,J) S (ECAR2,ECC2)=1,(ECAR2(ECC2),ECC1)="" | 
|---|
| 121 | .F  S ECC1=$O(ECAR1(ECC1)) Q:ECC1=""  D | 
|---|
| 122 | ..S:ECC1=0 ECAR1(ECC1)=$P(ECAR1(ECC1),"^",4,999) | 
|---|
| 123 | ..S ECAR2(ECC2)=ECAR2(ECC2)_ECAR1(ECC1) I $L(ECAR2(ECC2))>ECMAXR D | 
|---|
| 124 | ...F I=ECMAXR:-1:1 Q:$E(ECAR2(ECC2),I)="^" | 
|---|
| 125 | ...S (X,ECAR2)=ECAR2+1,ECAR2(X)=$E(ECAR2(ECC2),I+1,$L(ECAR2(ECC2))) | 
|---|
| 126 | ...S ECAR2(ECC2)=$E(ECAR2(ECC2),1,I),ECC2=X | 
|---|
| 127 | .S ECAR2(ECC2)=ECAR2(ECC2)_"^~",ECRN=ECRN+1,X="" | 
|---|
| 128 | .F  S X=$O(ECAR2(X)) Q:X=""  D | 
|---|
| 129 | ..S ^TMP($J,ECMSN,ECLN,0)=ECAR2(X),ECLN=ECLN+1,ECSIZ=ECSIZ+$L(ECAR2(X)) | 
|---|
| 130 | .K ECAR1,ECAR2 | 
|---|
| 131 | .I (ECSIZ>ECMAX),($O(^ECX(ECF,"AC",ECDA,J))) D | 
|---|
| 132 | ..S ECLN=2,ECMSN=ECMSN+1,ECSIZ=0 | 
|---|
| 133 | ;quit if user stopped task | 
|---|
| 134 | I $$S^%ZTLOAD D CLEAN Q | 
|---|
| 135 | ;generate mailman messages to aac | 
|---|
| 136 | S ECXLNCNT=9,(ECXXMZ,STRCNT)=0,STR="" | 
|---|
| 137 | F ECMS=1:1:ECMSN D | 
|---|
| 138 | .D SEND(.ECXXMZ) | 
|---|
| 139 | .S STR=STR_$$RJ^XLFSTR(ECXXMZ,18," "),STRCNT=STRCNT+1 I STRCNT=4 D | 
|---|
| 140 | ..S ^TMP($J,"LOC",ECXLNCNT,0)=STR,ECXLNCNT=ECXLNCNT+1 | 
|---|
| 141 | ..S STR="",STRCNT=0 | 
|---|
| 142 | I STR]"" S ^TMP($J,"LOC",ECXLNCNT,0)=STR | 
|---|
| 143 | ;send msg to local dss grp | 
|---|
| 144 | D SENDLOC,CLEAN | 
|---|
| 145 | Q | 
|---|
| 146 | ; | 
|---|
| 147 | SEND(ECXXMZ) ;send individual messages | 
|---|
| 148 | N ECXDD,DA,DIC,DIE,DINUM,X,Y,Z,XMDUZ,XMTEXT,XMSUB,XMY,XMZ,FODMN | 
|---|
| 149 | S XMSUB="("_ECGRP_") "_ECINST_" - "_ECPACK_" DSS EXTRACT, MESSAGE "_ECMS_" OF "_ECMSN | 
|---|
| 150 | S XMDUZ="DSS SYSTEM",^TMP($J,ECMS,1,0)=ECHD(1) | 
|---|
| 151 | S XMY("XXX@Q-"_ECXQUEUE_".VA.GOV")="" | 
|---|
| 152 | ;Send extracts done at field offices to user instead of AAC | 
|---|
| 153 | S FODMN=$$FODMN() | 
|---|
| 154 | I FODMN D | 
|---|
| 155 | .K XMY | 
|---|
| 156 | .S XMY(DUZ)="" | 
|---|
| 157 | S XMTEXT="^TMP($J,ECMS," | 
|---|
| 158 | D ^XMD | 
|---|
| 159 | S ECXXMZ=XMZ | 
|---|
| 160 | ;store msg# in extract log | 
|---|
| 161 | D FIELD^DID(727,301,"","SPECIFIER","ECXDD") | 
|---|
| 162 | S DA(1)=ECDA,DIC(0)="L",DIC("P")=ECXDD("SPECIFIER") | 
|---|
| 163 | S DIC="^ECX(727,"_DA(1)_",1,",X=XMZ,DINUM=X | 
|---|
| 164 | K DD,DO D FILE^DICN | 
|---|
| 165 | ;Move message to DSSXMIT basket if sending from field office | 
|---|
| 166 | I FODMN D | 
|---|
| 167 | .N XMERR | 
|---|
| 168 | .D MOVEMSG^XMXAPI(DUZ,,XMZ,"DSSXMIT",.X) | 
|---|
| 169 | .K ^TMP("XMERR",$J) | 
|---|
| 170 | Q | 
|---|
| 171 | ; | 
|---|
| 172 | SENDLOC ; send message to mail group 'DSS-ECGRP' | 
|---|
| 173 | S TIME=$P($$HTE^XLFDT($H),":",1,2) | 
|---|
| 174 | S XMSUB=ECINST_" - "_ECPACK_" EXTRACT FOR DSS",XMDUZ="DSS SYSTEM" | 
|---|
| 175 | K XMY S XMY(DUZ)="",XMY("G.DSS-"_ECGRP_"@"_^XMB("NETNAME"))="" | 
|---|
| 176 | S ^TMP($J,"LOC",1,0)="The DSS "_ECPACK_" ("_ECHEAD_") extract, #"_ECDA_"," | 
|---|
| 177 | S ^TMP($J,"LOC",2,0)="was "_ECRE_"transmitted on "_$P(TIME,"@")_" at "_$P(TIME,"@",2)_". " | 
|---|
| 178 | S ^TMP($J,"LOC",3,0)=" " | 
|---|
| 179 | S ^TMP($J,"LOC",4,0)="Maximum number of Bytes (characters) per message: 131,000 " | 
|---|
| 180 | S ^TMP($J,"LOC",5,0)=" " | 
|---|
| 181 | S ^TMP($J,"LOC",6,0)="A total of "_ECRN_" records were written." | 
|---|
| 182 | S ^TMP($J,"LOC",7,0)="A total of "_ECMSN_" messages were sent." | 
|---|
| 183 | S ^TMP($J,"LOC",8,0)="    Message numbers :" | 
|---|
| 184 | S XMTEXT="^TMP($J,""LOC""," | 
|---|
| 185 | D ^XMD | 
|---|
| 186 | S ^ECX(727,ECDA,"TR")=DT | 
|---|
| 187 | Q | 
|---|
| 188 | ; | 
|---|
| 189 | CLEAN ;clean-up | 
|---|
| 190 | S ZTREQ="@" | 
|---|
| 191 | K ^TMP($J),^ECX(727,ECDA,"Q"),XMDUZ,XMTEXT,XMSUB,XMY,XMZ | 
|---|
| 192 | K ECDA,ECRE,ECTMP,ECCHK,ECDIVVR,ECXDIQ,ECXMAX,ECXMSG | 
|---|
| 193 | D ^ECXKILL | 
|---|
| 194 | I $$S^%ZTLOAD K ZTREQ S ZTSTOP=1 | 
|---|
| 195 | Q | 
|---|
| 196 | ; | 
|---|
| 197 | PAUSE ;pause screen | 
|---|
| 198 | S OUT=0 | 
|---|
| 199 | I $E(IOST)="C" D | 
|---|
| 200 | .S SS=22-$Y F JJ=1:1:SS W ! | 
|---|
| 201 | .K DIR S DIR(0)="E" W ! D ^DIR K DIR | 
|---|
| 202 | I 'Y S OUT=1 | 
|---|
| 203 | W !! | 
|---|
| 204 | Q | 
|---|
| 205 | ; | 
|---|
| 206 | FODMN(DOMAIN)   ;Is domain a field office domain | 
|---|
| 207 | ;Input : DOMAIN - Domain name to check | 
|---|
| 208 | ;               - Default value pulled from ^XMB("NETNAME") | 
|---|
| 209 | ;Output: 1 = Yes  /  0 = No | 
|---|
| 210 | ; | 
|---|
| 211 | N X,SUB,OUT | 
|---|
| 212 | S DOMAIN=$G(DOMAIN) | 
|---|
| 213 | S:(DOMAIN="") DOMAIN=$G(^XMB("NETNAME")) | 
|---|
| 214 | S OUT=0 | 
|---|
| 215 | F X=1:1:$L(DOMAIN,".") D  Q:OUT | 
|---|
| 216 | .S SUB=$P(DOMAIN,".",X) | 
|---|
| 217 | .I ($E(SUB,1,3)="FO-")!($E(SUB,1,4)="ISC-") S OUT=1 | 
|---|
| 218 | Q OUT | 
|---|