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