Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/PAID-PRS/PRSATE.m

    r613 r623  
    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,112**;Sep 21, 1995;Build 54
    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=% K %
    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         K NOW 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         S DB=$P(C0,U,10) I FLX="C"!("KM"[PP&(DB=1)&(NH=72)) 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         K DB 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 K HRS,STR
    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         K PAY,ZENT 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         K OLD,SCH 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 K DUP,HOL,TT
    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         Q $S(Y=1:"Y",Y=0:"N",1:"^")
    335         ;=======================
    336         ;
    337 ASK2NDTR()      ;GET USER'S YES OR NO RESPONSE TO 2nd ToD QUESTION
    338         N DIR,DIRUT,Y
    339         S DIR("A")="Do you wish to enter a Second Tour for any Day"
    340         S DIR(0)="Y"
    341         S DIR("B")="N"
    342         S DIR("?",1)="Answer Yes to add a second tour.  No to continue."
    343         S DIR("?")="Enter ^ to escape and cancel this tour change."
    344         D ^DIR
    345         Q $S(Y=1:"Y",Y=0:"N",1:"^")
    346         ;=======================
    347         ;
     1PRSATE ;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 ;
     23TOUREDIT(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 ;
     102ISTEMPTR() ; 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 ;
     110A1 ; 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 ;
     133FX ; 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 ;
     153F1 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 ;
     160VAR ; Variable ToD
     161 D ^PRSATE0
     162 I SRT'="N" D T2,^PRSATE5
     163 D HOL,RS
     164 Q
     165 ;=======================
     166 ;
     167NONE ; 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 ;
     185RS ; 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 ;
     210NX ; 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 ;
     219SET ; 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 ;
     275S0 S ^PRST(458,"ATC",DFN,PPI,DAY)=""
     276 Q
     277 ;=======================
     278 ;
     279S1 ;
     280 S ^PRST(458,PPI,"E",DFN,"D",DAY,0)=Z S:Y'="" ^(1)=Y
     281 Q
     282 ;=======================
     283 ;
     284T2 ; 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 ;
     295HOL ; 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 ;
     304CLEANTOD(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 ;
     318ERROR(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 ;
     327ASKFIXED() ;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 ;
     338ASK2NDTR() ;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 ;
Note: See TracChangeset for help on using the changeset viewer.