| 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)
 | 
|---|