| 1 | PRSAPPU ; HISC/REL,WIRMFO/JAH - Calculate Pay Period; 22-JAN-1998
 | 
|---|
| 2 |  ;;4.0;PAID;**19,22,35**;Sep 21, 1995
 | 
|---|
| 3 |  ;====================================================================
 | 
|---|
| 4 | PP ;Calculate Pay Period from a FileMan date.
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ; Input :  D1 = FileMan Date
 | 
|---|
| 7 |  ; Output : D1 - unchanged
 | 
|---|
| 8 |  ;          PPI = internal entry of pay period if available else undef.
 | 
|---|
| 9 |  ;          PPE = Pay period that D1 falls in, formatted yy-pp.
 | 
|---|
| 10 |  ;          PP4Y = Pay period with 4 digit year: yyyy-pp.
 | 
|---|
| 11 |  ;          DAY = Day # of D1 within PPE
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ;   1.  Get 1st day of leave year (X2) that the date D1 falls in.
 | 
|---|
| 14 |  ;   2.  Reserve 2 and 4 digit year to build pay period.
 | 
|---|
| 15 |  ;   3.  Find # of days between 1st day & D1 and divide by 14
 | 
|---|
| 16 |  ;       to determine pay period #.  Mod to find day w/in pp.
 | 
|---|
| 17 |  ;   4.  Build Pay period with year and pay period #.
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  N Y,K,X1,X2,X
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  S Y=$P($T(DAT),";;",2)
 | 
|---|
| 22 |  F K=1:1:23 Q:D1<$P(Y,",",K)
 | 
|---|
| 23 |  S X2=$P(Y,",",K-1)
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  S PPE=$E(X2,2,3),PP4Y=$E(X2,1,3)+1700
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  S X1=D1
 | 
|---|
| 28 |  D ^%DTC
 | 
|---|
| 29 |  S Y=X\14+1,DAY=X#14+1
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  S PPE=PPE_"-"_$S(Y<10:"0"_Y,1:Y)
 | 
|---|
| 32 |  S PPI=$O(^PRST(458,"B",PPE,0))
 | 
|---|
| 33 |  S PP4Y=PP4Y_"-"_$P(PPE,"-",2)
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 |  ;====================================================================
 | 
|---|
| 37 | NX ; Calculate Date of 1st day of Pay Period.
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ; INPUT:   PPE = Pay Period formatted YY-PP.
 | 
|---|
| 40 |  ; OUTPUT:  D1 = FileMan Date of 1st day of pay period.
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  N Y,K,X1,X2
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  S Y=$P($T(DAT),";;",2)
 | 
|---|
| 45 |  F K=1:1:23 Q:$E($P(Y,",",K),2,3)=$E(PPE,1,2)
 | 
|---|
| 46 |  S X1=$P(Y,",",K),X2=14*($E(PPE,4,5)-1) D C^%DTC
 | 
|---|
| 47 |  S D1=X Q
 | 
|---|
| 48 |  ;====================================================================
 | 
|---|
| 49 | DTP ; Printable Date
 | 
|---|
| 50 |  S %=X,Y=$J(+$E(X,6,7),2)_"-"_$P("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"," ",+$E(X,4,5))_"-"_$E(X,2,3)
 | 
|---|
| 51 |  K % Q
 | 
|---|
| 52 |  ;====================================================================
 | 
|---|
| 53 |  ;These FileMan dates correspond to 1st day of pay period #1
 | 
|---|
| 54 |  ;of respective years.
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | DAT ;;2910113,2920112,2930110,2940109,2950108,2960107,2970105,2980104,2990103,3000102,3010114,3020113,3030112,3040111,3050109,3060108,3070107,3080106,3090104,3100103,3110102,3120101,3130113
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ;====================================================================
 | 
|---|
| 59 | PREP(CURP) ;given a pay period, return the previous pay period.
 | 
|---|
| 60 |  ;  WARNING: This call only valid for years that are in the seed
 | 
|---|
| 61 |  ;           range of the FileMan dates on the DAT^PRSAPPU line.
 | 
|---|
| 62 |  ;           If pay period passed is out of this range then
 | 
