| 1 | ECXDEFIN ;ALB/JAP,BIR/DMA-Define Extract Formats for Auto Queuing ; 17 Mar 95 / 9:55 AM
 | 
|---|
| 2 |  ;;3.0;DSS EXTRACTS;**24**;Dec 22, 1997
 | 
|---|
| 3 | EN ;entry point from option
 | 
|---|
| 4 |  N OUT,DIC,DIR,DIQ,DIRUT,DTOUT,DUOUT,DA,DR,X,Y,J,JJ
 | 
|---|
| 5 |  D MES^XPDUTL(" ")
 | 
|---|
| 6 |  D MES^XPDUTL("This option allows you to queue the generation of a specific DSS extract.")
 | 
|---|
| 7 |  D MES^XPDUTL("The extract will then be automatically requeued to run next month and")
 | 
|---|
| 8 |  D MES^XPDUTL("each subsequent month until the end of the fiscal year.  It will be")
 | 
|---|
| 9 |  D MES^XPDUTL("requeued to run on the same day of each month at the same time of day.")
 | 
|---|
| 10 |  D MES^XPDUTL(" ")
 | 
|---|
| 11 |  S DIC="727.1",DIC(0)="AEQLMZ",ECF=0 D ^DIC
 | 
|---|
| 12 |  Q:Y<0  Q:$D(DTOUT)  Q:$D(DUOUT)
 | 
|---|
| 13 |  S (DA,ECDA)=+Y,ECDATA=Y(0),ECROU=^ECX(727.1,ECDA,"ROU"),X="SETUP^"_ECROU D @X
 | 
|---|
| 14 |  I '$D(ECNODE) S ECNODE=7
 | 
|---|
| 15 |  ;don't allow setup if more than 1 primary prosthetics division
 | 
|---|
| 16 |  I ECGRP="PRO" D  Q:OUT>1
 | 
|---|
| 17 |  .S OUT=0,J=0
 | 
|---|
| 18 |  .S ECXDA1=$O(^ECX(728,0))
 | 
|---|
| 19 |  .F  S J=$O(^ECX(728,ECXDA1,1,J)) Q:'J  I $D(^ECX(728,ECXDA1,1,J,0)) S OUT=OUT+1
 | 
|---|
| 20 |  .I OUT>1 D
 | 
|---|
| 21 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 22 |  ..D MES^XPDUTL("This DSS site is responsible for Prosthetics data from")
 | 
|---|
| 23 |  ..D MES^XPDUTL("more than one Primary Prosthetics Division.  Therefore,")
 | 
|---|
| 24 |  ..D MES^XPDUTL("the PRO extract may not be setup for automatic requeue.")
 | 
|---|
| 25 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 26 |  ..D MES^XPDUTL("Please use the Prosthetics Extract option on the Package")
 | 
|---|
| 27 |  ..D MES^XPDUTL("Extracts menu to generate the monthly PRO extract for each")
 | 
|---|
| 28 |  ..D MES^XPDUTL("Primary Prosthetics Division.  Exiting...")
 | 
|---|
| 29 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 30 |  .I $E(IOST)="C" D
 | 
|---|
| 31 |  ..S SS=22-$Y F JJ=1:1:SS W !
 | 
|---|
| 32 |  ..S DIR(0)="E" W ! D ^DIR K DIR
 | 
|---|
| 33 |  ;don't allow setup if extract has never been run or if 1st extract of fiscal year
 | 
|---|
| 34 |  I ECGRP'="PRO" D
 | 
|---|
| 35 |  .S ECLDT=$P($G(^ECX(728,1,ECNODE)),U,ECPIECE)
 | 
|---|
| 36 |  I ECGRP="PRO" D
 | 
|---|
| 37 |  .S ECLDT=""
 | 
|---|
| 38 |  .S ECXDA1=$O(^ECX(728,0))
 | 
|---|
| 39 |  .I $D(^ECX(728,ECXDA1,1,ECXINST,0)) S ECLDT=$P(^ECX(728,ECXDA1,1,ECXINST,0),U,2)
 | 
|---|
| 40 |  I ECLDT="" D MSG Q
 | 
|---|
| 41 |  S X=$$CYFY^ECXUTL1(DT)
 | 
|---|
| 42 |  I ECLDT=$$FMADD^XLFDT($P(X,U,3),-1) D MSG Q
 | 
|---|
| 43 |  ;check if extract already queued to run
 | 
|---|
| 44 |  I $P(ECDATA,"^",6) D  Q
 | 
|---|
| 45 |  .F J=1:1 S X=$P($T(WARN+J),";",3,300) Q:X="QUIT"  W !,?5,X
 | 
|---|
| 46 |  .S DIR(0)="YA",DIR("A")="Do you wish to proceed? ",DIR("B")="N" K DIRUT,DUOUT,DTOUT
 | 
|---|
| 47 |  .D ^DIR K DIR
 | 
