| [613] | 1 | PRCPLO ;WOIFO/RLL/VAC/DAP-days of stock on hand report ; 2/26/07 1:53pm
 | 
|---|
 | 2 |  ;;5.1;IFCAP;**83,98**;Oct 20, 2000;Build 37
 | 
|---|
 | 3 |  ;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
 | 4 |  ; Note: This routine was copied from PRCPRSOH
 | 
|---|
 | 5 |  ;*98 Code modification made to handle STD and ODI breakouts
 | 
|---|
 | 6 |  ;
 | 
|---|
 | 7 |  Q
 | 
|---|
 | 8 | ENT ; Entry Point to run Program
 | 
|---|
 | 9 |  L +^PRCP(446.7,"STATUS"):3 I $T=0 S PRCPMSG(1)="Error encountered when attempting to run CLO GIP Reports due to other CLRS extracts in progress, please try again later." D MAIL^PRCPLO3 Q
 | 
|---|
 | 10 |  N TOSTDCNT,TOODICNT,TOALLCNT,TOTCNT,VALUES
 | 
|---|
 | 11 |  D PRCPRINV  ; Run the logic from PRCPRSOH, get params
 | 
|---|
 | 12 |  D BLDFIL  ; Build the output data
 | 
|---|
 | 13 |  D GETVAL  ; Set the ^DIE Entries in 446.7
 | 
|---|
 | 14 |  L -^PRCP(446.7,"STATUS")
 | 
|---|
 | 15 |  ;
 | 
|---|
 | 16 |  K ^TMP($J,"PRCPSOH") ;kill off tmp data
 | 
|---|
 | 17 |  K ^TMP($J,"PRCPLO")  ;kill off tmp data
 | 
|---|
 | 18 |  K ^TMP($J,"PRCPSOH2") ; kill off ODI tmp data
 | 
|---|
 | 19 |  K ^TMP($J,"PRCPLO2") ;kill off ODI tmp data
 | 
|---|
 | 20 |  Q
 | 
|---|
 | 21 |  ;
 | 
|---|
 | 22 |  ;
 | 
|---|
 | 23 | PRCPRINV ; run INV Point
 | 
|---|
 | 24 |  N CLRSFLAG
 | 
|---|
 | 25 |  S CLRSFLAG="SOH"
 | 
|---|
 | 26 |  D GETIPT^PRCPLO1
 | 
|---|
 | 27 |  Q
 | 
|---|
 | 28 | EN1 ; Added return from PRCPLO1
 | 
|---|
 | 29 |  ; Q
 | 
|---|
 | 30 |  N DATEEND,DATEENDD,DATESTRD,DATESTRT,DAYSLEFT,DIR,GROUPALL,PRCPDAYS,PRCPEND,PRCPSTRT,PRCPTYPE,TOTALDAY,X,X1,X2,Y,MNT,TODAY
 | 
|---|
 | 31 |  N ODICNT,ODIDOL,ODIFLAG,ODIFLG,STDCNT,STDDOL
 | 
|---|
 | 32 |  ;
 | 
|---|
 | 33 |  ; *83 The following was edited to always enter the LAST DAY
 | 
|---|
 | 34 |  ; of the previous month as the end date. End date for Oct 31, 2005
 | 
|---|
 | 35 |  ; in FM 3051031, can also use 3051100 equivalent for date sort
 | 
|---|
 | 36 |  ; this way, you do not have to handle months w/ 28, 29, 30 or 31 days
 | 
|---|
 | 37 |  D NOW^%DTC S TODAY=X,Y=$E(X,1,3),MNT=$E(X,4,5)
 | 
|---|
 | 38 |  S MNT=+(MNT)
 | 
|---|
 | 39 |  S MNT=MNT-1
 | 
|---|
 | 40 |  I MNT=0 S MNT=12,Y=Y-1
 | 
|---|
 | 41 |  I $L(MNT)=1 S MNT=0_MNT
 | 
|---|
 | 42 |  ;
 | 
|---|
 | 43 |  ; *83 Added day logic to handle month/leap year, etc.
 | 
|---|
 | 44 |  N DAYS,CKF
 | 
|---|
 | 45 |  S DAYS=$P("31^28^31^30^31^30^31^31^30^31^30^31",U,+(MNT))
 | 