|---|
| 63 |  ;           0 is returned.
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  ;Input:   CURP =  Pay period, passed in format YY-PP or YYYY-PP
 | 
|---|
| 66 |  ;Output:  function returns previous pay period in YYYY-PP format.
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  N PPE,PPI,D1,DAY,INYR,RANGE,FIRSTPP,INPP
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  ;validate input - pay period and year
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  Q:'$$VALIDPP(CURP) 0
 | 
|---|
| 73 |  S INPP=$P(CURP,"-",2)
 | 
|---|
| 74 |  S INYR=$P(CURP,"-")
 | 
|---|
| 75 |  S INYR=$E(INYR,$L(INYR)-1,$L(INYR))
 | 
|---|
| 76 |  S PPE=INYR_"-"_INPP
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  ; Handle special case of 1ST PAY PERIOD iN the VALID RANGE
 | 
|---|
| 79 |  S RANGE=$P($T(DAT),";;",2)
 | 
|---|
| 80 |  S FIRSTPP=$E($P(RANGE,","),2,3)_"-01"
 | 
|---|
| 81 |  Q:(PPE=FIRSTPP) $E($P(RANGE,","),1,3)+1700_"-26"
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  ;Get 1st date of input pay period.
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  D NX
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ;Subtract 14 days from current to get 1st day of previous pay period.
 | 
|---|
| 88 |  S X1=D1,X2=-14 D C^%DTC S D1=X
 | 
|---|
| 89 |  D PP
 | 
|---|
| 90 |  Q PP4Y
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ;====================================================================
 | 
|---|
| 93 | NXTPP(CURP) ;given a payperiod, return the NEXT payperiod. YYYY-PP
 | 
|---|
| 94 |  ;  WARNING: This call only valid for years that are in the seed
 | 
|---|
| 95 |  ;           range of the FileMan dates on the DAT^PRSAPPU line.
 | 
|---|
| 96 |  ;           If pay period passed is out of this range then
 | 
|---|
| 97 |  ;           0 is returned.
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  ;Input:   CURP =  Pay period, passed in format YY-PP or YYYY-PP
 | 
|---|
| 100 |  ;Output:  function returns previous pay period in YYYY-PP format.
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 |  N PPE,PPI,D1,X1,X2,INPP,INYR,D1
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  Q:'$$VALIDPP(CURP) 0
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  ;Get 1st date of current pay period.
 | 
|---|
| 107 |  S INPP=$P(CURP,"-",2)
 | 
|---|
| 108 |  S INYR=$P(CURP,"-")
 | 
|---|
| 109 |  S INYR=$E(INYR,$L(INYR)-1,$L(INYR))
 | 
|---|
| 110 |  S PPE=INYR_"-"_INPP
 | 
|---|
| 111 |  D NX
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  ;Add 14 days to current to get 1st day of next pay period.
 | 
|---|
| 114 |  S X1=D1,X2=14 D C^%DTC S D1=X
 | 
|---|
| 115 |  D PP
 | 
|---|
| 116 |  Q PP4Y
 | 
|---|
| 117 |  ;====================================================================
 | 
|---|
| 118 | VALIDPP(PP) ;Valid pay period must be in form YY-PP or YYYY-PP where
 | 
|---|
| 119 |  ;        pp is pay periods 01-26 and
 | 
|---|
| 120 |  ;        yy or yyyy are years in the FileMan dates at DAT^PRSAPPU
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  N VALID,INVALID,VALYRS,RANGE,INCR,INPP,INYR,TESTYR
 | 
|---|
| 123 |  S VALID=1,INVALID=0
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 |  ;validate input - year and pay period
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  S VALYRS=","
 | 
|---|
| 128 |  S RANGE=$P($T(DAT),";;",2)
 | 
|---|
| 129 |  F INCR=1:1:$L(RANGE,",") S VALYRS=VALYRS_$E($P(RANGE,",",INCR),2,3)_","
 | 
|---|
| 130 |  S INYR=$P(PP,"-")
 | 
|---|
| 131 |  I '(($L(INYR)=2)!($L(INYR)=4)) Q INVALID
 | 
