[613] | 1 | PRSATP5 ;HISC/MGD-Timekeeper Post Absence ;04/18/06
|
---|
| 2 | ;;4.0;PAID;**102,108**;Sep 21, 1995
|
---|
| 3 | ;
|
---|
| 4 | CNV96(TDATA,NSEG,ARRAY,ZERO,DADRFM) ;
|
---|
| 5 | ; Convert the external representation of the start/stop time to
|
---|
| 6 | ; its 1 - 192 piece equivalent
|
---|
| 7 | ;
|
---|
| 8 | ; Input:
|
---|
| 9 | ; TDATA - Time segments to operate on passed by reference
|
---|
| 10 | ; NSEG - Number of Segments per start/stop time entry
|
---|
| 11 | ; 3 for tours, 4 for exceptions
|
---|
| 12 | ; ARRAY - Name of ordered array to create
|
---|
| 13 | ; 1st char - P = Prior (to holiday)
|
---|
| 14 | ; H = Holiday
|
---|
| 15 | ; N = Next day after holiday
|
---|
| 16 | ; 2nd char - T = Tour segments
|
---|
| 17 | ; E = Exception segments, does not include segments
|
---|
| 18 | ; that define periods of On-Call
|
---|
| 19 | ; O = Segments that define periods of On-Call
|
---|
| 20 | ; Could have come from Tour(s) or Exceptions
|
---|
| 21 | ; C = Segments of work performed during periods
|
---|
| 22 | ; of On-Call
|
---|
| 23 | ; Format for all arrays
|
---|
| 24 | ; ARRAY(START)=START^STOP^TOT
|
---|
| 25 | ; Note: Exceptions arrays (PE, HE, NE) will contain the
|
---|
| 26 | ; Remarks Code as the 4th piece of DATA
|
---|
| 27 | ; Exceptions(START)=START^STOP^TOT^RC
|
---|
| 28 | ;
|
---|
| 29 | ; ZERO - 0 node of day being processed
|
---|
| 30 | ;
|
---|
| 31 | ; DADRFM - variable needed for tracking of tours that
|
---|
| 32 | ; cross midnight. Passed by reference and may
|
---|
| 33 | ; be changed.
|
---|
| 34 | ;
|
---|
| 35 | Q:TDATA=""
|
---|
| 36 | N D,FLAG,K,LAST,K1,N,N1,N14,NDAY,QT,V,X,Y,Y1,Z
|
---|
| 37 | S N=$S(NSEG=4:2,1:1)
|
---|
| 38 | D CNV,COA
|
---|
| 39 | Q
|
---|
| 40 | ;
|
---|
| 41 | ; The CNV code was copied from PRS8SU and modified to fit
|
---|
| 42 | ; out needs
|
---|
| 43 | ;
|
---|
| 44 | ; loop thru data nodes for day
|
---|
| 45 | CNV S D(0)=ZERO,Z=TDATA,N1=NSEG,(N14,NDAY,LAST,QT)=0
|
---|
| 46 | ;
|
---|
| 47 | ; process tour and work nodes by looping thru postings in the node
|
---|
| 48 | F K=1:N1 S V=$P(Z,"^",K,K+1) Q:QT D
|
---|
| 49 | .S X=$P(Z,U,K,999)
|
---|
| 50 | .S:X?1"^"."^"!(X="")!(N14=1) QT=1
|
---|
| 51 | .I QT!($P(Z,U,K)="") Q
|
---|
| 52 | .;
|
---|
| 53 | .S:K=1 (NDAY,LAST)=0
|
---|
| 54 | .;
|
---|
| 55 | .; process start time and stop time for posting in node
|
---|
| 56 | .F K1=1,2 S X=$P(V,"^",K1),(Y,Y1)=K1-1 I X'="" D
|
---|
| 57 | ..;
|
---|
| 58 | ..; when a tour exception (N=2) start time (K1=1) is being processed
|
---|
| 59 | ..; determine if LAST should be reset (FLAG). If LAST is reset then
|
---|
| 60 | ..; the start time of the tour exception will initially be placed
|
---|
| 61 | ..; in the current day (X'>96) instead of the following day (X>96)
|
---|
| 62 | ..S FLAG=1
|
---|
| 63 | ..I N=2&(K1=1)&("^HW^"[("^"_$P(Z,"^",K+2)_"^")) D
|
---|
| 64 | ...S FLAG=$S(NDAY=1!(LAST>96)&("^HW^"[("^"_$P(Z,"^",K+2)_"^"))&((X["A")!(X["MID")):0,1:1),NDAY=0
|
---|
| 65 | ..S:$P(D(0),"^",14)'=""&(X="MID")&(LAST=96)&(N=2)&(K1=1) FLAG=0
|
---|
| 66 | ..S:N=2&(K1=1)&(FLAG=1) (NDAY,LAST)=0
|
---|
| 67 | ..;
|
---|
| 68 | ..S Y=K1-1 D 15^PRS8SU ; determine number (1-192) corresponding to time
|
---|
| 69 | ..;
|
---|
| 70 | ..; if some tour exceptions (such as leave) are not within a sched.
|
---|
| 71 | ..; tour then they must be for the following day (i.e. 2-day tour)
|
---|
| 72 | ..I N=2,"^RG^OT^CT^ON^SB^HW^"'[("^"_$P(Z,"^",K+2)_"^") D
|
---|
| 73 | ...S Y=+$O(DADRFM("S",(-X-.01))),Y1=+$O(DADRFM("F",(X-.01)))
|
---|
| 74 | ...I $G(DADRFM("S",Y))'=$G(DADRFM("F",Y1)) S X=X+96
|
---|
| 75 | ...;
|
---|
| 76 | ..S $P(Z,"^",K+(K1-1))=X ; replace time by number
|
---|
| 77 | ..;
|
---|
| 78 | ..; save scheduled tour start and stop times for later use when
|
---|
| 79 | ..; placing some tour exceptions on correct day for 2-day tours
|
---|
| 80 | ..I K1=1,N=1!(N=4) S DADRFM("S",-X)=DADRFM
|
---|
| 81 | ..I K1=2,N=1!(N=4) S DADRFM("F",X)=DADRFM,DADRFM=DADRFM+1
|
---|
| 82 | ..;
|
---|
| 83 | ..; End of code copied from PRS8SU
|
---|
| 84 | ..S $P(TDATA,U,K+(K1-1))=X
|
---|
| 85 | Q
|
---|
| 86 | ;
|
---|
| 87 | ; Create ordered arrays
|
---|
| 88 | COA N ARY,RC,SEG,STI,STOP,STRT,TOT
|
---|
| 89 | S RC=""
|
---|
| 90 | F SEG=0:1:6 D
|
---|
| 91 | .S STRT=$P(TDATA,U,(SEG*NSEG)+1)
|
---|
| 92 | .Q:STRT=""
|
---|
| 93 | .S STOP=$P(TDATA,U,(SEG*NSEG)+2),TOT=$P(TDATA,U,(SEG*NSEG)+3)
|
---|
| 94 | .; For Node1 & Node4 TOT will be numeric so we will need to get
|
---|
| 95 | .; its external representation (2 character string)
|
---|
| 96 | .; For Node2 TOT will be a 2 character string
|
---|
| 97 | .I NSEG=4 S RC=$P(TDATA,U,(SEG*NSEG)+4)
|
---|
| 98 | .S STI="" ; Special Tour Indicator
|
---|
| 99 | .I NSEG=3,TOT S STI=$P($G(^PRST(457.2,TOT,0)),U,2)
|
---|
| 100 | .;
|
---|
| 101 | .; Don't set exceptions defining periods of On-Call into Exception array
|
---|
| 102 | .I $E(ARRAY,2)="E",TOT'="ON" D
|
---|
| 103 | ..S @ARRAY@(STRT)=STRT_U_STOP_U_TOT_U_RC
|
---|
| 104 | .;
|
---|
| 105 | .; Set only Reg segments of tour where the Special Tour Indicator
|
---|
| 106 | .; is "" or RG into the Tour array
|
---|
| 107 | .I $E(ARRAY,2)="T" D
|
---|
| 108 | ..I TOT="" S @ARRAY@(STRT)=STRT_U_STOP_U_TOT
|
---|
| 109 | ..I STI="RG" S @ARRAY@(STRT)=STRT_U_STOP_U_TOT
|
---|
| 110 | .;
|
---|
| 111 | .; Only set segments that define On-Call into On-Call array
|
---|
| 112 | .I TOT="ON"!(STI="ON") D
|
---|
| 113 | ..S TOT=$S(TOT'="":TOT,1:STI)
|
---|
| 114 | ..S ARY=$E(ARRAY,1)_"O" S @ARY@(STRT)=STRT_U_STOP_U_TOT
|
---|
| 115 | .;
|
---|
| 116 | .; Only segments of work get in the Call-Back
|
---|
| 117 | .I "^RG^OT^CT^"[("^"_TOT_"^") D
|
---|
| 118 | .. S ARY=$E(ARRAY,1)_"C" S @ARY@(STRT)=STRT_U_STOP_U_TOT
|
---|
| 119 | Q
|
---|
| 120 | ;
|
---|
| 121 | GETPPP(PPIP,DFN,WDAY,BACK,QUIT) ;
|
---|
| 122 | ; Set appropriate variables for prior pay period
|
---|
| 123 | ; Input:
|
---|
| 124 | ; PPIP - Internal format of current pay period
|
---|
| 125 | ; DFN - IEN of employee
|
---|
| 126 | ; WDAY - Day currently being examined
|
---|
| 127 | ; QUIT - Null
|
---|
| 128 | ;
|
---|
| 129 | ; Output:
|
---|
| 130 | ; PPIP - IEN of Prior Pay Period
|
---|
| 131 | ; WDAY - Set to last day of prior pay period
|
---|
| 132 | ; BACK - Counter for number of pay period looked back
|
---|
| 133 | ; QUIT - Will be set to 1 if there is no timecard for
|
---|
| 134 | ; the employee in the prior pay period
|
---|
| 135 | ;
|
---|
| 136 | S PPIP=$O(^PRST(458,PPIP),-1) ; Get Prior PP
|
---|
| 137 | I 'PPIP S QUIT=1 Q ; No prior pay period on file
|
---|
| 138 | ; Check for employee timecard in this PP
|
---|
| 139 | I '$D(^PRST(458,PPIP,"E",DFN,0)) S QUIT=1 Q
|
---|
| 140 | S WDAY=14,BACK=BACK+1
|
---|
| 141 | Q
|
---|
| 142 | ;
|
---|
| 143 | GETNPP(PPIN,DFN,WDAY,NEXT,QUIT) ;
|
---|
| 144 | ; Set appropriate variables for next pay period
|
---|
| 145 | ; Input:
|
---|
| 146 | ; PPIN - Internal format of current pay period
|
---|
| 147 | ; DFN - IEN of employee
|
---|
| 148 | ; WDAY - Day currently being examined
|
---|
| 149 | ; QUIT - Null
|
---|
| 150 | ;
|
---|
| 151 | ; Output:
|
---|
| 152 | ; PPIN - IEN of Next Pay Period
|
---|
| 153 | ; WDAY - Set to first day of next pay period
|
---|
| 154 | ; BACK - Counter for number of pay period looked forward
|
---|
| 155 | ; QUIT - Will be set to 1 if there is no timecard for
|
---|
| 156 | ; the employee in the next pay period
|
---|
| 157 | ;
|
---|
| 158 | S PPIN=$O(^PRST(458,PPIN)) ; Get next PP
|
---|
| 159 | I 'PPIN S QUIT=1 Q ; Next pay period not on file
|
---|
| 160 | ; Check for employee timecard in this PP
|
---|
| 161 | I '$D(^PRST(458,PPIN,"E",DFN,0)) S QUIT=1 Q
|
---|
| 162 | S WDAY=1,NEXT=NEXT+1
|
---|
| 163 | Q
|
---|