| 1 | PRCHRPTX ;AAC/JDM-PRCH ITEM HISTORY BY DATE RANGE ; [1/13/99 11:13am] | 
|---|
| 2 | V ;;5.1;IFCAP;;Oct 20, 2000 | 
|---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; <<<<<<<<<<<< Expected Variables In >>>>>>>>>>>>> | 
|---|
| 6 | ; PRC("SITE")=Stn.# (Mandatory) | 
|---|
| 7 | ; ITMNO;ITMNO=Item Master # | 
|---|
| 8 | ; <<<<<<<<<<<< Other Variables Used >>>>>>>>>>>>>> | 
|---|
| 9 | ; FR1 & TO1=Starting and ending FCP for sort | 
|---|
| 10 | ; FR2 & TO2=Starting & ending Stn.# for sort (Set from PRC("SITE") | 
|---|
| 11 | ; FR3 & TO3=Starting & ending Itm.# for sort (Set from ITMNO) | 
|---|
| 12 | ; FR4 & TO4=Starting & ending PO Date for sort | 
|---|
| 13 | ; ITMDESC=Set from file entry | 
|---|
| 14 | ; | 
|---|
| 15 | EN ;DISPLAY ITEM HISTORY | 
|---|
| 16 | ; | 
|---|
| 17 | XXLST S STN=PRC("SITE") | 
|---|
| 18 | S ABORT=0 | 
|---|
| 19 | W !,"STN: ",STN | 
|---|
| 20 | K DIR | 
|---|
| 21 | S DIR(0)="S^ALL:ALL FCPs;RANGE:RANGE of FCPs;SPECIFIC:SPECIFIC FCP" | 
|---|
| 22 | S DIR("A")="List Item Activity (by DATE RANGE) for" | 
|---|
| 23 | S DIR("B")="ALL" | 
|---|
| 24 | D ^DIR | 
|---|
| 25 | I X["^"!($D(DTOUT)) G EXIT | 
|---|
| 26 | S SCTL=X | 
|---|
| 27 | I $E(X,1)="A"!($E(X,1)="a") D  G XXITM | 
|---|
| 28 | .  S FR2=STN | 
|---|
| 29 | .  S TO2=STN | 
|---|
| 30 | .  S FR1=0 | 
|---|
| 31 | .  S TO1="99999 ZZZ" | 
|---|
| 32 | .  Q | 
|---|
| 33 | W !!,"START WITH FCP" | 
|---|
| 34 | I $E(SCTL,1)="S"!($E(SCTL,1)="s") W " and END WITH FCP" | 
|---|
| 35 | S DIC="^PRC(420,STN,1," | 
|---|
| 36 | S DIC(0)="QEAMNZ" | 
|---|
| 37 | D ^DIC | 
|---|
| 38 | I X="^" G EXIT | 
|---|
| 39 | I Y'>0 W !,"INVALID SELECTION.  TRY AGAIN ('^' TO ABORT)." G XXLST | 
|---|
| 40 | S X=$P(Y,U,2) | 
|---|
| 41 | S FR1=$P(X," ",1) | 
|---|
| 42 | S FR2=STN | 
|---|
| 43 | I $E(SCTL,1)="S"!($E(SCTL,1)="s") G XFCP | 
|---|
| 44 | ; | 
|---|
| 45 | TOFCP W !!,"END WITH FCP" | 
|---|
| 46 | D ^DIC | 
|---|
| 47 | I Y'>0 W !,"INVALID SELECTION.  TRY AGAIN ('^' TO ABORT)." G TOFCP | 
|---|
| 48 | I X="^" G EXIT | 
|---|
| 49 | ; | 
|---|
| 50 | XFCP S X=$P(Y,U,2) | 
|---|
| 51 | S TO1=$P(X," ",1) | 
|---|
| 52 | S TO2=STN | 
|---|
| 53 | ; | 
|---|
| 54 | XXITM I $D(ITMNO) D  G XXDT | 
|---|
| 55 | .  S FR3=ITMNO | 
|---|
| 56 | .  S TO3=ITMNO | 
|---|
| 57 | .  Q | 
|---|
| 58 | S DIC="^PRC(441," | 
|---|
| 59 | S DIC(0)="QEAMNZ" | 
|---|
| 60 | D ^DIC | 
|---|
| 61 | I X="^" G EXIT | 
|---|
| 62 | I Y'>0 W !,"INVALID SELECTION" G XXITM | 
|---|
| 63 | S ITMNO=$P(Y(0),U,1) | 
|---|
| 64 | S FR3=ITMNO | 
|---|
| 65 | S TO3=ITMNO | 
|---|
| 66 | ; | 
|---|
| 67 | XXDT S ITMDESC=$P(^PRC(441,ITMNO,0),U,2) | 
|---|
| 68 | D NOW^%DTC | 
|---|
| 69 | D YX^%DTC | 
|---|
| 70 | S DTX=$P(Y,"@",1) | 
|---|
| 71 | S DTX="JAN 1,"_$P(DTX,",",2) | 
|---|
| 72 | K DIR | 
|---|
| 73 | S DIR(0)="D" | 
|---|
| 74 | S DIR("A")="DATE ORDERED (BEGIN RANGE)" | 
|---|
| 75 | S DIR("B")=DTX | 
|---|
| 76 | D ^DIR | 
|---|
| 77 | I $D(DTOUT)!(X["^") G EXIT | 
|---|
| 78 | D ^%DT | 
|---|
| 79 | S FR4=Y | 
|---|
| 80 | K DIR | 
|---|
| 81 | S DIR(0)="D" | 
|---|
| 82 | S DIR("A")="DATE ORDERED   (END RANGE)   " | 
|---|
| 83 | S DIR("B")="TODAY" | 
|---|
| 84 | D ^DIR | 
|---|
| 85 | I $D(DTOUT)!(X["^") G EXIT | 
|---|
| 86 | D ^%DT | 
|---|
| 87 | S TO4=Y | 
|---|
| 88 | ; | 
|---|
| 89 | S NX=0 | 
|---|
| 90 | ; | 
|---|
| 91 | S ZTSAVE("FR1")="" | 
|---|
| 92 | S ZTSAVE("FR2")="" | 
|---|
| 93 | S ZTSAVE("FR3")="" | 
|---|
| 94 | S ZTSAVE("FR4")="" | 
|---|
| 95 | S ZTSAVE("TO1")="" | 
|---|
| 96 | S ZTSAVE("TO2")="" | 
|---|
| 97 | S ZTSAVE("TO3")="" | 
|---|
| 98 | S ZTSAVE("TO4")="" | 
|---|
| 99 | S ZTSAVE("ITMNO")="" | 
|---|
| 100 | S ZTSAVE("ITMDESC")="" | 
|---|
| 101 | D EN^XUTMDEVQ("LOOPPD^PRCHRPTX","ITEM HISTORY Report by Date Range",.ZTSAVE,.%ZIS) | 
|---|
| 102 | I '$D(ZTSK) W ! G EXIT | 
|---|
| 103 | K ZTSK | 
|---|
| 104 | Q | 
|---|
| 105 | ; | 
|---|
| 106 | LOOPPD ; Set up to locate records to display. | 
|---|
| 107 | N FCPS,FCPE,STN,DATES,DATET,LNCT,ABORT,NX,SITFCPS,SITFCPE | 
|---|
| 108 | N FCP,COUNT,HDR,PG | 
|---|
| 109 | S PG=0 | 
|---|
| 110 | S FCPS=FR1 | 
|---|
| 111 | S FCPE=TO1 | 
|---|
| 112 | S STN=FR2 | 
|---|
| 113 | S ITMNO=FR3 | 
|---|
| 114 | S DATES=FR4 | 
|---|
| 115 | S DATET=TO4 | 
|---|
| 116 | S ABORT=0 | 
|---|
| 117 | S NX=0 | 
|---|
| 118 | S SITFCPS=STN_FCPS | 
|---|
| 119 | S SITFCPE=STN_FCPE | 
|---|
| 120 | ; | 
|---|
| 121 | LOOPPD1 ; Loop through file 441. | 
|---|
| 122 | ; | 
|---|
| 123 | ; 1.  Loop through Fund Control Point for PRC("SITE") | 
|---|
| 124 | ;      within one Item Master File Number. | 
|---|
| 125 | ; 2.  Loop through P.O. DATE (in reverse order). | 
|---|
| 126 | ; 3.  Loop through a single P.O. DATE to get file 442 PO NUMBER. | 
|---|
| 127 | ; | 
|---|
| 128 | ; These three nested loops will locate Purchase Orders to display. | 
|---|
| 129 | ; | 
|---|
| 130 | S FCP=0 | 
|---|
| 131 | S COUNT=0 | 
|---|
| 132 | ; | 
|---|
| 133 | ; Get FCP. | 
|---|
| 134 | ; | 
|---|
| 135 | F  S FCP=$O(^PRC(441,ITMNO,4,"B",FCP)) Q:FCP'>0  D  Q:ABORT=1 | 
|---|
| 136 | .  Q:STN'=$E(FCP,1,$L(STN)) | 
|---|
| 137 | .  Q:FCPS>0&((FCP<SITFCPS)!(FCP>SITFCPE)) | 
|---|
| 138 | .  ; | 
|---|
| 139 | .  ; Because DATE in "AC" x-reference is in reverse order(latest | 
|---|
| 140 | .  ; date first) the search must start after TO4, the ending PO date. | 
|---|
| 141 | .  ; | 
|---|
| 142 | .  S DATE=(9999999-DATET)-1 | 
|---|
| 143 | .  S NODATE=0 | 
|---|
| 144 | .  ; | 
|---|
| 145 | .  ; Starting a new FCP.  Force listing a header. | 
|---|
| 146 | .  ; | 
|---|
| 147 | .  K HDR | 
|---|
| 148 | .  ; | 
|---|
| 149 | .  ; Get DATE. | 
|---|
| 150 | .  ; | 
|---|
| 151 | .  F  D  Q:NODATE=1  Q:ABORT=1 | 
|---|
| 152 | .  .  S DATE=$O(^PRC(441,ITMNO,4,FCP,1,"AC",DATE)) | 
|---|
| 153 | .  .  I DATE'>0 S NODATE=1 Q | 
|---|
| 154 | .  .  S CKDATE=9999999-DATE | 
|---|
| 155 | .  .  ; | 
|---|
| 156 | .  .  ; See if date found is before FR4 (starting date). | 
|---|
| 157 | .  .  ; If true, there will be no more dates between FR4 and TO4. | 
|---|
| 158 | .  .  ; Set the flag to stop this loop through "AC". | 
|---|
| 159 | .  .  ; | 
|---|
| 160 | .  .  I CKDATE<DATES S NODATE=1 Q | 
|---|
| 161 | .  .  ; | 
|---|
| 162 | .  .  ; If the date found is after TO4 (ending date) there may be | 
|---|
| 163 | .  .  ; some dates between FR4 and TO4. | 
|---|
| 164 | .  .  ; | 
|---|
| 165 | .  .  Q:CKDATE>DATET | 
|---|
| 166 | .  .  S PO=0 | 
|---|
| 167 | .  .  ; | 
|---|
| 168 | .  .  ; Get PO NUMBER (may be more than one per DATE). | 
|---|
| 169 | .  .  ; | 
|---|
| 170 | .  .  F  S PO=$O(^PRC(441,ITMNO,4,FCP,1,"AC",DATE,PO)) Q:PO'>0  D  Q:ABORT=1 | 
|---|
| 171 | .  .  .  S POCK=$G(^PRC(442,PO,0)) | 
|---|
| 172 | .  .  .  Q:POCK']"" | 
|---|
| 173 | .  .  .  S COUNT=COUNT+1 | 
|---|
| 174 | .  .  .  D DISP | 
|---|
| 175 | .  .  .  Q | 
|---|
| 176 | .  .  Q | 
|---|
| 177 | .  Q | 
|---|
| 178 | Q | 
|---|
| 179 | ; | 
|---|
| 180 | DISP S LX=$O(^PRC(442,PO,2,"AE",ITMNO,0)) | 
|---|
| 181 | Q:LX'>0 | 
|---|
| 182 | S LXN0(LX)=$G(^PRC(442,PO,2,LX,0)) | 
|---|
| 183 | S LXN2(LX)=$G(^PRC(442,PO,2,LX,2)) | 
|---|
| 184 | S ND0=$G(^PRC(442,PO,0)) | 
|---|
| 185 | S ND1=$G(^PRC(442,PO,1)) | 
|---|
| 186 | S PONUM=$P(ND0,U,1) | 
|---|
| 187 | S PODTX=$P(ND1,U,15) | 
|---|
| 188 | S FCPX=$P(ND0,U,3) | 
|---|
| 189 | S VP=$P(ND1,U,1) | 
|---|
| 190 | S IMFX=$P(LXN0(LX),U,5) | 
|---|
| 191 | S QTY=$P(LXN0(LX),U,2) | 
|---|
| 192 | S UIP=$P(LXN0(LX),U,3) | 
|---|
| 193 | S ACST=$P(LXN0(LX),U,9) | 
|---|
| 194 | S QPR=+$P(LXN2(LX),U,8) | 
|---|
| 195 | S TCST=$P(LXN2(LX),U,1) | 
|---|
| 196 | S STNX=$P(PONUM,"-",1) | 
|---|
| 197 | S FCPX=$P(FCPX," ",1) | 
|---|
| 198 | S MAXL=IOSL-4 | 
|---|
| 199 | I '$D(LNCT) D  Q:ABORT=1 | 
|---|
| 200 | .  S LNCT=0 | 
|---|
| 201 | .  D HDR | 
|---|
| 202 | .  S HDR=1 | 
|---|
| 203 | .  Q | 
|---|
| 204 | I '$D(HDR)&(LNCT>9) D  Q:ABORT=1 | 
|---|
| 205 | .  S HDR=1 | 
|---|
| 206 | .  S LCNT=1 | 
|---|
| 207 | .  D HDR | 
|---|
| 208 | .  Q | 
|---|
| 209 | S LNCT=LNCT+3 | 
|---|
| 210 | D:LNCT>MAXL HDR | 
|---|
| 211 | S X=PODTX | 
|---|
| 212 | D H^%DTC | 
|---|
| 213 | D YX^%DTC | 
|---|
| 214 | S PODT=Y | 
|---|
| 215 | S UIPX=" " | 
|---|
| 216 | S VNDX=" " | 
|---|
| 217 | S:UIP'="" UIPX=$P(^PRCD(420.5,UIP,0),U,1) | 
|---|
| 218 | S:VP'=""&(VP'=0) VNDX=$P(^PRC(440,VP,0),U,1) | 
|---|
| 219 | S:ACST'["." ACST=ACST_".00" | 
|---|
| 220 | S:TCST'["." TCST=TCST_".00" | 
|---|
| 221 | S ACL=$L(ACST) | 
|---|
| 222 | S TCL=$L(TCST) | 
|---|
| 223 | S ACS2=$P(ACST,".",2) | 
|---|
| 224 | S TCS2=$P(TCST,".",2) | 
|---|
| 225 | F M=1:1:2 D | 
|---|
| 226 | .  S ACS2=ACS2_$E("00",1,2-$L(ACS2)) | 
|---|
| 227 | .  S TCS2=TCS2_$E("00",1,2-$L(TCS2)) | 
|---|
| 228 | .  Q | 
|---|
| 229 | S ACST=$P(ACST,".",1)_"."_ACS2 | 
|---|
| 230 | S TCST=$P(TCST,".",1)_"."_TCS2 | 
|---|
| 231 | S SP9="         " | 
|---|
| 232 | F M=1:1:9 D | 
|---|
| 233 | .  S ACST=$E(SP9,1,9-$L(ACST))_ACST | 
|---|
| 234 | .  S TCST=$E(SP9,1,9-$L(TCST))_TCST | 
|---|
| 235 | .  S QTY=$E(SP9,1,9-$L(QTY))_QTY | 
|---|
| 236 | .  S QPR=$E(SP9,1,9-$L(QPR))_QPR | 
|---|
| 237 | .  Q | 
|---|
| 238 | I ABORT=0 D | 
|---|
| 239 | .  W !!,PODT,?15,PONUM,?26,QPR,?38,UIPX,?48,ACST,?59,TCST,?70,QTY,!,VNDX | 
|---|
| 240 | .  S STATX=$P($G(^PRC(442,PO,7)),U,1) | 
|---|
| 241 | .  W:STATX=45 ?50,"Order Status=CANCELLED" | 
|---|
| 242 | .  Q | 
|---|
| 243 | Q | 
|---|
| 244 | ; | 
|---|
| 245 | MOFCP K DIR | 
|---|
| 246 | S DIR(0)="Y" | 
|---|
| 247 | S DIR("A")="Would you like to do another FCP Date-Range Listing for this item" | 
|---|
| 248 | S DIR("B")="NO" | 
|---|
| 249 | D ^DIR | 
|---|
| 250 | I $D(DTOUT)!(X["^")!(X["N")!(X="n") G EXIT | 
|---|
| 251 | G XXLST | 
|---|
| 252 | ; | 
|---|
| 253 | EXIT K CST,P2,ABORT | 
|---|
| 254 | D Q^PRCHRPT1 | 
|---|
| 255 | G EN^PRCHRPT1 | 
|---|
| 256 | ; | 
|---|
| 257 | CALCCST ; EP -- CALCULATES ACTUAL UNIT COST TO 2 DECIMALS | 
|---|
| 258 | S CST=$P(X,U,9) | 
|---|
| 259 | I CST'["." S CST=CST_"." | 
|---|
| 260 | S P2=$P(CST,".",2) | 
|---|
| 261 | I $L(P2)=0 S P2="00" | 
|---|
| 262 | I $L(P2)=1 S P2=P2_"0" | 
|---|
| 263 | I $L(P2)>2&($E(P2,3)>4) S $E(P2,2)=$E(P2,2)+1 | 
|---|
| 264 | I $L(P2)>2 S P2=$E(P2,1,2) | 
|---|
| 265 | S CST=$P(CST,".",1)_"."_P2 | 
|---|
| 266 | F J=1:1:10 I $L(CST)<10 S CST=" "_CST | 
|---|
| 267 | W CST | 
|---|
| 268 | Q | 
|---|
| 269 | ; | 
|---|
| 270 | HDR I $E(IOST)="C"&(LNCT'=0) W ! D PAUSE Q:ABORT=1 | 
|---|
| 271 | S FCPD=FCPX | 
|---|
| 272 | S PG=PG+1 | 
|---|
| 273 | S:FCPX>0 FCPD=$P(ND0,U,3) | 
|---|
| 274 | W @IOF,!!,"Item Number: ",ITMNO,?25,"Description: " | 
|---|
| 275 | W ITMDESC,?71,"Page ",PG | 
|---|
| 276 | W !?7,"SITE: ",STN,?25,"FCP: ",FCPD,!!,?26,"Quantity" | 
|---|
| 277 | W !,?26,"Previously",?38,"Unit of",?71,"Quantity" | 
|---|
| 278 | W !,"Date Ordered",?15,"PO Number",?26,"Received",?38,"Purchase" | 
|---|
| 279 | W ?48,"Unit Cost",?59,"Total Cost",?71,"Ordered",! | 
|---|
| 280 | F I=1:1:80 W "_" | 
|---|
| 281 | S LNCT=9 | 
|---|
| 282 | Q | 
|---|
| 283 | ; | 
|---|
| 284 | PAUSE ; Test for prompt to return or exit | 
|---|
| 285 | K DIR | 
|---|
| 286 | S ABORT=0 | 
|---|
| 287 | S DIR(0)="E" | 
|---|
| 288 | D ^DIR | 
|---|
| 289 | I Y=""!(Y=0) S ABORT=1 | 
|---|
| 290 | Q | 
|---|
| 291 | ; | 
|---|
| 292 | ASK Q:$E(IOST)="P" | 
|---|
| 293 | W !!,"Press RETURN to continue" | 
|---|
| 294 | R X:DTIME | 
|---|
| 295 | S ASK=1 | 
|---|
| 296 | Q | 
|---|