|---|
 | 46 |  S DATEEND=Y_MNT_DAYS
 | 
|---|
 | 47 |  I DAYS=28  D
 | 
|---|
 | 48 |  . S CKF=(17+$E(DATEEND))_$E(DATEEND,2,3)
 | 
|---|
 | 49 |  . S DAYS=$S(CKF#400=0:29,(CKF#4=0&(CKF#100'=0)):29,1:28)
 | 
|---|
 | 50 |  . S DATEEND=Y_MNT_DAYS
 | 
|---|
 | 51 |  . Q
 | 
|---|
 | 52 |  ; S DATEEND=Y_MNT_"00"
 | 
|---|
 | 53 |  ; *83 The following was edited to always enter a 90 day previous
 | 
|---|
 | 54 |  ; to current date of report run (check param file, could change)
 | 
|---|
 | 55 |  ; for the DATESTRT. Once DATEEND and DATESTRT are determined, we
 | 
|---|
 | 56 |  ; can use the existing code to set the other variables
 | 
|---|
 | 57 |  S X1=TODAY
 | 
|---|
 | 58 |  ; *83 Report range supplied by site parameter and defaulted to 180
 | 
|---|
 | 59 |  S X2=$$GET^XPAR("SYS","PRCPLO REPORT RANGE",1,"Q")
 | 
|---|
 | 60 |  I X2="" S X2=180
 | 
|---|
 | 61 |  S X2=(X2*-1)
 | 
|---|
 | 62 |  D C^%DTC S DATESTRT=$E(X,1,5)_"01"
 | 
|---|
 | 63 |  ; DATEEND and DATESTRT are set above, pass them to existing
 | 
|---|
 | 64 |  ; logic below to set remaining variables
 | 
|---|
 | 65 |  S X1=DATEEND,X2=DATESTRT D ^%DTC S TOTALDAY=X+1
 | 
|---|
 | 66 |  S Y=DATEEND D DD^%DT S DATEENDD=Y,Y=DATESTRT D DD^%DT S DATESTRD=Y
 | 
|---|
 | 67 |  ;
 | 
|---|
 | 68 |  ;*83 Set PRCPTYPE=2 (always GREATER)
 | 
|---|
 | 69 |  S PRCPTYPE=2
 | 
|---|
 | 70 |  ;
 | 
|---|
 | 71 |  ;*83 PRCPDAYS is set based on value of CLRS GREATER THAN RANGE parameter
 | 
|---|
 | 72 |  ;if no value is presented in the parameter, it will default to 90
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 |  S PRCPDAYS=$$GET^XPAR("SYS","PRCPLO GREATER THAN RANGE",1,"Q")
 | 
|---|
 | 75 |  I PRCPDAYS="" S PRCPDAYS=90
 | 
|---|
 | 76 |  ;
 | 
|---|
 | 77 |  ;*83 Return PRCPSTRT="" and PRCPEND=""
 | 
|---|
 | 78 |  I PRCP("DPTYPE")="W" D
 | 
|---|
 | 79 |  . S PRCPSTRT="",PRCPEND=""
 | 
|---|
 | 80 |  ;
 | 
|---|
 | 81 |  ;*83 RETURN GROUPALL=1 to select all groups
 | 
|---|
 | 82 |  I PRCP("DPTYPE")'="W" D
 | 
|---|
 | 83 |  .   S GROUPALL=1
 | 
|---|
 | 84 |  . ; finished adding variables
 | 
|---|
 | 85 |  ;
 | 
|---|
 | 86 | DQ ;  queue starts here
 | 
|---|
 | 87 |  N AVERAGE,DATE,GROUP,GROUPNM,ITEMDA,ITEMDATA,NSN,ONHAND,TOTAL,X,Y
 | 
|---|
 | 88 |  K ^TMP($J,"PRCPRSOH")
 | 
|---|
 | 89 |  S ITEMDA=0 F  S ITEMDA=$O(^PRCP(445,PRCP("I"),1,ITEMDA)) Q:'ITEMDA  S ITEMDATA=$G(^(ITEMDA,0)) I ITEMDATA'="" D
 | 
|---|
 | 90 |  .   S ODIFLG=1  S ODIFLAG=$$ODITEM^PRCPUX2(PRCP("I"),ITEMDA)
 | 
|---|
 | 91 |  .   I ODIFLAG="Y" S ODIFLG=2
 | 
|---|
 | 92 |  .   S TOTCNT(PRCP("I"),ODIFLG)=+$G(TOTCNT(PRCP("I"),ODIFLG))+1
 | 
|---|
 | 93 |  .   I $$REUSABLE^PRCPU441(ITEMDA) Q
 | 
|---|
 | 94 |  .   ;  calculate total usage between dates
 | 
|---|
 | 95 |  .   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)
 | 
