[623] | 1 | PRSATE ;WCIOFO/JAH - Enter/Edit Employee (emp) Tour of Duty (ToD) ;03/15/2005
|
---|
| 2 | ;;4.0;PAID;**8,11,27,45,55,93**;Sep 21, 1995;Build 7
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | N PPI,PPE,PRSTLV,TLI,TLE,DFN
|
---|
| 5 | ;
|
---|
| 6 | ; PPI = pay period (pp) internal #.
|
---|
| 7 | ; PPE = pp external form (99-06).
|
---|
| 8 | ; PRSTLV = flag indicates timekeeper (TK) in T&L lookup ^PRSAUTL.
|
---|
| 9 | ; TLI = T&L unit internal #.
|
---|
| 10 | ; TLU = T&L unit # 3-digit
|
---|
| 11 | ;
|
---|
| 12 | ; -Get current pp-internal & external. -Ask user for T&L.
|
---|
| 13 | ; -Loop to ask for emp until TK is done.
|
---|
| 14 | ; --Emp lookup screens emps not in T&L returned by PRSAUTL call.
|
---|
| 15 | ;
|
---|
| 16 | S PRSTLV=2 D ^PRSAUTL Q:TLI<1
|
---|
| 17 | F S DFN=$$GETEMP^PRSATE6(TLE) Q:DFN<1 D
|
---|
| 18 | . S PPI=$P(^PRST(458,0),"^",3),PPE=$P($G(^PRST(458,PPI,0)),"^",1)
|
---|
| 19 | . D TOUREDIT(DFN,PPI,PPE,TLI,TLE,PRSTLV)
|
---|
| 20 | Q
|
---|
| 21 | ;=======================
|
---|
| 22 | ;
|
---|
| 23 | TOUREDIT(DFN,PPI,PPE,TLI,TLE,PRSTLV) ;
|
---|
| 24 | ;
|
---|
| 25 | N C0,NH,FLX,PMP,PP,PB,ENT,SRT,WTL,TYP,Z,TD,ERROR,NOERROR
|
---|
| 26 | ;
|
---|
| 27 | ; Entitlement lookup leaks many variables. Following R used in
|
---|
| 28 | ; this routine but may be looked up again despite the fact they R
|
---|
| 29 | ; leaked by ^PRSAENT. See PRSAENT for further doc.
|
---|
| 30 | ;
|
---|
| 31 | ; C0=emps 0 node in file 450 NH= emps 8B normal hrs
|
---|
| 32 | ; FLX= compressed/flextime code (0=none,C=compressed,F=flextime)
|
---|
| 33 | ; PMP= premium pay indicator
|
---|
| 34 | ; ( D=entitled Sun., F=entitled Sat./Sun.,
|
---|
| 35 | ; E=entitled variable Sat./Sun. premium pay,
|
---|
| 36 | ; G=entitled variable Sun. prem pay, X=title 5 emps
|
---|
| 37 | ; R,C,O=different types of firefighters)
|
---|
| 38 | ; * PP= emps pay plan
|
---|
| 39 | ; DB = pay basis-1:full,2:part,3:intermit
|
---|
| 40 | ; ENT= 39 char entitlement string
|
---|
| 41 | ;
|
---|
| 42 | ; Entitlement lookup.
|
---|
| 43 | ;
|
---|
| 44 | D ^PRSAENT I ENT="" D ERROR(1) S OUT=1 Q
|
---|
| 45 | ;
|
---|
| 46 | ; Display header/Ask pp (NOL^PRSATE2 returns SRT = Current, Next, Last)
|
---|
| 47 | ;
|
---|
| 48 | D NOW^%DTC S NOW=%
|
---|
| 49 | W:$E(IOST,1,2)="C-" @IOF
|
---|
| 50 | W !?26,"VA TIME & ATTENDANCE SYSTEM"
|
---|
| 51 | W !?29,"EMPLOYEE TOUR OF DUTY"
|
---|
| 52 | D HDR^PRSADP1,NOL^PRSATE2
|
---|
| 53 | Q:SRT="^"
|
---|
| 54 | I SRT="L" S PPI=PPI-1,PPE=$P($G(^PRST(458,PPI,0)),"^",1)
|
---|
| 55 | ;
|
---|
| 56 | ; Get emp's flexitime code
|
---|
| 57 | ;
|
---|
| 58 | S FLX=$$FLEXIND^PRSATE6(PPI,DFN,SRT)
|
---|
| 59 | ;
|
---|
| 60 | ; Is emp entitled reg. shed. hrs.?
|
---|
| 61 | ;
|
---|
| 62 | I $E(ENT,1)="0" D
|
---|
| 63 | . S Z=$E(ENT,2),TD=$S(Z="D":3,1:4) D NONE
|
---|
| 64 | E D
|
---|
| 65 | .;
|
---|
| 66 | .; initialize t&l for this ToD
|
---|
| 67 | .;
|
---|
| 68 | . S WTL=TLI
|
---|
| 69 | . I "NL"[SRT D
|
---|
| 70 | .. S TYP=0
|
---|
| 71 | . E D
|
---|
| 72 | .. S TYP=$$ISTEMPTR()
|
---|
| 73 | ..;
|
---|
| 74 | ..; For temp ToDs--ask user for T&L ToD will be worked
|
---|
| 75 | ..; Quit if we don't get a valid T&L unit.
|
---|
| 76 | ..;
|
---|
| 77 | .. I TYP S WTL=$$ASKTLWRK^PRSATE6(TLE)
|
---|
| 78 | .;
|
---|
| 79 | .; Save current ToD in case user aborts with an unacceptable ToD.
|
---|
| 80 | .;
|
---|
| 81 | . D SAVETOUR^PRSATE6(PPI,DFN)
|
---|
| 82 | .;
|
---|
| 83 | . I WTL'<1,TYP'["^" D
|
---|
| 84 | .. D A1
|
---|
| 85 | ..;
|
---|
| 86 | ..; verify firefighter ToD after compressed ind. edit. Don't accept
|
---|
| 87 | ..; ToD until its within guidlines. If TK force exits, restore old ToD.
|
---|
| 88 | ..;
|
---|
| 89 | .. S NOERROR=0
|
---|
| 90 | .. F D Q:NOERROR
|
---|
| 91 | ... N ERROR D FFTOUR^PRSATE6(PPI,DFN,SRT,.ERROR)
|
---|
| 92 | ... I $$ISERRORS^PRSATE6(.ERROR) D
|
---|
| 93 | .... I $$ASKTOFIX^PRSATE6() D
|
---|
| 94 | ..... D A1
|
---|
| 95 | .... E D
|
---|
| 96 | ..... D RESTORE^PRSATE6(PPI,DFN) S NOERROR=1
|
---|
| 97 | ... E D
|
---|
| 98 | .... S NOERROR=1
|
---|
| 99 | Q
|
---|
| 100 | ;=======================
|
---|
| 101 | ;
|
---|
| 102 | ISTEMPTR() ; IS TEMPORARY ToD ?
|
---|
| 103 | ; Ask user if ToD is temp or perm & convert TYP to true false flag
|
---|
| 104 | ; Permanent set TYP=0, Temporary set TYP=true (1)
|
---|
| 105 | ;
|
---|
| 106 | S TYP=$$ASKTEMP^PRSATE6() I TYP'["^" S TYP=$E(TYP,1)="T",WTL=TLI
|
---|
| 107 | Q TYP
|
---|
| 108 | ;=======================
|
---|
| 109 | ;
|
---|
| 110 | A1 ; Set up for emps ToD look up. Screen allows Daily ToDs & days off
|
---|
| 111 | ; for daily emps. Everyone else gets days off & all other ToDs.
|
---|
| 112 | ; Screen further ensures ToD is available either to all t&ls
|
---|
| 113 | ; or to t&l that this emp is working in.
|
---|
| 114 | ;
|
---|
| 115 | N DIC,X
|
---|
| 116 | S DIC="^PRST(457.1,",DIC(0)="AEQMN"
|
---|
| 117 | S DIC("S")="I "_$S($E(ENT,1)="D":"Y<3",1:"Y>5!(Y=1)")_",$P(^PRST(457.1,+Y,0),U,4)!($D(^PRST(457.1,+Y,""T"",""B"",WTL)))"
|
---|
| 118 | ;
|
---|
| 119 | ; Setup a fixed or varying ToD. Compressed ToDs must be varying;
|
---|
| 120 | ; ask TK about all others.
|
---|
| 121 | ;
|
---|
| 122 | I FLX="C" D
|
---|
| 123 | . D VAR
|
---|
| 124 | E D
|
---|
| 125 | . S X=$$ASKFIXED()
|
---|
| 126 | . Q:X="^"
|
---|
| 127 | . I X="N" D
|
---|
| 128 | .. D VAR
|
---|
| 129 | . E D FX
|
---|
| 130 | Q
|
---|
| 131 | ;=======================
|
---|
| 132 | ;
|
---|
| 133 | FX ; Fixed ToD
|
---|
| 134 | S DIC("A")="Select TOUR OF DUTY: "
|
---|
| 135 | W ! D ^DIC
|
---|
| 136 | Q:Y'>0
|
---|
| 137 | S TD=+Y,Y=$G(^PRST(457.1,TD,1)),TDH=$P(^(0),"^",6),HRS=TDH*10
|
---|
| 138 | S (ZENT,STR)=""
|
---|
| 139 | D OT^PRSATP,VS^PRSATE0
|
---|
| 140 | I STR'="" W *7,!!,STR G FX
|
---|
| 141 | I '$D(^PRST(458,PPI,"E",DFN,"D",0)) S ^(0)="^458.02^14^14"
|
---|
| 142 | I SRT="N" D
|
---|
| 143 | . D F1
|
---|
| 144 | E D
|
---|
| 145 | . F DAY=2:1:6,9:1:13 D SET
|
---|
| 146 | . S TD=1,(Y,TDH)="" F DAY=1,7,8,14 D SET
|
---|
| 147 | . W " ... done" D:HRS'=NH ERROR(2,NH,HRS)
|
---|
| 148 | . D T2,^PRSATE5
|
---|
| 149 | D HOL,RS
|
---|
| 150 | Q
|
---|
| 151 | ;=======================
|
---|
| 152 | ;
|
---|
| 153 | F1 F DAY=2:1:6,9:1:13 D NX
|
---|
| 154 | S TD=1 F DAY=1,7,8,14 D NX
|
---|
| 155 | W " ... done"
|
---|
| 156 | D:HRS'=NH ERROR(2,NH,HRS)
|
---|
| 157 | Q
|
---|
| 158 | ;=======================
|
---|
| 159 | ;
|
---|
| 160 | VAR ; Variable ToD
|
---|
| 161 | D ^PRSATE0
|
---|
| 162 | I SRT'="N" D T2,^PRSATE5
|
---|
| 163 | D HOL,RS
|
---|
| 164 | Q
|
---|
| 165 | ;=======================
|
---|
| 166 | ;
|
---|
| 167 | NONE ; No ToD
|
---|
| 168 | N TYP2,UPDT,Y,TDH
|
---|
| 169 | W !!,"This is an intermittent employee with no specified tour."
|
---|
| 170 | W !!,"Time records will now be updated to indicate this."
|
---|
| 171 | I '$D(^PRST(458,PPI,"E",DFN,"D",0)) S ^(0)="^458.02^14^14"
|
---|
| 172 | I '$$PERM^PRSALIB(PPI,DFN) D
|
---|
| 173 | . W !!,"Not all tour days are assigned a permanent status."
|
---|
| 174 | . I $$UPDTQ^PRSALIB(),$$TMPST^PRSALIB(.TYP2) D UPDSTAT^PRSALIB(PPI,DFN,TYP2)
|
---|
| 175 | S (Y,TDH)="",TYP=0,WTL=TLI
|
---|
| 176 | I SRT="N" D
|
---|
| 177 | . F DAY=1:1:14 D NX
|
---|
| 178 | E D
|
---|
| 179 | . F DAY=1:1:14 D SET
|
---|
| 180 | W " ... done"
|
---|
| 181 | D HOL,RS
|
---|
| 182 | Q
|
---|
| 183 | ;=======================
|
---|
| 184 | ;
|
---|
| 185 | RS ; Get Comp Ind
|
---|
| 186 | S Y=$G(^PRST(458,PPI,"E",DFN,0))
|
---|
| 187 | S FLX=$S((SRT="N")&($P(Y,U,7)]""):$P(Y,U,7),1:$P(Y,U,6))
|
---|
| 188 | S DIR(0)="SAM^C:Compressed;F:Flexitime;0:None"
|
---|
| 189 | S DIR("A")="Compressed Tour Indicator: "
|
---|
| 190 | S DIR("B")=$S(FLX="C":"Compressed",FLX="F":"Flexitime",1:"None")
|
---|
| 191 | D ^DIR K DIR I "^C^F^0^"'[(U_Y_U) S Y=FLX
|
---|
| 192 | ;
|
---|
| 193 | ; Intermittent employee cannot have compressed tour.
|
---|
| 194 | ;
|
---|
| 195 | I $P(C0,U,10)=3,Y="C" D G RS
|
---|
| 196 | . W *7,!?5,"Compressed tour not valid for this employee."
|
---|
| 197 | ;
|
---|
| 198 | I Y="F" S Z=0 D I Z G RS
|
---|
| 199 | .S PAY=$P(C0,U,21),PB=$P(C0,U,20)
|
---|
| 200 | .I "0123456789GU"'[PAY S Z=1
|
---|
| 201 | .I PAY="G",PB'=2 S Z=1
|
---|
| 202 | .I PAY="U","27EXT"'[PB S Z=1
|
---|
| 203 | .I Z W *7,!?5,"Flexitime not valid for this employee."
|
---|
| 204 | .Q
|
---|
| 205 | S $P(^PRST(458,PPI,"E",DFN,0),U,$S(SRT="N":7,1:6))=Y
|
---|
| 206 | I $D(^PRST(458,"ATC",DFN)) D UPD^PRSASAL
|
---|
| 207 | Q
|
---|
| 208 | ;=======================
|
---|
| 209 | ;
|
---|
| 210 | NX ; Set Next ToD
|
---|
| 211 | S Z=$G(^PRST(458,PPI,"E",DFN,"D",DAY,0))
|
---|
| 212 | Q:$P(Z,"^",2)=TD&('$P(Z,"^",3))
|
---|
| 213 | ;
|
---|
| 214 | S $P(Z,"^",3,4)="2^"_TD,$P(Z,"^",10,11)=DUZ_"^"_NOW
|
---|
| 215 | S ^PRST(458,PPI,"E",DFN,"D",DAY,0)=Z,^PRST(458,"ATC",DFN,PPI,DAY)=""
|
---|
| 216 | Q
|
---|
| 217 | ;=======================
|
---|
| 218 | ;
|
---|
| 219 | SET ; Set ToD
|
---|
| 220 | N ZLASTPP
|
---|
| 221 | S U="^"
|
---|
| 222 | ;
|
---|
| 223 | ; Get Zero node of emp pp rec, Old ToD, & Prior scheduled ToD.
|
---|
| 224 | ; ZLASTPP is true if a ToD present on this day last pp.
|
---|
| 225 | ;
|
---|
| 226 | S Z=$G(^PRST(458,PPI,"E",DFN,"D",DAY,0))
|
---|
| 227 | S ZLASTPP=$P($G(^PRST(458,PPI-1,"E",DFN,"D",DAY,0)),U,2)'=""
|
---|
| 228 | S OLD=$P(Z,U,2),SCH=$P(Z,U,4)
|
---|
| 229 | ;
|
---|
| 230 | ; Quit if old ToD=this ToD & emp rec start/stop=ToD file start/stop.
|
---|
| 231 | ;
|
---|
| 232 | Q:(OLD=TD)&($G(^PRST(458,PPI,"E",DFN,"D",DAY,1))=Y)
|
---|
| 233 | ;
|
---|
| 234 | ; Z is updated with new ToD info & replaces the emp ToD record.
|
---|
| 235 | ;
|
---|
| 236 | S $P(Z,U,8)=TDH
|
---|
| 237 | S $P(Z,U,10,11)=DUZ_U_NOW
|
---|
| 238 | I $P(Z,U,12) S $P(Z,U,12)="" ; remove holiday flag
|
---|
| 239 | ;
|
---|
| 240 | ; Temp ToD, store T&L ToD will be worked if it's not emp's usual t&l.
|
---|
| 241 | ;
|
---|
| 242 | I TYP S:TLI'=WTL $P(Z,U,9)=WTL
|
---|
| 243 | ;
|
---|
| 244 | ; No existing ToD on this day.
|
---|
| 245 | ;
|
---|
| 246 | I OLD="" D
|
---|
| 247 | . S $P(Z,U,1,3)=DAY_U_TD_U_TYP
|
---|
| 248 | . I ZLASTPP D S0
|
---|
| 249 | E D
|
---|
| 250 | .;
|
---|
| 251 | .; clean out postings and other ToD info since ToD is changing
|
---|
| 252 | .;
|
---|
| 253 | . D CLEANTOD(PPI,DFN,DAY,TD)
|
---|
| 254 | .;
|
---|
| 255 | .;
|
---|
| 256 | .;
|
---|
| 257 | . S:SCH $P(Z,U,5,7)="^^"
|
---|
| 258 | . I SCH="" D
|
---|
| 259 | .. S $P(Z,U,2,4)=TD_U_TYP_U_OLD
|
---|
| 260 | .. D S0
|
---|
| 261 | . E D
|
---|
| 262 | .. I SCH=TD D
|
---|
| 263 | ... S $P(Z,U,2,4)=TD_"^^"
|
---|
| 264 | ... K ^PRST(458,"ATC",DFN,PPI,DAY)
|
---|
| 265 | .. E D
|
---|
| 266 | ... S $P(Z,U,2,3)=TD_U_TYP
|
---|
| 267 | ... D S0
|
---|
| 268 | ;
|
---|
| 269 | D S1
|
---|
| 270 | Q
|
---|
| 271 | ;=======================
|
---|
| 272 | ;
|
---|
| 273 | ; Set up x-ref for supervisor approval of ToD change
|
---|
| 274 | ;
|
---|
| 275 | S0 S ^PRST(458,"ATC",DFN,PPI,DAY)=""
|
---|
| 276 | Q
|
---|
| 277 | ;=======================
|
---|
| 278 | ;
|
---|
| 279 | S1 ;
|
---|
| 280 | S ^PRST(458,PPI,"E",DFN,"D",DAY,0)=Z S:Y'="" ^(1)=Y
|
---|
| 281 | Q
|
---|
| 282 | ;=======================
|
---|
| 283 | ;
|
---|
| 284 | T2 ; Ask if second ToD
|
---|
| 285 | N X
|
---|
| 286 | ;
|
---|
| 287 | ; Don't ask for Daily ToDs
|
---|
| 288 | ;
|
---|
| 289 | Q:$E(ENT,1)="D"
|
---|
| 290 | ;
|
---|
| 291 | S X=$$ASK2NDTR()
|
---|
| 292 | Q:X'="Y" G ^PRSATE4
|
---|
| 293 | ;=======================
|
---|
| 294 | ;
|
---|
| 295 | HOL ; Determine if Holiday within ToD
|
---|
| 296 | N DAY
|
---|
| 297 | D ^PRSAPPH
|
---|
| 298 | Q:'$D(HOL)
|
---|
| 299 | S TT="HX",DUP=1
|
---|
| 300 | D E^PRSAPPH
|
---|
| 301 | Q
|
---|
| 302 | ;=======================
|
---|
| 303 | ;
|
---|
| 304 | CLEANTOD(PPI,DFN,DAY,TD) ; CLEAN OUT TOUR
|
---|
| 305 | N PRSDT,MIEN
|
---|
| 306 | K ^PRST(458,PPI,"E",DFN,"D",DAY,1),^(2),^(3),^(10) I TD<5 K ^(4) S $P(Z,U,13,15)="^^"
|
---|
| 307 | ; if employee is PTP with active memo then reset the ESR day
|
---|
| 308 | S PRSDT=$P($G(^PRST(458,PPI,1)),U,DAY)
|
---|
| 309 | S MIEN=$$MIEN^PRSPUT1(DFN,PRSDT)
|
---|
| 310 | I MIEN D
|
---|
| 311 | . N PRSFDA
|
---|
| 312 | . S PRSFDA(458.02,DAY_","_DFN_","_PPI_",",146)="3" ; status = resubmit
|
---|
| 313 | . S PRSFDA(458.02,DAY_","_DFN_","_PPI_",",148)="Tour Changed" ; remarks
|
---|
| 314 | . D FILE^DIE("","PRSFDA"),MSG^DIALOG()
|
---|
| 315 | Q
|
---|
| 316 | ;=======================
|
---|
| 317 | ;
|
---|
| 318 | ERROR(NUM,VAR1,VAR2) ;
|
---|
| 319 | W *7,!!
|
---|
| 320 | I NUM=1 W "Employee has no Pay Entitlement table entry."
|
---|
| 321 | I NUM=2 D
|
---|
| 322 | . Q:$G(NH)=112
|
---|
| 323 | . W "Warning: Normal Hours are ",$G(VAR1),"; Tour Hours are ",$G(VAR2)
|
---|
| 324 | Q
|
---|
| 325 | ;=======================
|
---|
| 326 | ;
|
---|
| 327 | ASKFIXED() ;GET USER'S YES OR NO RESPONSE TO FIXED ToD QUESTION
|
---|
| 328 | N DIR,DIRUT,Y
|
---|
| 329 | S DIR("A")="Do you wish to enter a fixed Mon-Fri Tour"
|
---|
| 330 | S DIR(0)="Y"
|
---|
| 331 | S DIR("?")="Answer NO to create any other type of tour."
|
---|
| 332 | S DIR("?",1)="Fixed tours are Monday - Friday with the same hours."
|
---|
| 333 | D ^DIR
|
---|
| 334 | S RESP=$S(Y=1:"Y",Y=0:"N",1:"^")
|
---|
| 335 | Q RESP
|
---|
| 336 | ;=======================
|
---|
| 337 | ;
|
---|
| 338 | ASK2NDTR() ;GET USER'S YES OR NO RESPONSE TO 2nd ToD QUESTION
|
---|
| 339 | N DIR,DIRUT,Y
|
---|
| 340 | S DIR("A")="Do you wish to enter a Second Tour for any Day"
|
---|
| 341 | S DIR(0)="Y"
|
---|
| 342 | S DIR("B")="N"
|
---|
| 343 | S DIR("?",1)="Answer Yes to add a second tour. No to continue."
|
---|
| 344 | S DIR("?")="Enter ^ to escape and cancel this tour change."
|
---|
| 345 | D ^DIR
|
---|
| 346 | S RESP=$S(Y=1:"Y",Y=0:"N",1:"^")
|
---|
| 347 | Q RESP
|
---|
| 348 | ;=======================
|
---|
| 349 | ;
|
---|