[613] | 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
|
---|