|---|
| 132 |  S INYR=$E(INYR,$L(INYR)-1,$L(INYR))
 | 
|---|
| 133 |  S TESTYR=","_INYR_","
 | 
|---|
| 134 |  I VALYRS'[TESTYR Q INVALID
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 |  S INPP=$P(PP,"-",2)
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |  S VALPPS=",01,02,03,04,05,06,07,08,09,"
 | 
|---|
| 139 |  S TESTINPP=","_INPP_","
 | 
|---|
| 140 |  I '((VALPPS[TESTINPP)!((INPP>9)&(INPP<28))) Q INVALID
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  ; pay period 27 is not always valid.
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  I INPP=27 I $P($$NXTPP(INYR_"-26"),"-",2)'=27 Q INVALID
 | 
|---|
| 145 |  Q VALID
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  ;====================================================================
 | 
|---|
| 148 | PPRANGE(STARTPP,ENDPP,STPP4Y,ENDPP4Y) ;get a pay period range from input.
 | 
|---|
| 149 |  ;  INPUT: none
 | 
|---|
| 150 |  ;  OUTPUT:  STARTPP = 1st pay period in range.  0 on abnormal exit.
 | 
|---|
| 151 |  ;           ENDPP   = 2ND pay period in range.  0 on abnormal exit.
 | 
|---|
| 152 |  ; 
 | 
|---|
| 153 |  ; -Ask user to select beginning and ending pay periods from the 
 | 
|---|
| 154 |  ;  pay periods that are on file.
 | 
|---|
| 155 |  ; -Compare dates of 1st day of each of the input pay periods
 | 
|---|
| 156 |  ;  to ensure that the beginning pay period input is LESS THAN OR = TO
 | 
|---|
| 157 |  ;  the ending pay period input.
 | 
|---|
| 158 |  ;
 | 
|---|
| 159 |  N OUT,OK
 | 
|---|
| 160 |  S (OUT,OK)=0
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 |  F I=0:0 Q:(OK!OUT)  D
 | 
|---|
| 163 |  .N DIC,FR,X,Y,TO,DAY,PPE,PPI,PP4Y,D1,STRTDAY1,ENDDAY1
 | 
|---|
| 164 |  .S (STARTPP,ENDPP)=0
 | 
|---|
| 165 |  .;
 | 
|---|
| 166 |  .S D1=DT D PP S DIC("B")=$E($$PREP(PPE),3,7)
 | 
|---|
| 167 |  .S DIC="^PRST(458,"
 | 
|---|
| 168 |  .S DIC(0)="AEQZ",DIC("A")="Enter Beginning Pay Period: "
 | 
|---|
| 169 |  .D ^DIC I $D(DTOUT)!$D(DUOUT)!(Y<0) S OUT=1
 | 
|---|
| 170 |  .Q:OUT
 | 
|---|
| 171 |  .S STARTPP=Y(0,0)
 | 
|---|
| 172 |  .;
 | 
|---|
| 173 |  .; ask user for 2nd pay period in range. Use default of
 | 
|---|
| 174 |  .; the pay period they selected for the 1st pp.
 | 
|---|
| 175 |  .;
 | 
|---|
| 176 |  .S DIC("B")=STARTPP,DIC("A")="Enter Ending Pay Period: "
 | 
|---|
| 177 |  .D ^DIC I $D(DTOUT)!$D(DUOUT) S OUT=1
 | 
|---|
| 178 |  .Q:OUT
 | 
|---|
| 179 |  .S ENDPP=Y(0,0)
 | 
|---|
| 180 |  .;
 | 
|---|
| 181 |  .;Get 1st day of selected pay periods. Compare the dates to ensure
 | 
|---|
| 182 |  .;that a valid range has been entered.
 | 
|---|
| 183 |  .;
 | 
|---|
| 184 |  .S PPE=STARTPP D NX S STRTDAY1=D1
 | 
|---|
| 185 |  .S PPE=ENDPP D NX S ENDDAY1=D1
 | 
|---|
| 186 |  .I ENDDAY1-STRTDAY1<0 D
 | 
|---|
| 187 |  .. W !,"Invalid pay period range."
 | 