|---|
 | 96 |  .   S AVERAGE=$J(TOTAL/TOTALDAY,0,2),ONHAND=$P(ITEMDATA,"^",7)+$P(ITEMDATA,"^",19)
 | 
|---|
 | 97 |  .   S DAYSLEFT=$S('AVERAGE&(ONHAND):9999999,'AVERAGE:0,1:ONHAND/AVERAGE\1)
 | 
|---|
 | 98 |  .   I PRCPTYPE=1,DAYSLEFT'<PRCPDAYS Q
 | 
|---|
 | 99 |  .   I PRCPTYPE=2,DAYSLEFT'>PRCPDAYS Q
 | 
|---|
 | 100 |  .   ;  sort for whse
 | 
|---|
 | 101 |  .   I PRCP("DPTYPE")="W" D  Q
 | 
|---|
 | 102 |  .   .   S NSN=$$NSN^PRCPUX1(ITEMDA) S:NSN="" NSN=" "
 | 
|---|
 | 103 |  .   .   I $E(NSN,1,$L(PRCPSTRT))'=PRCPSTRT,$E(NSN,1,$L(PRCPEND))'=PRCPEND I NSN']PRCPSTRT!(PRCPEND']NSN) Q
 | 
|---|
 | 104 |  .   .   ; S ^TMP($J,"PRCPRSOH",NSN,ITEMDA)=TOTAL_"^"_AVERAGE_"^"_ONHAND_"^"_$P(DAYSLEFT,".")_"^"_$P(ITEMDATA,"^",27)
 | 
|---|
 | 105 |  .   .   N ITMCHK
 | 
|---|
 | 106 |  .   .   S ITMCHK=0,ITMCHK=$O(^PRCP(445,PRCP("I"),1,ITMCHK))
 | 
|---|
 | 107 |  .   .   Q:ITMCHK=""!(+(ITMCHK)<1)
 | 
|---|
 | 108 |  .   .   Q:+(ITMCHK)<1  ; made it to x-ref
 | 
|---|
 | 109 |  .   .   D BLDTMP
 | 
|---|
 | 110 |  .   ;98* Accumulate count information
 | 
|---|
 | 111 |  .   S VALUES(PRCP("I"),ODIFLG)=+$G(VALUES(PRCP("I"),ODIFLG))+1
 | 
|---|
 | 112 |  .   ;  sort for primary and secondary
 | 
|---|
 | 113 |  .   S GROUP=+$P(ITEMDATA,"^",21)
 | 
|---|
 | 114 |  .   I 'GROUP,'$G(GROUPALL) Q
 | 
|---|
 | 115 |  .   I $G(GROUPALL),$D(^TMP($J,"PRCPURS1","NO",GROUP)) Q
 | 
|---|
 | 116 |  .   I '$G(GROUPALL),'$D(^TMP($J,"PRCPURS1","YES",GROUP)) Q
 | 
|---|
 | 117 |  .   S GROUPNM=$$GROUPNM^PRCPEGRP(GROUP)
 | 
|---|
 | 118 |  .   I GROUPNM'="" S GROUPNM=$E(GROUPNM,1,20)_" (#"_GROUP_")"
 | 
|---|
 | 119 |  .   S:GROUPNM="" GROUPNM=" "
 | 
|---|
 | 120 |  .   ;*83,  Create TMP structure for Report
 | 
|---|
 | 121 |  .   N ITMCHK
 | 
|---|
 | 122 |  .   S ITMCHK=0,ITMCHK=$O(^PRCP(445,PRCP("I"),1,ITMCHK))
 | 
