| 1 | PRCPRSOH ;WISC/RFJ/DAP/VAC-days of stock on hand report ; 10/19/06 9:09am
 | 
|---|
| 2 |  ;;5.1;IFCAP;**84,83,98**;Oct 20, 2000;Build 37
 | 
|---|
| 3 |  ;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;*83 Routine PRCPLO associated with PRC*5.1*83 is a modified copy of
 | 
|---|
| 6 |  ;this routine and any changes made to this routine should also be
 | 
|---|
| 7 |  ;considered for that routine as well.
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ;*98 Modified to show if Standard, On-Demand or Both
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  D ^PRCPUSEL Q:'$G(PRCP("I"))
 | 
|---|
| 12 |  N DATEEND,DATEENDD,DATESTRD,DATESTRT,DAYSLEFT,DIR,GROUPALL,PRCPDAYS,PRCPEND,PRCPSTRT,PRCPTYPE,TOTALDAY,X,X1,X2,Y
 | 
|---|
| 13 |  N ODIFLG,ODITEM,USEFLG
 | 
|---|
| 14 |  K X S X(1)="The Days Of Stock On Hand Report will print a list of items which have stock on hand less than or greater than a specified number of days."
 | 
|---|
| 15 |  D DISPLAY^PRCPUX2(40,79,.X)
 | 
|---|
| 16 |  K X S X(1)="Select the date range which should be used for calculating the daily usage. *** Select by month & year only. ***" D DISPLAY^PRCPUX2(2,40,.X)
 | 
|---|
| 17 |  D MONTHSEL^PRCPURS2 I '$G(DATEEND) Q
 | 
|---|
| 18 |  S X1=DATEEND,X2=DATESTRT D ^%DTC S TOTALDAY=X+1
 | 
|---|
| 19 |  S Y=DATEEND D DD^%DT S DATEENDD=Y,Y=DATESTRT D DD^%DT S DATESTRD=Y
 | 
|---|
| 20 |  W !?5,"-- TOTAL NUMBER OF DAYS: ",TOTALDAY
 | 
|---|
| 21 |  ;  select greater or less
 | 
|---|
| 22 |  K X S X(1)="Select the type of report: less than a specified number of days or greater than a specified number of days." D DISPLAY^PRCPUX2(2,40,.X)
 | 
|---|
| 23 |  S DIR(0)="S^1:LESS;2:GREATER",DIR("A")="Print items with GREATER or LESS than 'X' days stock on hand",DIR("B")="LESS"
 | 
|---|
| 24 |  D ^DIR S PRCPTYPE=+Y I 'PRCPTYPE Q
 | 
|---|
| 25 |  ;  select days
 | 
|---|
| 26 |  K X S X(1)="Select the number of days which the current stock on hand should be "_$S(PRCPTYPE=1:"LESS than",1:"GREATER than")_"." D DISPLAY^PRCPUX2(2,40,.X)
 | 
|---|
| 27 |  S DIR(0)="N^1:365",DIR("A")="Print items with stock on hand "_$S(PRCPTYPE=1:"less than",1:"greater than")_" DAYS",DIR("B")=30
 | 
|---|
| 28 |  D ^DIR S PRCPDAYS=+Y I 'PRCPDAYS Q
 | 
|---|
| 29 |  ;  whse sort
 | 
|---|
| 30 |  I PRCP("DPTYPE")="W" D  I '$D(PRCPSTRT) Q
 | 
|---|
| 31 |  .   K X S X(1)="Select the range of NSNs to display" D DISPLAY^PRCPUX2(2,40,.X)
 | 
|---|
| 32 |  .   D NSNSEL^PRCPURS0
 | 
|---|
| 33 |  ;  prim/seco sort
 | 
|---|
| 34 |  I PRCP("DPTYPE")'="W" D  I '$G(GROUPALL),'$O(^TMP($J,"PRCPURS1","YES",0)) W !,"*** NO GROUP CATEGORIES SELECTED !" Q
 | 
|---|
| 35 |  .   K X S X(1)="Select the Group Categories to display" D DISPLAY^PRCPUX2(2,40,.X)
 | 
|---|
| 36 |  .   D GROUPSEL^PRCPURS1(PRCP("I"))
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | ODIFLG ;*98 Set flag for Standard, On-Demand item or Both
 | 
|---|
| 39 |  S ODIFLG="W"
 | 
|---|
| 40 |  I PRCP("DPTYPE")'="W" S ODIFLG=$$ODIPROM^PRCPUX2(0)
 | 
|---|
| 41 |  Q:ODIFLG=0
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  S %ZIS="Q" D ^%ZIS Q:POP  I $D(IO("Q")) D  Q
 | 
|---|
| 44 |  .   S ZTDESC="Days of Stock On Hand Report",ZTRTN="DQ^PRCPRSOH"
 | 
|---|
| 45 |  .   S ZTSAVE("^TMP($J,""PRCPURS1"",")=""
 | 
|---|
| 46 |  .   S ZTSAVE("DATE*")="",ZTSAVE("GROUP*")="",ZTSAVE("PRCP*")="",ZTSAVE("TOTALDAY")="",ZTSAVE("ZTREQ")="@",ZTSAVE("O*")="",ZTSAVE("U*")=""
 | 
