PRSARC08 ;WOIFO/JAH - Tour hours procedure calls ;12/19/06 ;;4.0;PAID;**112**;Sep 21, 1995;Build 54 ;;Per VHA Directive 2004-038, this routine should not be modified. Q ; TRSHFTS(TOURIEN) ; return two piece ^ string with EARLIEST shift special ; indicator for a tour ; N TOUR,TODSHFT,TOMSHFT,TSEGS,TWODAYTR,I N DONE,CROSS,BEG,END,SPIND,BEG24,END24 Q:$G(TOURIEN)'>0 "^" S (TODSHFT,TOMSHFT)="4" S TOUR=$G(^PRST(457.1,TOURIEN,0)) S TSEGS=$G(^PRST(457.1,TOURIEN,1)) S TWODAYTR=$P(TOUR,U,5)="Y" S (DONE,CROSS)=0 F I=1:3:18 D Q:DONE . S BEG=$P(TSEGS,U,I) . I BEG="" S DONE=1 Q . S END=$P(TSEGS,U,I+1) . S SPIND=$P(TSEGS,U,I+2) I SPIND="" S SPIND=1 . S SPIND=$TR(SPIND,"67","23") . Q:"^1^2^3^"'[("^"_SPIND_"^") . ; convert beg and end to twenty four hr to determine if one is . ; less than other and hence crosses midnight. You've also . ; crossed midnight if a segment other than first starts at . ; midnight. . ; Set CROSS to true so any remaining segments get recorded to . ; tomorrow. . S BEG24=$$TWENTY4^PRSPESR2(BEG) . S END24=$$TWENTY4^PRSPESR2(END) . I 'CROSS&((BEG24'1)&(BEG24=2400))) D .. S CROSS=1 .. I SPIND60)!(M<15)!((M#15)'=0) Q S1_"^"_S2 ; Convert minutes meal to decimal N X S X=M D MEALIN^PRSPESR2 S M=.25*X N MEALHR,NS1,NS2 S MEALHR=(S1+S2)/2-(M/2)\.25*.25 Q:MEALHR'>0 S1_"^"_S2 ; ; pull meal from S1, S2 or both I MEALHRS1 D .. S NS2=S2 .. S NS1=S1-M . E D .. S NS1=S1-(S1-MEALHR) .. S NS2=S2-(M-(S1-MEALHR)) E D . S NS1=S1 . S NS2=S2-M Q NS1_"^"_NS2 ; EARLYSH(TH,WAGER) ; LOOP THROUGH ARRAY TO FIND EARLIEST SHIFT ; N EARLIEST,HRS,SHIFT,TOURDAY I WAGER D . S EARLIEST=0 E D . S EARLIEST=4 . S TOURDAY=0 . F S TOURDAY=$O(TH(TOURDAY)) Q:TOURDAY'>0 D .. S HRS=$P($G(TH(TOURDAY)),U,2) .. Q:HRS'>0 .. S SHIFT=$P($G(TH(TOURDAY)),U) .. I SHIFT0 Q "0^undefined employee" N PAYPLAN,ISWAGE S ISWAGE=1 I '$D(^PRSPC(PRSIEN,0)) Q "0^undefined employee" S PAYPLAN=$P($G(^PRSPC(PRSIEN,0)),U,21) I "0123456789GU"'[PAYPLAN S ISWAGE=0 Q ISWAGE ; ISCMPTR(PPI,PRSIEN) ; return true for compressed tours ; N ISCT S ISCT=0 I $P($G(^PRST(458,PPI,"E",PRSIEN,0)),U,6)="C" S ISCT=1 Q ISCT ; TOTAL(TH,WKS) ; array loop tallis hrs ; INPUT : WKS (optional) 1 for week one total, 2 for week 2 total, ; otherwise full pay period total. N LASTDAY,TOURDAY,TOTAL S TOTAL=0 S TOURDAY=$S($G(WKS)=2:7,1:0) S LASTDAY=$S($G(WKS)=1:7,1:14) F S TOURDAY=$O(TH(TOURDAY)) Q:TOURDAY>LASTDAY!(TOURDAY'>0) D . S TOTAL=TOTAL+$P($G(TH(TOURDAY)),U,2) Q TOTAL ; PARSE(VALMNOD,BEG,END) ; -- Copy from VALM2 split out pre-answers from user N Y,J,L,X S Y=$TR($P($P(VALMNOD,U,4),"=",2),"/\; .",",,,,,") I Y["-" S X=Y,Y="" F I=1:1 S J=$P(X,",",I) Q:J']"" I +J>(BEG-1),+J<(END+1) S:J'["-" Y=Y_J_"," I J["-",+J,+J<+$P(J,"-",2) F L=+J:1:+$P(J,"-",2) I L>(BEG-1),L<(END+1) S Y=Y_L_"," Q Y