| 1 | PRS8EX0 ;HISC/MRL,WOIFO/JAH,SAB-DECOMP,EXCEPTIONS (cont'd) ;1/30/2007 | 
|---|
| 2 | ;;4.0;PAID;**2,22,56,111**;Sep 21, 1995;Build 2 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ENCAP ; | 
|---|
| 6 | ; This routine checks if the current day encapsulates other days that | 
|---|
| 7 | ; should be automatically charged to WP or NP by the software. If so, | 
|---|
| 8 | ; appropriate encapsulated days are charged.  This routine is only | 
|---|
| 9 | ; called when the employee has a daily tour. | 
|---|
| 10 | ; inputs | 
|---|
| 11 | ;   PY - current pay period IEN | 
|---|
| 12 | ;   DY - current day number | 
|---|
| 13 | ;   TT - type of time posted on current day | 
|---|
| 14 | ;   TT(1) - data from ACT^PRS8EX for the type of time in TT | 
|---|
| 15 | ;   DFN - employee IEN | 
|---|
| 16 | ; | 
|---|
| 17 | ; day must be in pay period and posted with WP or NP | 
|---|
| 18 | Q:(DY<1)!(DY>14) | 
|---|
| 19 | Q:"^NP^WP^"'[(U_TT_U) | 
|---|
| 20 | ; | 
|---|
| 21 | N SCHDY,SCHEX,SCHPY,CHGDAY | 
|---|
| 22 | ; | 
|---|
| 23 | ; find prior scheduled work day that is not holiday excused | 
|---|
| 24 | D WORKDAY(DFN,PY,DY,-1,.SCHPY,.SCHDY,.SCHEX,.CHGDAY) | 
|---|
| 25 | ; | 
|---|
| 26 | ; If prior work day is in a previous pay period and has same exception | 
|---|
| 27 | ; as the current day then charge the encapsulated days found between. | 
|---|
| 28 | ; Note: If prior work day is in current pay period then no action | 
|---|
| 29 | ; needed since the look forward from that prior day would have | 
|---|
| 30 | ; already taken care of encapsulated days. | 
|---|
| 31 | I SCHEX=TT,$D(CHGDAY),SCHPY'=PY D SET(DFN,PY,TT,$P(TT(1),U,4),.CHGDAY) | 
|---|
| 32 | ; | 
|---|
| 33 | ; find next scheduled work day that is not holiday excused | 
|---|
| 34 | D WORKDAY(DFN,PY,DY,1,.SCHPY,.SCHDY,.SCHEX,.CHGDAY) | 
|---|
| 35 | ; | 
|---|
| 36 | ; If next work day has same exception as current day then charge | 
|---|
| 37 | ; encapsulated days found between. | 
|---|
| 38 | I SCHEX=TT,$D(CHGDAY) D SET(DFN,PY,TT,$P(TT(1),U,4),.CHGDAY) | 
|---|
| 39 | ; | 
|---|
| 40 | Q | 
|---|
| 41 | ; | 
|---|
| 42 | WORKDAY(DFN,PY,DY,PRSDIR,SCHPY,SCHDY,SCHEX,CHGDAY) ; find work day | 
|---|
| 43 | ; inputs | 
|---|
| 44 | ;   DFN - employee IEN | 
|---|
| 45 | ;   PY  - current pay period IEN | 
|---|
| 46 | ;   DY  - current day number | 
|---|
| 47 | ;   PRSDIR - direction (-1 to look back or +1 to look forward) | 
|---|
| 48 | ; outputs | 
|---|
| 49 | ;   SCHPY - passed by reference, work day pay period or null | 
|---|
| 50 | ;   SCHDY - passed by reference, work day day number or null | 
|---|
| 51 | ;   SCHEX - passed by reference, work day exception or null | 
|---|
| 52 | ;   CHGDAY() - passed by reference, array of days in current pay period | 
|---|
| 53 | ;              that could be charged due to encapsulation and were | 
|---|
| 54 | ;              encounted during the search for the work day | 
|---|
| 55 | ;              format ENCDAY(day number)=null value | 
|---|
| 56 | ; | 
|---|
| 57 | N DONE,EXC,LOOPPY,LOOPDY,PPCNT,TOD | 
|---|
| 58 | ; init outputs | 
|---|
| 59 | S (SCHPY,SCHDY,SCHEX)="" | 
|---|
| 60 | K CHGDAY | 
|---|
| 61 | ; | 
|---|
| 62 | ; loop thru days to find the first scheduled work day that is | 
|---|
| 63 | ; not holiday excused | 
|---|
| 64 | S DONE=0,LOOPPY=PY,LOOPDY=DY,PPCNT=1 | 
|---|
| 65 | F  D  I DONE Q | 
|---|
| 66 | . ; move one day in appropriate direction | 
|---|
| 67 | . S LOOPDY=LOOPDY+PRSDIR | 
|---|
| 68 | . ; | 
|---|
| 69 | . ; check if loop day moved into a different pay period | 
|---|
| 70 | . I LOOPDY<1 S LOOPPY=$O(^PRST(458,LOOPPY),-1),LOOPDY=14,PPCNT=PPCNT+1 | 
|---|
| 71 | . I LOOPDY>14 S LOOPPY=$O(^PRST(458,LOOPPY),1),LOOPDY=1,PPCNT=PPCNT+1 | 
|---|
| 72 | . ; | 
|---|
| 73 | . ; check for loop ending conditions (related to pay period/time card) | 
|---|
| 74 | . I PPCNT>2 S DONE=1 Q  ; only check current and one other pay period | 
|---|
| 75 | . I LOOPPY'>0 S DONE=1 Q  ; ran out of pay periods | 
|---|
| 76 | . I '$D(^PRST(458,LOOPPY,"E",DFN,0)) S DONE=1 Q  ; no empl. time card | 
|---|
| 77 | . ; | 
|---|
| 78 | . ; determine tour and exception for loop day | 
|---|
| 79 | . S TOD=$P($G(^PRST(458,LOOPPY,"E",DFN,"D",LOOPDY,0)),U,2) | 
|---|
| 80 | . S EXC=$P($G(^PRST(458,LOOPPY,"E",DFN,"D",LOOPDY,2)),U,3) | 
|---|
| 81 | . ; | 
|---|
| 82 | . ; check if work day found | 
|---|
| 83 | . I TOD'=1,EXC'="HX" S SCHPY=LOOPPY,SCHDY=LOOPDY,SCHEX=EXC,DONE=1 Q | 
|---|
| 84 | . ; | 
|---|
| 85 | . ; work day was not found yet | 
|---|
| 86 | . ; add this day to list if it could potentially be charged | 
|---|
| 87 | . Q:LOOPPY'=PY  ; not in current pay period | 
|---|
| 88 | . Q:$D(^TMP($J,"PRS8",LOOPDY,2,0))  ; day already charged | 
|---|
| 89 | . I TOD=1,"^CP^NP^"'[(U_EXC_U) S CHGDAY(LOOPDY)="" ; add day off to list | 
|---|
| 90 | . I TOD>1,EXC="HX" S CHGDAY(LOOPDY)="" ; add holiday to list | 
|---|
| 91 | Q | 
|---|
| 92 | ; | 
|---|
| 93 | SET(DFN,PY,TT,PC,CHGDAY) ; automatically charge days | 
|---|
| 94 | ; | 
|---|
| 95 | ; inputs | 
|---|
| 96 | ;   DFN - employee IEN | 
|---|
| 97 | ;   PY - pay period IEN | 
|---|
| 98 | ;   TT - type of time to charge | 
|---|
| 99 | ;   PC - 4th piece of data from ACT^PRS8EX for TT | 
|---|
| 100 | ;   CHGDAY - array of days passed by reference, CHGDAY(day number)="" | 
|---|
| 101 | ; | 
|---|
| 102 | N LOOPDY,PC3,WEEK | 
|---|
| 103 | ; | 
|---|
| 104 | ; loop thru days in list | 
|---|
| 105 | S LOOPDY=0 F  S LOOPDY=$O(CHGDAY(LOOPDY)) Q:'LOOPDY  D | 
|---|
| 106 | . ; | 
|---|
| 107 | . ; increment WK() count | 
|---|
| 108 | . I +PC S WEEK=$S(LOOPDY>7:2,1:1),$P(WK(WEEK),"^",+PC)=$P(WK(WEEK),"^",+PC)+1 | 
|---|
| 109 | . E  S PC3=$A(PC)-64,$P(WK(3),"^",+PC3)=$P(WK(3),"^",+PC3)+1 | 
|---|
| 110 | . ; | 
|---|
| 111 | . ; track days have been automatically charged in ^TMP | 
|---|
| 112 | . S ^TMP($J,"PRS8",LOOPDY,2,0)=TT | 
|---|
| 113 | . ; | 
|---|
| 114 | . ; update time card if decomp called from pay period certification | 
|---|
| 115 | . I $G(APDT) D | 
|---|
| 116 | . . S $P(^PRST(458,PY,"E",DFN,"D",LOOPDY,2),"^",3)=TT | 
|---|
| 117 | . . S ^PRST(458,PY,"E",DFN,"D",LOOPDY,3)="Leave posted automatically" | 
|---|
| 118 | . . S $P(^PRST(458,PY,"E",DFN,"D",LOOPDY,10),"^",1,4)="T^.5^"_APDT_"^2" | 
|---|
| 119 | Q | 
|---|