|---|
| 47 |  .   D ^%ZTLOAD
 | 
|---|
| 48 |  W !!,"<*> please wait <*>"
 | 
|---|
| 49 | DQ ;  queue starts here
 | 
|---|
| 50 |  N AVERAGE,DATE,GROUP,GROUPNM,ITEMDA,ITEMDATA,NSN,ONHAND,TOTAL,X,Y
 | 
|---|
| 51 |  K ^TMP($J,"PRCPRSOH")
 | 
|---|
| 52 |  S ITEMDA=0 F  S ITEMDA=$O(^PRCP(445,PRCP("I"),1,ITEMDA)) Q:'ITEMDA  S ITEMDATA=$G(^(ITEMDA,0)) I ITEMDATA'="" D
 | 
|---|
| 53 |  .; Select item based on selection criteria
 | 
|---|
| 54 |  .   S USEFLG="Y"
 | 
|---|
| 55 |  .   I PRCP("DPTYPE")'="W" D
 | 
|---|
| 56 |  .   .  S ODITEM=$$ODITEM^PRCPUX2(PRCP("I"),ITEMDA)
 | 
|---|
| 57 |  .   .  I ODIFLG=1&(ODITEM="Y") S USEFLG="N"
 | 
|---|
| 58 |  .   .  I ODIFLG=2&(ODITEM'="Y") S USEFLG="N"
 | 
|---|
| 59 |  .   .  I ODIFLG=3 S USEFLG="Y"
 | 
|---|
| 60 |  .   I USEFLG="N" Q
 | 
|---|
| 61 |  .   I $$REUSABLE^PRCPU441(ITEMDA) Q
 | 
|---|
| 62 |  .   ;  calculate total usage between dates
 | 
|---|
| 63 |  .   S DATE=$E(DATESTRT,1,5)-.01,TOTAL=0 F  S DATE=$O(^PRCP(445,PRCP("I"),1,ITEMDA,2,DATE)) Q:'DATE!(DATE>$E(DATEEND,1,5))  S TOTAL=TOTAL+$P($G(^(DATE,0)),"^",2)
 | 
|---|
| 64 |  .   S AVERAGE=$J(TOTAL/TOTALDAY,0,2),ONHAND=$P(ITEMDATA,"^",7)+$P(ITEMDATA,"^",19)
 | 
|---|
| 65 |  .   S DAYSLEFT=$S('AVERAGE&(ONHAND):9999999,'AVERAGE:0,1:ONHAND/AVERAGE\1)
 | 
|---|
| 66 |  .   I PRCPTYPE=1,DAYSLEFT'<PRCPDAYS Q
 | 
|---|
| 67 |  .   I PRCPTYPE=2,DAYSLEFT'>PRCPDAYS Q
 | 
|---|
| 68 |  .   ;  sort for whse
 | 
|---|
| 69 |  .   I PRCP("DPTYPE")="W" D  Q
 | 
|---|
| 70 |  .   .   S NSN=$$NSN^PRCPUX1(ITEMDA) S:NSN="" NSN=" "
 | 
|---|
| 71 |  .   .   I $E(NSN,1,$L(PRCPSTRT))'=PRCPSTRT,$E(NSN,1,$L(PRCPEND))'=PRCPEND I NSN']PRCPSTRT!(PRCPEND']NSN) Q
 | 
|---|
| 72 |  .   .   S ^TMP($J,"PRCPRSOH",NSN,ITEMDA)=TOTAL_"^"_AVERAGE_"^"_ONHAND_"^"_$P(DAYSLEFT,".")_"^"_$P(ITEMDATA,"^",27)
 | 
|---|
| 73 |  .   ;  sort for primary and secondary
 | 
|---|
| 74 |  .   S GROUP=+$P(ITEMDATA,"^",21)
 | 
|---|
| 75 |  .   I 'GROUP,'$G(GROUPALL) Q
 | 
|---|
| 76 |  .   I $G(GROUPALL),$D(^TMP($J,"PRCPURS1","NO",GROUP)) Q
 | 
|---|
| 77 |  .   I '$G(GROUPALL),'$D(^TMP($J,"PRCPURS1","YES",GROUP)) Q
 | 
|---|
| 78 |  .   S GROUPNM=$$GROUPNM^PRCPEGRP(GROUP)
 | 
|---|
| 79 |  .   I GROUPNM'="" S GROUPNM=$E(GROUPNM,1,20)_" (#"_GROUP_")"
 | 
|---|
| 80 |  .   S:GROUPNM="" GROUPNM=" "
 | 
|---|
| 81 |  .   S ^TMP($J,"PRCPRSOH",GROUPNM,$E($$DESCR^PRCPUX1(PRCP("I"),ITEMDA),1,15),ITEMDA)=TOTAL_"^"_AVERAGE_"^"_ONHAND_"^"_$P(DAYSLEFT,".")_"^"_$P(ITEMDATA,"^",27)
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  D PRINT^PRCPRSO1
 | 
|---|
| 84 |  K ^TMP($J,"PRCPURS1"),^TMP($J,"PRCPRSOH")
 | 
|---|
| 85 |  D ^%ZISC
 | 
|---|
| 86 |  Q
 | 
|---|