1 | PRSA8BNH ;WOIFO/JAH - Tour Hours vs 8B Norm Hrs Report ;12/28/07
|
---|
2 | ;;4.0;PAID;**116**;Sep 21, 1995;Build 23
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | Q
|
---|
5 | ; Search for 8b normal hours that don't match tours
|
---|
6 | ; look in timecard 8B node for normal hours otherwise use 450
|
---|
7 | ;
|
---|
8 | PAYROLL ;prompt for T&L's--set's up payroll all T&L's
|
---|
9 | N PRSTLV,FORWHO
|
---|
10 | S PRSTLV=7
|
---|
11 | S FORWHO="for Payroll"
|
---|
12 | ;
|
---|
13 | TIMEKEEP ; entry point sets up timekeeper T&L variable for PRSAUTL call
|
---|
14 | I $G(PRSTLV)'>0 N PRSTLV,FORWHO S PRSTLV=2,FORWHO="for Timekeeper"
|
---|
15 | ;
|
---|
16 | SUPERV ; sets up supervisor for T&L lookup
|
---|
17 | I $G(PRSTLV)'>0 N PRSTLV,FORWHO S PRSTLV=3,FORWHO="for T&A Supervisor"
|
---|
18 | ;
|
---|
19 | N DIR,DIRUT,TLS,Y,PPI,PPE,NOTOUR,NOTCARD,PPRANGE,DAILYHRS,EP,SP,SDT,EDT
|
---|
20 | S TLS=1
|
---|
21 | S DIR(0)="Y"
|
---|
22 | S DIR("B")="Y"
|
---|
23 | S DIR("A")="All T&L's"
|
---|
24 | D ^DIR
|
---|
25 | Q:$D(DIRUT)
|
---|
26 | I +Y=1 S TLS="ALL"
|
---|
27 | I TLS=1 D
|
---|
28 | . D ^PRSAUTL
|
---|
29 | Q:TLS=1&($G(TLI)="")
|
---|
30 | ;
|
---|
31 | S PPI=$$GETPP^PRSA8BNI()
|
---|
32 | Q:PPI'>0
|
---|
33 | S PPE=$P($G(^PRST(458,PPI,0)),U)
|
---|
34 | S SDT=$P($G(^PRST(458,PPI,2)),U)
|
---|
35 | S EDT=$P($G(^PRST(458,PPI,2)),U,14)
|
---|
36 | S SP=$L(SDT," ")
|
---|
37 | S EP=$L(EDT," ")
|
---|
38 | S PPRANGE=$P(SDT," ",SP)_" thru "_$P(EDT," ",EP)
|
---|
39 | ;
|
---|
40 | ; ask user to include employees with no timecard at all.
|
---|
41 | S NOTCARD=$$NOTCARD^PRSA8BNI()
|
---|
42 | Q:NOTCARD<0
|
---|
43 | ;
|
---|
44 | ; ask user to include employees with no tour of duty entered
|
---|
45 | S NOTOUR=$$NOTOURS^PRSA8BNI()
|
---|
46 | Q:NOTOUR<0
|
---|
47 | ;
|
---|
48 | ; ask user to include employees daily tour hours
|
---|
49 | S DAILYHRS=$$DAILYHRS^PRSA8BNI()
|
---|
50 | Q:DAILYHRS<0
|
---|
51 | ;
|
---|
52 | ;
|
---|
53 | N %ZIS,POP,IOP
|
---|
54 | S %ZIS="MQ"
|
---|
55 | D ^%ZIS
|
---|
56 | Q:POP
|
---|
57 | I $D(IO("Q")) D
|
---|
58 | . K IO("Q")
|
---|
59 | . N ZTDESC,ZTRTN,ZTSAVE
|
---|
60 | . S ZTDESC="PAID REPORT: TOUR HOURS DON'T MATCH 8B NORMAL"
|
---|
61 | . S ZTRTN="TOUR8B^PRSA8BNH"
|
---|
62 | . S ZTSAVE("PRSTLV")=""
|
---|
63 | . S ZTSAVE("TLE")=""
|
---|
64 | . S ZTSAVE("PPI")=""
|
---|
65 | . S ZTSAVE("PPE")=""
|
---|
66 | . S ZTSAVE("TLS")=""
|
---|
67 | . S ZTSAVE("NOTOUR")=""
|
---|
68 | . S ZTSAVE("NOTCARD")=""
|
---|
69 | . S ZTSAVE("DAILYHRS")=""
|
---|
70 | . S ZTSAVE("PPRANGE")=""
|
---|
71 | . S ZTSAVE("FORWHO")=""
|
---|
72 | . D ^%ZTLOAD
|
---|
73 | . I $D(ZTSK) S ZTREQ="@"
|
---|
74 | E D
|
---|
75 | . D TOUR8B
|
---|
76 | K PRSTLV
|
---|
77 | D ^%ZISC K %ZIS,IOP
|
---|
78 | Q
|
---|
79 | ;
|
---|
80 | TOUR8B ;
|
---|
81 | U IO
|
---|
82 | N OUT,TLECNT,TSTAMP,Y,%,%I,GRANDTOT,PG,ATL
|
---|
83 | D NOW^%DTC S Y=% D DD^%DT S TSTAMP=$P(Y,":",1,2)
|
---|
84 | S (TLECNT,OUT,GRANDTOT,PG)=0
|
---|
85 | I TLS="ALL" D
|
---|
86 | . N TLI,TLE
|
---|
87 | . S ATL="ATL"
|
---|
88 | . F S ATL=$O(^PRSPC(ATL)) Q:ATL>"ATLVCS"!OUT D
|
---|
89 | .. S TLE=$E(ATL,4,6)
|
---|
90 | .. Q:TLE=""
|
---|
91 | .. S TLI=$O(^PRST(455.5,"B",TLE,0))
|
---|
92 | .. Q:TLI'>0
|
---|
93 | ..; skip T&L's supervisors and timekeepers don't have access too
|
---|
94 | .. Q:(PRSTLV=2)&('$D(^PRST(455.5,"AT",DUZ,TLI)))
|
---|
95 | .. Q:(PRSTLV=3)&('$D(^PRST(455.5,"AS",DUZ,TLI)))
|
---|
96 | .. I TLECNT=0 D HDR^PRSA8BNI(.PG,TSTAMP,0,FORWHO,PPE,PPRANGE)
|
---|
97 | .. D LOOPTL(.OUT,.GRANDTOT,TLE,PPI,TSTAMP)
|
---|
98 | .. S TLECNT=TLECNT+1
|
---|
99 | E D
|
---|
100 | . D HDR^PRSA8BNI(.PG,TSTAMP,0,FORWHO,PPE,PPRANGE)
|
---|
101 | . D LOOPTL(.OUT,.GRANDTOT,TLE,PPI,TSTAMP)
|
---|
102 | . S TLECNT=TLECNT+1
|
---|
103 | D REPDONE^PRSA8BNI(OUT,TLECNT,TSTAMP,DAILYHRS,GRANDTOT)
|
---|
104 | Q
|
---|
105 | ;
|
---|
106 | LOOPTL(OUT,TOT,TLE,PPI,TSTAMP) ; LOOP THROUGH T&L
|
---|
107 | N COUNT,NN,PRSIEN,EMPNODE,PRSENAME,HRS,EMPND1,SEPIND,WEEKHRS,PRSD,PRSSN
|
---|
108 | K ERRORS
|
---|
109 | S (COUNT,OUT)=0
|
---|
110 | S NN=""
|
---|
111 | F S NN=$O(^PRSPC("ATL"_TLE,NN)) Q:NN="" D
|
---|
112 | . F PRSIEN=0:0 S PRSIEN=$O(^PRSPC("ATL"_TLE,NN,PRSIEN)) Q:PRSIEN<1!(OUT) D
|
---|
113 | ..; skip Extended LWOP or anyone without a timecard
|
---|
114 | .. Q:'NOTCARD&($G(^PRST(458,PPI,"E",PRSIEN,0))="")
|
---|
115 | .. Q:'NOTOUR&($P($G(^PRST(458,PPI,"E",PRSIEN,"D",1,0)),U,2)="")
|
---|
116 | .. S EMPNODE=$G(^PRSPC(PRSIEN,0))
|
---|
117 | .. S EMPND1=$G(^PRSPC(PRSIEN,1))
|
---|
118 | .. S SEPIND=$P(EMPND1,U,33)
|
---|
119 | .. Q:EMPNODE=""!(SEPIND="Y")
|
---|
120 | .. I '$$HRSMATCH^PRSATPE(PPI,PRSIEN) D
|
---|
121 | ... S COUNT=COUNT+1
|
---|
122 | ... S GRANDTOT=GRANDTOT+1
|
---|
123 | ... S ERRORS(PRSIEN)=""
|
---|
124 | I COUNT>0 D
|
---|
125 | . I DAILYHRS,$Y>(IOSL-12) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT
|
---|
126 | . I 'DAILYHRS,$Y>(IOSL-7) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT
|
---|
127 | . W !!,?12,"T & L UNIT: "_TLE," ",COUNT," mismatches found."
|
---|
128 | . S PRSIEN=""
|
---|
129 | . F S PRSIEN=$O(ERRORS(PRSIEN)) Q:PRSIEN'>0!OUT D
|
---|
130 | .. S WEEKHRS=$$GETHOURS^PRSA8BNI(PPI,PRSIEN)
|
---|
131 | .. S PRSENAME=$P($G(^PRSPC(PRSIEN,0)),U)
|
---|
132 | .. S PRSSN=$P($G(^PRSPC(PRSIEN,0)),U,9)
|
---|
133 | .. S PRSSN=$S(PRSTLV=7:$E(PRSSN,1,3)_"-"_$E(PRSSN,4,5),PRSTLV'<2:$E(PRSSN,1)_"XX-XX",1:"XXX-XX")_"-"_$E(PRSSN,6,9)
|
---|
134 | .. I DAILYHRS,$Y>(IOSL-10) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT
|
---|
135 | .. I 'DAILYHRS,$Y>(IOSL-5) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT
|
---|
136 | .. D EMPINFO^PRSA8BNI(PRSENAME,PRSSN,WEEKHRS)
|
---|
137 | ..; show the actual tour hours for each day
|
---|
138 | .. I DAILYHRS D
|
---|
139 | ... N HRS,I
|
---|
140 | ... D TOURHRS^PRSARC07(.HRS,PPI,PRSIEN)
|
---|
141 | ... I $Y>(IOSL-8) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT D EMPINFO^PRSA8BNI(PRSENAME,PRSSN,WEEKHRS)
|
---|
142 | ... D TRHDR^PRSA8BNI
|
---|
143 | ... F PRSD=1:1:7 D Q:OUT
|
---|
144 | .... I $Y>(IOSL-4) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT D EMPINFO^PRSA8BNI(PRSENAME,PRSSN,WEEKHRS),TRHDR^PRSA8BNI
|
---|
145 | .... Q:OUT
|
---|
146 | .... D TOURDISP(PPI,PRSIEN,PRSD,.HRS)
|
---|
147 | .. Q:OUT
|
---|
148 | .. I $Y>(IOSL-5) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT
|
---|
149 | Q
|
---|
150 | TOURDISP(PPI,PRSIEN,PRSD,HRS) ;
|
---|
151 | N Y1,Y2,Y4,Y5,DTE,TD1C1,TD1C2,L2,L3,TD2C1,TD2C2
|
---|
152 | S TD1C1=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,0)),"^",2),Y1=$G(^(1)),Y4=$G(^(4))
|
---|
153 | S TD2C1=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,0)),"^",13)
|
---|
154 | I Y1="" S Y1=$S(TD1C1=1:"Day Off",TD1C1=2:"Day Tour",TD1C1=3!(TD1C1=4):"Intermittent",1:"")
|
---|
155 | S TD1C2=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD+7,0)),"^",2),Y2=$G(^(1)),Y5=$G(^(4))
|
---|
156 | S TD2C2=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD+7,0)),"^",13)
|
---|
157 | I Y2="" S Y2=$S(TD1C2=1:"Day Off",TD1C2=2:"Day Tour",TD1C2=3!(TD1C2=4):"Intermittent",1:"")
|
---|
158 | S DTE=$P("Sun Mon Tue Wed Thu Fri Sat"," ",PRSD)
|
---|
159 | W !?7,DTE S (L2,L3)=0
|
---|
160 | I Y1="",Y2="" Q
|
---|
161 | ;
|
---|
162 | S0 ; Set Schedule Array
|
---|
163 | N A1,L1,B
|
---|
164 | F L1=1:3:19 D
|
---|
165 | . S A1=$P(Y1,"^",L1) Q:A1=""
|
---|
166 | . S L2=L2+1,Y1(L2)=A1
|
---|
167 | . S:$P(Y1,"^",L1+1)'="" Y1(L2)=Y1(L2)_"-"_$P(Y1,"^",L1+1)
|
---|
168 | . I L1=1 D
|
---|
169 | .. N DAYHRS S DAYHRS=$J($P(HRS(PRSD),U,2),5,2)
|
---|
170 | .. S B=$E(" ",1,20-$L(DAYHRS)-$L(Y1(L2)))
|
---|
171 | .. S Y1(L2)=$J(TD1C1,5,0)_" "_Y1(L2)_B_DAYHRS
|
---|
172 | . E D
|
---|
173 | .. S Y1(L2)=" "_Y1(L2)
|
---|
174 | . I $P(Y1,"^",L1+2)'="" D
|
---|
175 | .. S L2=L2+1
|
---|
176 | .. S Y1(L2)=" "_$P($G(^PRST(457.2,+$P(Y1,"^",L1+2),0)),"^",1)
|
---|
177 | G:Y4="" S1
|
---|
178 | F L1=1:3:19 D
|
---|
179 | . S A1=$P(Y4,"^",L1) Q:A1=""
|
---|
180 | . S L2=L2+1
|
---|
181 | . S Y1(L2)=A1
|
---|
182 | . S:$P(Y4,"^",L1+1)'="" Y1(L2)=Y1(L2)_"-"_$P(Y4,"^",L1+1)
|
---|
183 | . I L1=1 D
|
---|
184 | .. S Y1(L2)=$J(TD2C1,5,0)_" "_Y1(L2)
|
---|
185 | . E D
|
---|
186 | .. S Y1(L2)=" "_Y1(L2)
|
---|
187 | . I $P(Y4,"^",L1+2)'="" D
|
---|
188 | .. S L2=L2+1
|
---|
189 | .. S Y1(L2)=" "_$P($G(^PRST(457.2,+$P(Y4,"^",L1+2),0)),"^",1)
|
---|
190 | ;
|
---|
191 | S1 ; Set Schedule Array
|
---|
192 | F L1=1:3:19 D
|
---|
193 | . S A1=$P(Y2,"^",L1) Q:A1=""
|
---|
194 | . S L3=L3+1
|
---|
195 | . S Y2(L3)=A1
|
---|
196 | . S:$P(Y2,"^",L1+1)'="" Y2(L3)=Y2(L3)_"-"_$P(Y2,"^",L1+1)
|
---|
197 | . I L1=1 D
|
---|
198 | .. N DAYHRS S DAYHRS=$J($P(HRS(PRSD+7),U,2),5,2)
|
---|
199 | .. S B=$E(" ",1,20-$L(DAYHRS)-$L(Y2(L3)))
|
---|
200 | .. S Y2(L3)=$J(TD1C2,5,0)_" "_Y2(L3)_B_DAYHRS
|
---|
201 | . E D
|
---|
202 | .. S Y2(L3)=" "_Y2(L3)
|
---|
203 | . I $P(Y2,"^",L1+2)'="" D
|
---|
204 | .. S L3=L3+1
|
---|
205 | .. S Y2(L3)=" "_$P($G(^PRST(457.2,+$P(Y2,"^",L1+2),0)),"^",1)
|
---|
206 | ;
|
---|
207 | G:Y5="" S2
|
---|
208 | ;
|
---|
209 | F L1=1:3:19 D
|
---|
210 | . S A1=$P(Y5,"^",L1) Q:A1=""
|
---|
211 | . S L3=L3+1,Y2(L3)=A1
|
---|
212 | . S:$P(Y5,"^",L1+1)'="" Y2(L3)=Y2(L3)_"-"_$P(Y5,"^",L1+1)
|
---|
213 | . I L1=1 D
|
---|
214 | .. S Y2(L3)=$J(TD2C2,5,0)_" "_Y2(L3)
|
---|
215 | . E D
|
---|
216 | .. S Y2(L3)=" "_Y2(L3)
|
---|
217 | . I $P(Y5,"^",L1+2)'="" D
|
---|
218 | .. S L3=L3+1
|
---|
219 | .. S Y2(L3)=" "_$P($G(^PRST(457.2,+$P(Y5,"^",L1+2),0)),"^",1)
|
---|
220 | ;
|
---|
221 | S2 ;
|
---|
222 | N K
|
---|
223 | F K=1:1 Q:'$D(Y1(K))&'$D(Y2(K)) D
|
---|
224 | . W:K>1 ! W:$D(Y1(K)) ?12,Y1(K) W:$D(Y2(K)) ?47,Y2(K)
|
---|
225 | Q
|
---|