|---|
 | 123 |  .   Q:ITMCHK=""!(+(ITMCHK)<1)
 | 
|---|
 | 124 |  .   Q:ITMCHK<1  ; made it to x-ref
 | 
|---|
 | 125 |  .   D BLDTMP
 | 
|---|
 | 126 |  .   Q
 | 
|---|
 | 127 |  Q
 | 
|---|
 | 128 |  ;
 | 
|---|
 | 129 | BLDTMP ;*83 Build ^TMP Structure for Report Server
 | 
|---|
 | 130 |  ;
 | 
|---|
 | 131 |  N INVTYPE,ITEMDESC,CSTCTR,INDAT,NUMLNIT,DATRN,DATRN1,INVPTID
 | 
|---|
 | 132 |  N CSTC1,CSTC2,CSTC3,CSCE1,CSCE2,V4TR,V4TR1
 | 
|---|
 | 133 |  ;
 | 
|---|
 | 134 |  S DATRN=$$FMTE^XLFDT(+DATEEND)
 | 
|---|
 | 135 |  S DATRN1=$P(DATRN," ",1)_","_$P(DATRN," ",3)
 | 
|---|
 | 136 |  S ITEMDESC=$E($$DESCR^PRCPUX1(PRCP("I"),ITEMDA),1,15)  ; item Desc
 | 
|---|
 | 137 |  I ITEMDESC="" S ITEMDESC="No Item Desc"
 | 
|---|
 | 138 |  Q:ITEMDA=""!(+(ITEMDA)<1)
 | 
|---|
 | 139 |  ;
 | 
|---|
 | 140 |  S NUMLNIT=1  ; set to 1 for each line item.
 | 
|---|
 | 141 |  S INVTYPE=PRCP("DPTYPE")
 | 
|---|
 | 142 |  I INVTYPE="" S INVTYPE="No Inv Type"
 | 
|---|
 | 143 |  S INDAT=$G(PRCP("PAR"))
 | 
|---|
 | 144 |  S INVPTID=PRCP("I")  ; inv point id #
 | 
|---|
 | 145 |  ; Cost Center logic
 | 