|---|
| 48 |  .I Y D QUEUE
 | 
|---|
| 49 |  D QUEUE
 | 
|---|
| 50 |  Q
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 | QUEUE ;queue thru taskmanager
 | 
|---|
| 53 |  N ZTIO,ZTRTN,ZTDESC,ZTDTH,OUT,MONTH
 | 
|---|
| 54 |  D MES^XPDUTL(" ")
 | 
|---|
| 55 |  S OUT=0
 | 
|---|
| 56 |  F  D  Q:OUT
 | 
|---|
| 57 |  .D MES^XPDUTL(" ")
 | 
|---|
| 58 |  .S %DT="AEXR",%DT(0)=$$NOW^XLFDT+.0002,%DT("A")="Queue to run at what date/time?  "
 | 
|---|
| 59 |  .D ^%DT K %DT
 | 
|---|
| 60 |  .S ECD=Y
 | 
|---|
| 61 |  .I ECD<0 S OUT=1
 | 
|---|
| 62 |  .I $E(ECD,6,7)>28 D  Q
 | 
|---|
| 63 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 64 |  ..D MES^XPDUTL("Monthly extracts must be queued for a date not greater than the 28th.")
 | 
|---|
| 65 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 66 |  .S OUT=1
 | 
|---|
| 67 |  I ECD>DT D
 | 
|---|
| 68 |  .S:'$D(ECINST) ECINST=+$P(^ECX(728,1,0),U)
 | 
|---|
| 69 |  .S ECXINST=ECINST
 | 
|---|
| 70 |  .K ECXDIC S DA=ECINST,DIC="^DIC(4,",DIQ(0)="I",DIQ="ECXDIC",DR=".01;99"
 | 
|---|
| 71 |  .D EN^DIQ1 S ECINST=$G(ECXDIC(4,DA,99,"I")) K DIC,DIQ,DA,DR,ECXDIC
 | 
|---|
| 72 |  .;get last date for all extracts except prosthetics
 | 
|---|
| 73 |  .I ECGRP'="PRO" D
 | 
|---|
| 74 |  ..S ECLDT=$S($D(^ECX(728,1,ECNODE)):$P(^(ECNODE),U,ECPIECE),1:2610624)
 | 
|---|
| 75 |  .;get last date for prosthetics
 | 
|---|
| 76 |  .I ECGRP="PRO" D
 | 
|---|
| 77 |  ..S ECLDT=""
 | 
|---|
| 78 |  ..S ECXDA1=$O(^ECX(728,0))
 | 
|---|
| 79 |  ..I $D(^ECX(728,ECXDA1,1,ECXINST,0)) S ECLDT=$P(^ECX(728,ECXDA1,1,ECXINST,0),U,2)
 | 
|---|
| 80 |  .;ecldt should be valid so continue
 | 
|---|
| 81 |  .I ECLDT D  Q:'$G(Y)  Q:$D(DIRUT)
 | 
|---|
| 82 |  ..S ECFDT=$$LASTMON(ECD)
 | 
|---|
| 83 |  ..;change to 1st day of month
 | 
|---|
| 84 |  ..S $E(ECFDT,6,7)="01"
 | 
|---|
| 85 |  ..S ECDIF=$$FMDIFF^XLFDT(ECFDT,ECLDT)
 | 
|---|
| 86 |  ..Q:ECDIF=1
 | 
|---|
| 87 |  ..S Y=$E(ECFDT,1,5)_"00" D DD^%DT S MONTH=Y K Y
 | 
|---|
| 88 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 89 |  ..D MES^XPDUTL("The last date for the "_ECHEAD_" extract was "_$$FMTE^XLFDT(ECLDT)_".")
 | 
|---|
| 90 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 91 |  ..D MES^XPDUTL("When the extract is run using the queue date/time you supplied, data")
 | 
|---|
| 92 |  ..D MES^XPDUTL("for the month of "_MONTH_" will be extracted.")
 | 
|---|
| 93 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 94 |  ..I ECDIF>1 D MES^XPDUTL("It appears that there is a period of time for which data will not be extracted.")
 | 
|---|
| 95 |  ..I ECDIF<0 D MES^XPDUTL("It appears that you may be duplicating previously extracted data.")
 | 
|---|
| 96 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 97 |  ..S DIR(0)="YA",DIR("A")="Do you wish to proceed? ",DIR("B")="N" K DIRUT,DUOUT,DTOUT
 | 
|---|
| 98 |  ..D ^DIR K DIR
 | 
|---|
| 99 |  .S ZTRTN="QUE^"_ECROU,ZTDESC=ECPACK_" EXTRACT",ZTIO="",ZTDTH=ECD
 | 
|---|
| 100 |  .D ^%ZTLOAD
 | 
|---|
| 101 |  .I $G(ZTSK) D
 | 
|---|
| 102 |  ..S $P(^ECX(727.1,ECDA,0),"^",6)=1
 | 