|---|
| 188 |  .. W !,"Ending pay period should be later than or equal to beginning pay period."
 | 
|---|
| 189 |  .E  D
 | 
|---|
| 190 |  ..  S D1=STRTDAY1 D PP^PRSAPPU S STPP4Y=PP4Y
 | 
|---|
| 191 |  ..  S D1=ENDDAY1 D PP S ENDPP4Y=PP4Y
 | 
|---|
| 192 |  ..  S OK=1
 | 
|---|
| 193 |  I OUT S (STARTPP,ENDPP,ENDPP4Y,STPP4Y)=0
 | 
|---|
| 194 |  ;
 | 
|---|
| 195 |  Q
 | 
|---|
| 196 |  ;==============================================================
 | 
|---|
| 197 | IC(YY,FMT,FW,BDT) ;Infer Century from 2-digit year
 | 
|---|
| 198 |  ; YY  - 2 digit year
 | 
|---|
| 199 |  ; FMT - (optional) format of returned value (DEFAULT 3)
 | 
|---|
| 200 |  ;       3 for YYY (fileman year .i.e. first numbers of fileman date)
 | 
|---|
| 201 |  ;       4 for YYYY (standard year)
 | 
|---|
| 202 |  ; FW  - (optional) # of future years from base in window (DEFAULT 20)
 | 
|---|
| 203 |  ; BDT - (optional) base date (fileman) for sliding window (DEFAULT DT)
 | 
|---|
| 204 |  ;
 | 
|---|
| 205 |  N FMY
 | 
|---|
| 206 |  I YY'?2N Q "" ; invalid 2-digit year - return null value
 | 
|---|
| 207 |  I $G(FMT)'=3&($G(FMT)'=4) S FMT=3
 | 
|---|
| 208 |  I $G(FW)'?1.2N S FW=20
 | 
|---|
| 209 |  I $G(BDT)'?7N S BDT=DT
 | 
|---|
| 210 |  I BDT'>1000000 Q "" ; invalid base date
 | 
|---|
| 211 |  ; start with century of base date and adjust if necessary
 | 
|---|
| 212 |  S FMY=$E(BDT)+$S($E(BDT,2,3)-YY>(99-FW):1,$E(BDT,2,3)-YY<-FW:-1,1:0)_YY
 | 
|---|
| 213 |  Q $S(FMT=4:FMY+1700,1:FMY)
 | 
|---|
| 214 |  ;
 | 
|---|
| 215 |  ;PRSZ
 | 
|---|
| 216 |  ;==============================================================
 | 
|---|
| 217 | P35POST ;PRS*4.0*35 post install - execute set logic on new AB x-ref.
 | 
|---|
| 218 |  ;
 | 
|---|
| 219 |  I $$PATCH^XPDUTL("PRS*4.0*35") D MSSG(0) Q
 | 
|---|
| 220 |  N FILE D MSSG(1) F FILE=458,459 D XREF4YR(FILE)
 | 
|---|
| 221 |  Q
 | 
|---|
| 222 |  ;==============================================================
 | 
|---|
| 223 | MSSG(FLAG) ;PRS*4.0*35 - OUTPUT POST INSTALLATION MESSAGE.
 | 
|---|
| 224 |  N MSSG
 | 
|---|
| 225 |  I FLAG S MSSG="Updating AB cross reference in Files 458 and 459."
 | 
|---|
| 226 |  E  S MSSG="AB X-ref NOT built. Built during earlier PRS*4.0*35 install."
 | 
|---|
| 227 |  D MES^XPDUTL("      "_MSSG)
 | 
|---|
| 228 |  Q
 | 
|---|
| 229 |  ;==============================================================
 | 
|---|
| 230 | XREF4YR(F) ;SET AB 4DIGIT YEAR XREF OF FILE 458 OR 459.
 | 
|---|
| 231 |  ;
 | 
|---|
| 232 |  Q:'((F=458)!(F=459))
 | 
|---|
| 233 |  N DIK S DIK="^PRST("_F_",",DIK(1)=".01^AB" D ENALL^DIK
 | 
|---|
| 234 |  Q
 | 
|---|