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