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