|---|
 | 146 |  ; Get ^PRCP(445,INVPTID,0) 7th piece (int. Cost Center #)
 | 
|---|
 | 147 |  ; Get ^PRCD(420.1,IntCstCtr,0) 1st piece (external format)
 | 
|---|
 | 148 |  S CSTC1=$G(^PRCP(445,INVPTID,0)),CSTC2=$P(CSTC1,"^",7),CSTC3=$P(CSTC1,"^",3)
 | 
|---|
 | 149 |  S V4TR=$P(CSTC1,"^",1),V4TR1=$P(V4TR,"-",2,99)  ; *83 look up name
 | 
|---|
 | 150 |  S V4TR1=$TR(V4TR1,"*","|")  ; $TR name to replace "*"'s with "|"'s
 | 
|---|
 | 151 |  I CSTC2'="" S CSCE1=$G(^PRCD(420.1,CSTC2,0)),CSCE2=$P(CSCE1,"^",1)
 | 
|---|
 | 152 |  I CSTC2="" S CSCE2="No Cost Center"
 | 
|---|
 | 153 |  ; *83, Set 5th Node from ITEMDESC to ITEMDA
 | 
|---|
 | 154 |  S ^TMP($J,"PRCPLO",V3,INVPTID,ITEMDA)=V3_"*"_DATRN1_"*"_INVPTID_"*"_V4TR1_"*"_NUMLNIT_"*"_$P(ITEMDATA,"^",27)_"*"_CSCE2_"*"_INVTYPE
 | 
|---|
 | 155 |  ; *98 Split information for ODI and Standard
 | 
|---|
 | 156 |  S ^TMP($J,"PRCPLO2",V3,INVPTID,ITEMDA,ODIFLG)=+$G(^TMP($J,"PRCPLO2",V3,INVPTID,ITEMDA,ODIFLG))+$P(ITEMDATA,"^",27)
 | 
|---|
 | 157 |  Q
 | 
|---|
 | 158 | BLDFIL ; Build output file
 | 
|---|
 | 159 |  N IN1,IN2,IN3,IN4,IN5,OLPV,NWPV,INDDAT,TOTDOL,LNDOL,CSTCTR,LNCT,PRCPDX,INPTVAL,POINT,STID,DTTM,INVVTYP,INVPTLN
 | 
|---|
 | 160 |  S IN1=0,IN2=0,IN3=0,IN4=0,IN5="INVPT",INDDAT=0,OLPV=0,NWPV=0,LNCT=0,CSTCTR=0,TOTDOL=0,LNDOL=0,INVPTLN=0
 | 
|---|
 | 161 |  S STDCNT=0,ODICNT=0
 | 
|---|
 | 162 |  S (STDDOL,ODIDOL)=0
 | 
|---|
 | 163 |  F  S IN1=$O(^TMP($J,"PRCPLO",IN1)) Q:IN1=""  D
 | 
|---|
 | 164 |  . ;S (STDDOL,ODIDOL)=0
 | 
|---|
 | 165 |  . F  S IN2=$O(^TMP($J,"PRCPLO",IN1,IN2)) Q:IN2=""  D
 | 
|---|
 | 166 |  . . I IN5'="INVPT"  D  ; init for first time through
 | 
|---|
 | 167 |  . . . S INVPTLN=+$P($G(^PRCP(445,+INPTVAL,1,0)),"^",4)
 | 
|---|
 | 168 |  . . . S TOSTDCNT=+$G(TOTCNT(IN2,1)),TOODICNT=+$G(TOTCNT(IN2,2)),TOALLCNT=TOSTDCNT+TOODICNT
 | 
|---|
 | 169 |  . . . S PRCPDX=STID_"*"_DTTM_"*"_INPTVAL_"*"_POINT_"*"_INVVTYP_"*"_TOTDOL_"*"_IN4_"*"_INVPTLN_"*"_CSTCTR
 | 
|---|
 | 170 |  . . . ; set up new ^TMP($J NODE to store totals for ^DIE set
 | 
|---|
 | 171 |  . . . S ^TMP($J,"PRCPSOH",+(STID_INPTVAL))=PRCPDX
 | 
|---|
 | 172 |  . . . S STDCNT=+$G(VALUES(INPTVAL,1)),ODICNT=+$G(VALUES(INPTVAL,2))
 | 
|---|
 | 173 |  . . . S TOSTDCNT=+$G(TOTCNT(INPTVAL,1)),TOODICNT=+$G(TOTCNT(INPTVAL,2))
 | 
|---|
 | 174 |  . . . S TOALLCNT=TOSTDCNT+TOODICNT
 | 
|---|
 | 175 |  . . . S ^TMP($J,"PRCPSOH2",+(STID_INPTVAL))=STDDOL_"*"_ODIDOL_"*"_(STDDOL+ODIDOL)_"*"_STDCNT_"*"_ODICNT_"*"_(STDCNT+ODICNT)_"*"_TOSTDCNT_"*"_TOODICNT_"*"_TOALLCNT
 | 
|---|
 | 176 |  . . . S IN4=0  ; reset to 0, begin counting Line items for INVPT
 | 
|---|
 | 177 |  . . . S TOTDOL=0
 | 
|---|
 | 178 |  . . . S LNDOL=0
 | 
|---|
 | 179 |  . . . S PRCPDX=""
 | 
|---|
 | 180 |  . . . S CSTCTR=""
 | 
|---|
 | 181 |  . . . S (STDDOL,ODIDOL)=0
 | 
|---|
 | 182 |  . . F  S IN3=$O(^TMP($J,"PRCPLO",IN1,IN2,IN3)) Q:IN3=""  D
 | 
|---|
 | 183 |  . . . S INDDAT=$G(^TMP($J,"PRCPLO",IN1,IN2,IN3))
 | 
|---|
 | 184 |  . . . S STID=$P(INDDAT,"*",1)
 | 
|---|
 | 185 |  . . . S DTTM=$P(INDDAT,"*",2)
 | 
|---|
 | 186 |  . . . S POINT=$P(INDDAT,"*",4)
 | 
|---|
 | 187 |  . . . S INPTVAL=$P(INDDAT,"*",3)  ; Inv Point ID# for DIE Set
 | 
|---|
 | 188 |  . . . S CSTCTR=$P(INDDAT,"*",7)
 | 
|---|
 | 189 |  . . . S LNDOL=$P(INDDAT,"*",6)
 | 
|---|
 | 190 |  . . . S INVVTYP=$P(INDDAT,"*",8)
 | 
|---|
 | 191 |  . . . S TOTDOL=TOTDOL+LNDOL
 | 
|---|
 | 192 |  . . . S IN4=IN4+1  ; Count # of line items in Inv Pt
 | 
|---|
 | 193 |  . . . S IN5=IN2  ; Invt. Point
 | 
|---|
 | 194 |  . . . S STDDOL=STDDOL+$G(^TMP($J,"PRCPLO2",IN1,IN2,IN3,1))
 | 
|---|
 | 195 |  . . . S ODIDOL=ODIDOL+$G(^TMP($J,"PRCPLO2",IN1,IN2,IN3,2))
 | 
|---|
 | 196 |  . . . Q
 | 
|---|
 | 197 |  . . Q
 | 
|---|
 | 198 |  . Q
 | 
|---|
 | 199 |  Q
 | 
|---|
 | 200 | GETVAL ; Get values from ^TMP($J,"PRCPSOH"
 | 
|---|
 | 201 |  N LP1,SOHIEN,PRCPDX
 | 
|---|
 | 202 |  S LP1=0
 | 
|---|
 | 203 |  F  S LP1=$O(^TMP($J,"PRCPSOH",LP1)) Q:LP1=""  D
 | 
|---|
 | 204 |  . S PRCPDX=$G(^TMP($J,"PRCPSOH",LP1))
 | 
|---|
 | 205 |  . S SOHIEN=+LP1
 | 
|---|
 | 206 |  . S DR="1///"_PRCPDX
 | 
|---|
 | 207 |  . D SETREC
 | 
|---|
 | 208 |  . S PRCPDX=$G(^TMP($J,"PRCPSOH2",LP1))
 | 
|---|
 | 209 |  . S DR="2///"_PRCPDX
 | 
|---|
 | 210 |  . D SETREC
 | 
|---|
 | 211 |  . Q
 | 
|---|
 | 212 |  Q
 | 
|---|
 | 213 | SETREC ; Set record using DIE in 446.7
 | 
|---|
 | 214 |  ;
 | 
|---|
 | 215 |  N PRCPDR,PRCPST,PRCPSNM,PRCPDA,PRCPDX,PRCPST,X,Y
 | 
|---|
 | 216 |  S PRCPDR=DR
 | 
|---|
 | 217 |  S DIC="^PRCP(446.7,",DIC(0)="L",DLAYGO=446.7,X=SOHIEN D ^DIC K DIC,DLAYGO
 | 
|---|
 | 218 |  S PRCPDA=Y+0
 | 
|---|
 | 219 |  S PRCPST=$P(^TMP($J,"PRCPSOH",LP1),"*",1)
 | 
|---|
 | 220 |  S PRCPSNM=$$GET1^DIQ(4,PRCPST_",",.01)
 | 
|---|
 | 221 |  ;*98 Send enhanced mail message if exception occurs during FileMan set
 | 
|---|
 | 222 |  I Y=-1 N PRCPMSG D  Q
 | 
|---|
 | 223 |  . S PRCPMSG(1)="Error saving to File #446.7 for Days of Stock on Hand Report, related data: "
 | 
|---|
 | 224 |  . S PRCPMSG(2)="",PRCPMSG(3)="Station: "_PRCPST_" "_PRCPSNM
 | 
|---|
 | 225 |  . S PRCPMSG(4)="Inventory Point: "_$P(^TMP($J,"PRCPSOH",LP1),"*",3)_" "_$P(^TMP($J,"PRCPSOH",LP1),"*",4)
 | 
|---|
 | 226 |  . S PRCPMSG(5)="File #446.7 Field Set Attempted: "_PRCPDR
 | 
|---|
 | 227 |  . D MAIL^PRCPLO3 Q
 | 
|---|
 | 228 |  ;
 | 
|---|
 | 229 |  S DIE="^PRCP(446.7,",DA=PRCPDA D ^DIE K DIE,DR,DA
 | 
|---|
 | 230 |  Q
 | 
|---|