| 1 | GECSSTAA ;WISC/RFJ,KLD-stacker file utilities ;24 Nov 93 | 
|---|
| 2 | ;;2.0;GCS;**4,5,10,12,19,26,27,28**;MAR 14, 1995 | 
|---|
| 3 | Q | 
|---|
| 4 | ; | 
|---|
| 5 | ; | 
|---|
| 6 | ADD(SEGMENT,CONTROL,BATCH,DOCUMENT,DESCRIPT) ;  add entry to stack file | 
|---|
| 7 | ;  segment = code sheet segment from file 2101.2 | 
|---|
| 8 | ;  control = control segment | 
|---|
| 9 | ;  batch = batch segment (optional, use "" if not defined) | 
|---|
| 10 | ;  document = doc and <tc>1 segments (optional, use "" if not defined) | 
|---|
| 11 | ;  descript = 79 character description of event | 
|---|
| 12 | ;  return internal entry number | 
|---|
| 13 | N %,%H,%I,DA,DATE,DIE,DR,TIME,TRANID,X,GDT | 
|---|
| 14 | L +^GECS(2100.1,0) | 
|---|
| 15 | S %=^GECS(2100.1,0) | 
|---|
| 16 | F DA=$P(%,"^",3)+1:1 Q:'$D(^GECS(2100.1,DA)) | 
|---|
| 17 | S $P(%,"^",3)=DA,$P(%,"^",4)=$P(%,"^",4)+1,^GECS(2100.1,0)=% | 
|---|
| 18 | L -^GECS(2100.1,0) | 
|---|
| 19 | ; | 
|---|
| 20 | L +^GECS(2100.1,DA) | 
|---|
| 21 | S DATE=$P(CONTROL,"^",10),DATE=($E(DATE,1,2)-17)_$E(DATE,3,8) | 
|---|
| 22 | S TIME=$P(CONTROL,"^",11) | 
|---|
| 23 | S TRANID=$P(CONTROL,"^",6)_"-"_$P(CONTROL,"^",9) I $P(CONTROL,"^",8) S TRANID=TRANID_"-"_$P(CONTROL,"^",8) | 
|---|
| 24 | ; NEW ENTRY FOR NOIS | 
|---|
| 25 | ;  for transaction class not equal DOC (i.e. VRQ) | 
|---|
| 26 | I $P(CONTROL,"^",6)="  " S $P(TRANID,"-")=$E($P(CONTROL,"^",5),1,2) | 
|---|
| 27 | ; ORG ENTRY | 
|---|
| 28 | S ^GECS(2100.1,DA,0)=TRANID_"^F^^^"_SEGMENT_"^"_$S($P(CONTROL,"^",2)="CFD":"M",1:"A") | 
|---|
| 29 | S GDT=DATE_"."_TIME | 
|---|
| 30 | S DR="2///^S X=GDT",DIE=2100.1 D ^DIE | 
|---|
| 31 | I $L(DESCRIPT) S ^GECS(2100.1,DA,1)=$E(DESCRIPT,1,79) | 
|---|
| 32 | S ^GECS(2100.1,"B",TRANID,DA)="" | 
|---|
| 33 | S %=$E($P(TRANID,"-",2),4,9) I $L(%) S ^GECS(2100.1,"BID",%,DA)="" | 
|---|
| 34 | K ^GECS(2100.1,DA,10) | 
|---|
| 35 | D SETCS(DA,CONTROL) | 
|---|
| 36 | I $P(CONTROL,"^",8),BATCH'="" D SETCS(DA,BATCH) | 
|---|
| 37 | I DOCUMENT'="" D SETCS(DA,DOCUMENT) | 
|---|
| 38 | L -^GECS(2100.1,DA) | 
|---|
| 39 | Q DA | 
|---|
| 40 | ; | 
|---|
| 41 | ; | 
|---|
| 42 | SETCS(DA,DATA)   ;  set data in wp code sheet field | 
|---|
| 43 | ;  da = stack internal entry number | 
|---|
| 44 | ;  data = code sheet data to store | 
|---|
| 45 | ;  dt must be set to standard date prior to call | 
|---|
| 46 | I '$D(^GECS(2100.1,DA)) Q | 
|---|
| 47 | L +^GECS(2100.1,DA) | 
|---|
| 48 | I '$D(^GECS(2100.1,DA,10,0)) S ^(0)="^^0^0^"_DT | 
|---|
| 49 | N HOLDDATE,I,X,Y | 
|---|
| 50 | F I=$P($G(^GECS(2100.1,DA,10,0)),"^",3)+1:1 Q:'$D(^GECS(2100.1,DA,10,I,0)) | 
|---|
| 51 | S $P(^GECS(2100.1,DA,10,0),"^",3,4)=I_"^"_I | 
|---|
| 52 | S DATA=$TR(DATA,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") | 
|---|
| 53 | S ^GECS(2100.1,DA,10,I,0)=DATA | 
|---|
| 54 | S $P(^GECS(2100.1,DA,11),"^")=$P($G(^GECS(2100.1,DA,11)),"^")+$L(DATA) | 
|---|
| 55 | ;  compute checksum | 
|---|
| 56 | S X=$P(^GECS(2100.1,DA,11),"^",2)_DATA X $S($G(^%ZOSF("LPC"))'="":^("LPC"),1:"S Y=""""") S $P(^GECS(2100.1,DA,11),"^",2)=Y | 
|---|
| 57 | ;  find hold date | 
|---|
| 58 | I $E($P(DATA,"^"),3)=2!($P(DATA,"^")="AT1") S HOLDDATE=$$HOLDDATE^GECSSTTR(DATA) I HOLDDATE S $P(^GECS(2100.1,DA,11),"^",3)=HOLDDATE | 
|---|
| 59 | L -^GECS(2100.1,DA) | 
|---|
| 60 | Q | 
|---|
| 61 | ; | 
|---|
| 62 | ; | 
|---|
| 63 | SETSTAT(DA,STATUS)    ;  mark entry in stack for transmission | 
|---|
| 64 | ;  da = stack internal entry number | 
|---|
| 65 | ;  status = Queued for tran;        Marked for tran by event | 
|---|
| 66 | ;           Transmitted;            Error in transmission | 
|---|
| 67 | I "QMTEARF"'[$E(STATUS) Q | 
|---|
| 68 | N %,GECSFAUT,DIR | 
|---|
| 69 | S %=$G(^GECS(2100.1,DA,0)) I %="" Q | 
|---|
| 70 | L +^GECS(2100.1,DA) | 
|---|
| 71 | I $P(%,"^",4)'="" K ^GECS(2100.1,"AS",$P(%,"^",4),DA) | 
|---|
| 72 | S $P(^GECS(2100.1,DA,0),"^",4)=$E(STATUS) | 
|---|
| 73 | I $L(STATUS) S ^GECS(2100.1,"AS",$E(STATUS),DA)="" | 
|---|
| 74 | L -^GECS(2100.1,DA) | 
|---|
| 75 | I STATUS="M" D | 
|---|
| 76 | .   K ^TMP($J,"GECSSTTR") | 
|---|
| 77 | .   S GECSFAUT=1 | 
|---|
| 78 | .   D BUILD^GECSSTTM(DA) | 
|---|
| 79 | .   D TRANSMIT^GECSSTTT | 
|---|
| 80 | .   K ^TMP($J,"GECSSTTR") | 
|---|
| 81 | Q | 
|---|
| 82 | ; | 
|---|
| 83 | ; | 
|---|
| 84 | SETKEY(DA,KEY) ;  set the key for document lookup | 
|---|
| 85 | I '$D(^GECS(2100.1,DA,0)) Q | 
|---|
| 86 | N %,D,D0,DI,DIC,DIE,DQ,DR,X,Y | 
|---|
| 87 | S (DIC,DIE)="^GECS(2100.1,",DR="8///"_KEY_";" | 
|---|
| 88 | ;  if key is null, delete it | 
|---|
| 89 | I KEY="" S DR="8///@;" | 
|---|
| 90 | D ^DIE | 
|---|
| 91 | Q | 
|---|
| 92 | ; | 
|---|
| 93 | ; | 
|---|
| 94 | CHEKDUPL(DATA)     ;  called from control input template to check for duplicate | 
|---|
| 95 | ;  entry in the stack file. | 
|---|
| 96 | ;  data=same as "fms" node in file 2100 | 
|---|
| 97 | ;      =transcode^transnumber | 
|---|
| 98 | N TRANNUMB | 
|---|
| 99 | S TRANNUMB=$E($P(DATA,"^",2)_"           ",1,11) | 
|---|
| 100 | I $D(^GECS(2100.1,"B",$P(DATA,"^")_"-"_TRANNUMB)) Q 1 | 
|---|
| 101 | Q 0 | 
|---|
| 102 | ; | 
|---|
| 103 | ; | 
|---|
| 104 | SELECT(GECSTRAN,GECSSITE,GECSSTAT,GECSSCRN,GECSPROM) ;  select stack entry | 
|---|
| 105 | ;  gecstran = optional screen transaction types (delimit using ^) | 
|---|
| 106 | ;  gecssite = optional screen for station number | 
|---|
| 107 | ;  gecsstat = optional screen for status (delimit using ^) | 
|---|
| 108 | ;  gecsscrn = optional additional screen which is executed | 
|---|
| 109 | ;  gecsprom = optional prompt | 
|---|
| 110 | ;  return internal entry of stack selected ^ document id | 
|---|
| 111 | N %,%Y,DDH,DIC,GECSDATA,SCREEN,X,Y | 
|---|
| 112 | S DIC="^GECS(2100.1,",DIC(0)="QEAMZ",DIC("A")="Select Stack Document for Retransmission: " | 
|---|
| 113 | I $G(GECSPROM)'="" S DIC("A")=GECSPROM | 
|---|
| 114 | S SCREEN="S GECSDATA=$G(^GECS(2100.1,+Y,0))" | 
|---|
| 115 | I $G(GECSTRAN)'="" S SCREEN=SCREEN_" I GECSTRAN[$E(GECSDATA,1,2)" | 
|---|
| 116 | I $G(GECSSITE)'="" S SCREEN=SCREEN_" I $E($P(GECSDATA,""-"",2),1,3)=GECSSITE" | 
|---|
| 117 | I $G(GECSSTAT)'="" S SCREEN=SCREEN_" I GECSSTAT[$P(GECSDATA,U,4)" | 
|---|
| 118 | I $G(GECSSCRN)'="" S SCREEN=SCREEN_" X GECSSCRN" | 
|---|
| 119 | S DIC("S")=SCREEN | 
|---|
| 120 | W ! D ^DIC | 
|---|
| 121 | Q $S(Y>0:+Y_"^"_$P(Y,"^",2),1:0) | 
|---|