|---|
| 103 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 104 |  ..D MES^XPDUTL("Request queued as Task #"_ZTSK)
 | 
|---|
| 105 |  ..D MES^XPDUTL("with automatic monthly requeue.")
 | 
|---|
| 106 |  ..D MES^XPDUTL(" ")
 | 
|---|
| 107 |  ..I $E(IOST)="C" D
 | 
|---|
| 108 |  ...S SS=22-$Y F JJ=1:1:SS W !
 | 
|---|
| 109 |  ...S DIR(0)="E" W ! D ^DIR K DIR
 | 
|---|
| 110 |  K ECD,ECDA,ECDATA,ECDIF,ECF,ECFDT,ECFILE,ECGRP,ECHEAD,ECLDT,ECPIECE,ECPACK,ECROU,ECINST,ECNODE,ECXDA1,ECXINST
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 | WARN ;
 | 
|---|
| 114 |  ;;  
 | 
|---|
| 115 |  ;;It appears that the extract has already been queued to run.  If you make 
 | 
|---|
| 116 |  ;;changes now, there is a possibility that data for a particular date range
 | 
|---|
| 117 |  ;;may be omitted from the extract process and not transmitted to AAC.
 | 
|---|
| 118 |  ;; 
 | 
|---|
| 119 |  ;;Before continuing, you should carefully review the extract history for
 | 
|---|
| 120 |  ;;this extract.  You should also verify that this extract is not currently
 | 
|---|
| 121 |  ;;queued to run in the future.
 | 
|---|
| 122 |  ;;  
 | 
|---|
| 123 |  ;;QUIT
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 | MSG ;
 | 
|---|
| 126 |  D MES^XPDUTL(" ")
 | 
|---|
| 127 |  I ECLDT="" D
 | 
|---|
| 128 |  .D MES^XPDUTL("Automatic requeue may not be setup for a DSS extract")
 | 
|---|
| 129 |  .D MES^XPDUTL("which has never been previously generated.")
 | 
|---|
| 130 |  I ECLDT D
 | 
|---|
| 131 |  .D MES^XPDUTL("Automatic requeue may not be setup to generate the October")
 | 
|---|
| 132 |  .D MES^XPDUTL("extract of the current fiscal year.")
 | 
|---|
| 133 |  D MES^XPDUTL(" ")
 | 
|---|
| 134 |  D MES^XPDUTL("Please use the appropriate option on the Package Extracts")
 | 
|---|
| 135 |  D MES^XPDUTL("menu to generate the first monthly "_ECHEAD_" extract of")
 | 
|---|
| 136 |  D MES^XPDUTL("the current fiscal year.  Exiting...")
 | 
|---|
| 137 |  D MES^XPDUTL(" ")
 | 
|---|
| 138 |  I $E(IOST)="C" D
 | 
|---|
| 139 |  .S SS=22-$Y F JJ=1:1:SS W !
 | 
|---|
| 140 |  .S DIR(0)="E" W ! D ^DIR K DIR
 | 
|---|
| 141 |  Q
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | NEXTMON(ECXDATE) ;get date for date+(1 month)
 | 
|---|
| 144 |  ;input ECXDATE = FM date or date/time [required]
 | 
|---|
| 145 |  ;                where day of month is cannot be greater than 28
 | 
|---|
| 146 |  ;output returns FM date or date/time; next month, but same day of month
 | 
|---|
| 147 |  N DATE,ECXNEXT,X1,X2,X
 | 
|---|
| 148 |  S DATE=$P(ECXDATE,".")
 | 
|---|
| 149 |  I +$E(DATE,6,7)>28 S $E(DATE,6,7)="28"
 | 
|---|
| 150 |  S X1=DATE,X2=30 D C^%DTC
 | 
|---|
| 151 |  S ECXNEXT=X
 | 
|---|
| 152 |  I $E(ECXNEXT,6,7)'=$E(ECXDATE,6,7) S $E(ECXNEXT,6,7)=$E(ECXDATE,6,7)
 | 
|---|
| 153 |  I $P(ECXDATE,".",2) S $P(ECXNEXT,".",2)=$P(ECXDATE,".",2)
 | 
|---|
| 154 |  Q ECXNEXT
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 | LASTMON(ECXDATE) ;get last day of previous month
 | 
|---|
| 157 |  ;input ECXDATE = FM date or date/time [required]
 | 
|---|
| 158 |  ;output returns FM date; previous month, last day of month
 | 
|---|
| 159 |  N DATE,ECXLAST,X1,X2,X
 | 
|---|
| 160 |  S DATE=$P(ECXDATE,"."),DATE=$E(DATE,1,5)_"01"
 | 
|---|
| 161 |  S X1=DATE,X2=-1 D C^%DTC
 | 
|---|
| 162 |  S ECXLAST=X
 | 
|---|
| 163 |  Q ECXLAST
 | 
|---|