PRSA8BNH ;WOIFO/JAH - Tour Hours vs 8B Norm Hrs Report ;12/28/07 ;;4.0;PAID;**116**;Sep 21, 1995;Build 23 ;;Per VHA Directive 2004-038, this routine should not be modified. Q ; Search for 8b normal hours that don't match tours ; look in timecard 8B node for normal hours otherwise use 450 ; PAYROLL ;prompt for T&L's--set's up payroll all T&L's N PRSTLV,FORWHO S PRSTLV=7 S FORWHO="for Payroll" ; TIMEKEEP ; entry point sets up timekeeper T&L variable for PRSAUTL call I $G(PRSTLV)'>0 N PRSTLV,FORWHO S PRSTLV=2,FORWHO="for Timekeeper" ; SUPERV ; sets up supervisor for T&L lookup I $G(PRSTLV)'>0 N PRSTLV,FORWHO S PRSTLV=3,FORWHO="for T&A Supervisor" ; N DIR,DIRUT,TLS,Y,PPI,PPE,NOTOUR,NOTCARD,PPRANGE,DAILYHRS,EP,SP,SDT,EDT S TLS=1 S DIR(0)="Y" S DIR("B")="Y" S DIR("A")="All T&L's" D ^DIR Q:$D(DIRUT) I +Y=1 S TLS="ALL" I TLS=1 D . D ^PRSAUTL Q:TLS=1&($G(TLI)="") ; S PPI=$$GETPP^PRSA8BNI() Q:PPI'>0 S PPE=$P($G(^PRST(458,PPI,0)),U) S SDT=$P($G(^PRST(458,PPI,2)),U) S EDT=$P($G(^PRST(458,PPI,2)),U,14) S SP=$L(SDT," ") S EP=$L(EDT," ") S PPRANGE=$P(SDT," ",SP)_" thru "_$P(EDT," ",EP) ; ; ask user to include employees with no timecard at all. S NOTCARD=$$NOTCARD^PRSA8BNI() Q:NOTCARD<0 ; ; ask user to include employees with no tour of duty entered S NOTOUR=$$NOTOURS^PRSA8BNI() Q:NOTOUR<0 ; ; ask user to include employees daily tour hours S DAILYHRS=$$DAILYHRS^PRSA8BNI() Q:DAILYHRS<0 ; ; N %ZIS,POP,IOP S %ZIS="MQ" D ^%ZIS Q:POP I $D(IO("Q")) D . K IO("Q") . N ZTDESC,ZTRTN,ZTSAVE . S ZTDESC="PAID REPORT: TOUR HOURS DON'T MATCH 8B NORMAL" . S ZTRTN="TOUR8B^PRSA8BNH" . S ZTSAVE("PRSTLV")="" . S ZTSAVE("TLE")="" . S ZTSAVE("PPI")="" . S ZTSAVE("PPE")="" . S ZTSAVE("TLS")="" . S ZTSAVE("NOTOUR")="" . S ZTSAVE("NOTCARD")="" . S ZTSAVE("DAILYHRS")="" . S ZTSAVE("PPRANGE")="" . S ZTSAVE("FORWHO")="" . D ^%ZTLOAD . I $D(ZTSK) S ZTREQ="@" E D . D TOUR8B K PRSTLV D ^%ZISC K %ZIS,IOP Q ; TOUR8B ; U IO N OUT,TLECNT,TSTAMP,Y,%,%I,GRANDTOT,PG,ATL D NOW^%DTC S Y=% D DD^%DT S TSTAMP=$P(Y,":",1,2) S (TLECNT,OUT,GRANDTOT,PG)=0 I TLS="ALL" D . N TLI,TLE . S ATL="ATL" . F S ATL=$O(^PRSPC(ATL)) Q:ATL>"ATLVCS"!OUT D .. S TLE=$E(ATL,4,6) .. Q:TLE="" .. S TLI=$O(^PRST(455.5,"B",TLE,0)) .. Q:TLI'>0 ..; skip T&L's supervisors and timekeepers don't have access too .. Q:(PRSTLV=2)&('$D(^PRST(455.5,"AT",DUZ,TLI))) .. Q:(PRSTLV=3)&('$D(^PRST(455.5,"AS",DUZ,TLI))) .. I TLECNT=0 D HDR^PRSA8BNI(.PG,TSTAMP,0,FORWHO,PPE,PPRANGE) .. D LOOPTL(.OUT,.GRANDTOT,TLE,PPI,TSTAMP) .. S TLECNT=TLECNT+1 E D . D HDR^PRSA8BNI(.PG,TSTAMP,0,FORWHO,PPE,PPRANGE) . D LOOPTL(.OUT,.GRANDTOT,TLE,PPI,TSTAMP) . S TLECNT=TLECNT+1 D REPDONE^PRSA8BNI(OUT,TLECNT,TSTAMP,DAILYHRS,GRANDTOT) Q ; LOOPTL(OUT,TOT,TLE,PPI,TSTAMP) ; LOOP THROUGH T&L N COUNT,NN,PRSIEN,EMPNODE,PRSENAME,HRS,EMPND1,SEPIND,WEEKHRS,PRSD,PRSSN K ERRORS S (COUNT,OUT)=0 S NN="" F S NN=$O(^PRSPC("ATL"_TLE,NN)) Q:NN="" D . F PRSIEN=0:0 S PRSIEN=$O(^PRSPC("ATL"_TLE,NN,PRSIEN)) Q:PRSIEN<1!(OUT) D ..; skip Extended LWOP or anyone without a timecard .. Q:'NOTCARD&($G(^PRST(458,PPI,"E",PRSIEN,0))="") .. Q:'NOTOUR&($P($G(^PRST(458,PPI,"E",PRSIEN,"D",1,0)),U,2)="") .. S EMPNODE=$G(^PRSPC(PRSIEN,0)) .. S EMPND1=$G(^PRSPC(PRSIEN,1)) .. S SEPIND=$P(EMPND1,U,33) .. Q:EMPNODE=""!(SEPIND="Y") .. I '$$HRSMATCH^PRSATPE(PPI,PRSIEN) D ... S COUNT=COUNT+1 ... S GRANDTOT=GRANDTOT+1 ... S ERRORS(PRSIEN)="" I COUNT>0 D . I DAILYHRS,$Y>(IOSL-12) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT . I 'DAILYHRS,$Y>(IOSL-7) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT . W !!,?12,"T & L UNIT: "_TLE," ",COUNT," mismatches found." . S PRSIEN="" . F S PRSIEN=$O(ERRORS(PRSIEN)) Q:PRSIEN'>0!OUT D .. S WEEKHRS=$$GETHOURS^PRSA8BNI(PPI,PRSIEN) .. S PRSENAME=$P($G(^PRSPC(PRSIEN,0)),U) .. S PRSSN=$P($G(^PRSPC(PRSIEN,0)),U,9) .. 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) .. I DAILYHRS,$Y>(IOSL-10) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT .. I 'DAILYHRS,$Y>(IOSL-5) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT .. D EMPINFO^PRSA8BNI(PRSENAME,PRSSN,WEEKHRS) ..; show the actual tour hours for each day .. I DAILYHRS D ... N HRS,I ... D TOURHRS^PRSARC07(.HRS,PPI,PRSIEN) ... I $Y>(IOSL-8) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT D EMPINFO^PRSA8BNI(PRSENAME,PRSSN,WEEKHRS) ... D TRHDR^PRSA8BNI ... F PRSD=1:1:7 D Q:OUT .... I $Y>(IOSL-4) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT D EMPINFO^PRSA8BNI(PRSENAME,PRSSN,WEEKHRS),TRHDR^PRSA8BNI .... Q:OUT .... D TOURDISP(PPI,PRSIEN,PRSD,.HRS) .. Q:OUT .. I $Y>(IOSL-5) S OUT=$$RET^PRSA8BNI(TSTAMP) Q:OUT Q TOURDISP(PPI,PRSIEN,PRSD,HRS) ; N Y1,Y2,Y4,Y5,DTE,TD1C1,TD1C2,L2,L3,TD2C1,TD2C2 S TD1C1=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,0)),"^",2),Y1=$G(^(1)),Y4=$G(^(4)) S TD2C1=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,0)),"^",13) I Y1="" S Y1=$S(TD1C1=1:"Day Off",TD1C1=2:"Day Tour",TD1C1=3!(TD1C1=4):"Intermittent",1:"") S TD1C2=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD+7,0)),"^",2),Y2=$G(^(1)),Y5=$G(^(4)) S TD2C2=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD+7,0)),"^",13) I Y2="" S Y2=$S(TD1C2=1:"Day Off",TD1C2=2:"Day Tour",TD1C2=3!(TD1C2=4):"Intermittent",1:"") S DTE=$P("Sun Mon Tue Wed Thu Fri Sat"," ",PRSD) W !?7,DTE S (L2,L3)=0 I Y1="",Y2="" Q ; S0 ; Set Schedule Array N A1,L1,B F L1=1:3:19 D . S A1=$P(Y1,"^",L1) Q:A1="" . S L2=L2+1,Y1(L2)=A1 . S:$P(Y1,"^",L1+1)'="" Y1(L2)=Y1(L2)_"-"_$P(Y1,"^",L1+1) . I L1=1 D .. N DAYHRS S DAYHRS=$J($P(HRS(PRSD),U,2),5,2) .. S B=$E(" ",1,20-$L(DAYHRS)-$L(Y1(L2))) .. S Y1(L2)=$J(TD1C1,5,0)_" "_Y1(L2)_B_DAYHRS . E D .. S Y1(L2)=" "_Y1(L2) . I $P(Y1,"^",L1+2)'="" D .. S L2=L2+1 .. S Y1(L2)=" "_$P($G(^PRST(457.2,+$P(Y1,"^",L1+2),0)),"^",1) G:Y4="" S1 F L1=1:3:19 D . S A1=$P(Y4,"^",L1) Q:A1="" . S L2=L2+1 . S Y1(L2)=A1 . S:$P(Y4,"^",L1+1)'="" Y1(L2)=Y1(L2)_"-"_$P(Y4,"^",L1+1) . I L1=1 D .. S Y1(L2)=$J(TD2C1,5,0)_" "_Y1(L2) . E D .. S Y1(L2)=" "_Y1(L2) . I $P(Y4,"^",L1+2)'="" D .. S L2=L2+1 .. S Y1(L2)=" "_$P($G(^PRST(457.2,+$P(Y4,"^",L1+2),0)),"^",1) ; S1 ; Set Schedule Array F L1=1:3:19 D . S A1=$P(Y2,"^",L1) Q:A1="" . S L3=L3+1 . S Y2(L3)=A1 . S:$P(Y2,"^",L1+1)'="" Y2(L3)=Y2(L3)_"-"_$P(Y2,"^",L1+1) . I L1=1 D .. N DAYHRS S DAYHRS=$J($P(HRS(PRSD+7),U,2),5,2) .. S B=$E(" ",1,20-$L(DAYHRS)-$L(Y2(L3))) .. S Y2(L3)=$J(TD1C2,5,0)_" "_Y2(L3)_B_DAYHRS . E D .. S Y2(L3)=" "_Y2(L3) . I $P(Y2,"^",L1+2)'="" D .. S L3=L3+1 .. S Y2(L3)=" "_$P($G(^PRST(457.2,+$P(Y2,"^",L1+2),0)),"^",1) ; G:Y5="" S2 ; F L1=1:3:19 D . S A1=$P(Y5,"^",L1) Q:A1="" . S L3=L3+1,Y2(L3)=A1 . S:$P(Y5,"^",L1+1)'="" Y2(L3)=Y2(L3)_"-"_$P(Y5,"^",L1+1) . I L1=1 D .. S Y2(L3)=$J(TD2C2,5,0)_" "_Y2(L3) . E D .. S Y2(L3)=" "_Y2(L3) . I $P(Y5,"^",L1+2)'="" D .. S L3=L3+1 .. S Y2(L3)=" "_$P($G(^PRST(457.2,+$P(Y5,"^",L1+2),0)),"^",1) ; S2 ; N K F K=1:1 Q:'$D(Y1(K))&'$D(Y2(K)) D . W:K>1 ! W:$D(Y1(K)) ?12,Y1(K) W:$D(Y2(K)) ?47,Y2(K) Q