| 1 | PRSPAPU ;WOIFO/SAB-WOIFO/SAB - AUTO POST UTILITIES FOR EA & LV ;10/30/2004
 | 
|---|
| 2 |  ;;4.0;PAID;**93**;Sep 21, 1995;Build 7
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | TCLCK(PRSIEN,S1,E1,S2,E2,PPLCK,PPLCKE) ; Time Card Lock for Date Range Change
 | 
|---|
| 7 |  ; This API attempts to lock employee timecards for pay periods that
 | 
|---|
| 8 |  ; are impacted by a change to a date range.  Only existing pay periods
 | 
|---|
| 9 |  ; that are covered by a PTP memo will be locked.
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ; Input
 | 
|---|
| 12 |  ;   PRSIEN   - Employee IEN (file 450)
 | 
|---|
| 13 |  ;   S1       - Old Start Date (FileMan internal)
 | 
|---|
| 14 |  ;   E1       - Old End Date (Fileman internal)
 | 
|---|
| 15 |  ;   S2       - New Start Date (FileMan internal)
 | 
|---|
| 16 |  ;   E2       - New End Date (Fileman internal)
 | 
|---|
| 17 |  ;   PPLCK()  - Array of Locked Pay Periods passed by reference
 | 
|---|
| 18 |  ;   PPLCKE() - Array of Pay Periods with Lock Error passed by reference
 | 
|---|
| 19 |  ;   Note that both these arrays are initialized by this API.
 | 
|---|
| 20 |  ; Output
 | 
|---|
| 21 |  ;   PPLCK()  - Array of Locked Pay Periods may be updated
 | 
|---|
| 22 |  ;              format PPLCK(pay period IEN file 458)=""
 | 
|---|
| 23 |  ;   PPLCKE() - Array of Pay Periods with Lock Error may be updated
 | 
|---|
| 24 |  ;              format PPLCKE(pay period IEN file 458)=""
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  K PPLCK,PPLCKE
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  ;if S1 and E1 have values and S2 and E2 are null then lock from S1 to E1
 | 
|---|
| 29 |  I S1,E1,'S2,'E2 D LCK(PRSIEN,S1,E1,.PPLCK,.PPLCKE)
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  ;if S1 and E1 are null and S2 and E2 have values then lock from S2 to E2
 | 
|---|
| 32 |  I 'S1,'E1,S2,E2 D LCK(PRSIEN,S2,E2,.PPLCK,.PPLCKE)
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  ;if S1, E1, S2, and E2 have values then lock impacted ranges
 | 
|---|
| 35 |  I S1,E1,S2,E2 D
 | 
|---|
| 36 |  . N X1,X2
 | 
|---|
| 37 |  . ; if new start is less than old start then days from new start to
 | 
|---|
| 38 |  . ; lesser of new end and old start-1 were changed from not covered to
 | 
|---|
| 39 |  . ;  covered.
 | 
|---|
| 40 |  . I S2<S1 D
 | 
|---|
| 41 |  . . S X1=S2
 | 
|---|
| 42 |  . . S X2=$S(E2<(S1-1):E2,1:S1-1)
 | 
|---|
| 43 |  . . D LCK(PRSIEN,X1,X2,.PPLCK,.PPLCKE)
 | 
|---|
| 44 |  . ;
 | 
|---|
| 45 |  . ; if new start is greater than old start then days from old start to
 | 
|---|
| 46 |  . ; lesser of old end and new start-1 were changed from covered to not
 | 
|---|
| 47 |  . ; covered.
 | 
|---|
| 48 |  . I S2>S1 D
 | 
|---|
| 49 |  . . S X1=S1
 | 
|---|
| 50 |  . . S X2=$S(E1<(S2-1):E1,1:S2-1)
 | 
|---|
| 51 |  . . D LCK(PRSIEN,X1,X2,.PPLCK,.PPLCKE)
 | 
|---|
| 52 |  . ;
 | 
|---|
| 53 |  . ; if new end is greater than old end then days from greater of old
 | 
|---|
| 54 |  . ; end+1 and new start to new end were changed from not covered to
 | 
|---|
| 55 |  . ; covered.
 | 
|---|
| 56 |  . I E2>E1 D
 | 
|---|
| 57 |  . . S X1=$S(E1+1>S2:E1+1,1:S2)
 | 
|---|
| 58 |  . . S X2=E2
 | 
|---|
| 59 |  . . D LCK(PRSIEN,X1,X2,.PPLCK,.PPLCKE)
 | 
|---|
| 60 |  . ;
 | 
|---|
| 61 |  . ; if new end is less than old end then days from greater of new end+1
 | 
|---|
| 62 |  . ; and old start to old end were changed from covered to not covered.
 | 
|---|
| 63 |  . I E2<E1 D
 | 
|---|
| 64 |  . . S X1=$S(E2+1>S1:E2+1,1:S1)
 | 
|---|
| 65 |  . . S X2=E1
 | 
|---|
| 66 |  . . D LCK(PRSIEN,X1,X2,.PPLCK,.PPLCKE)
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | LCK(PRSIEN,PERSTR,PEREND,PPLCK,PPLCKE) ; Lock Time Cards for a Date Range 
 | 
|---|
| 71 |  ; This API attempts to lock the employee timecards for a date range.
 | 
|---|
| 72 |  ; Only existing pay periods that are covered by a PTP memo are locked.
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  ; Input
 | 
|---|
| 75 |  ;   PRSIEN   - Employee IEN (file 450)
 | 
|---|
| 76 |  ;   PERSTR   - Period Start (FileMan internal)
 | 
|---|
| 77 |  ;   PEREND   - Period End (Fileman internal)
 | 
|---|
| 78 |  ;   PPLCK()  - Array of Locked Pay Periods passed by reference
 | 
|---|
| 79 |  ;              format PPLCK(pay period IEN file 458)=""
 | 
|---|
| 80 |  ;   PPLCKE() - Array of Pay Periods with Lock Error passed by reference
 | 
|---|
| 81 |  ;              format PPLCKE(pay period IEN file 458)=""
 | 
|---|
| 82 |  ;   Note that these arrays are not initialized by this API and may
 | 
|---|
| 83 |  ;   contain information about already locked timecards.
 | 
|---|
| 84 |  ; Output
 | 
|---|
| 85 |  ;   PPLCK()  - Array of Locked Pay Periods may be updated
 | 
|---|
| 86 |  ;   PPLCKE() - Array of Pay Periods with Lock Error may be updated
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  Q:('$G(PRSIEN))!($G(PERSTR)'?7N)!($G(PEREND)'?7N)  ; required inputs
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  N D1,DAY,EPP4Y,PP4Y,PPE,PPI,SPP4Y,Y
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ; determine starting and ending pay periods
 | 
|---|
| 93 |  S D1=PERSTR D PP^PRSAPPU S SPP4Y=PP4Y
 | 
|---|
| 94 |  S D1=PEREND D PP^PRSAPPU S EPP4Y=PP4Y
 | 
|---|
| 95 |  Q:SPP4Y=""
 | 
|---|
| 96 |  Q:EPP4Y=""
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ; loop thru pay periods
 | 
|---|
| 99 |  S PP4Y=$O(^PRST(458,"AB",SPP4Y),-1) ; set initial value to previous PP
 | 
|---|
| 100 |  F  S PP4Y=$O(^PRST(458,"AB",PP4Y)) Q:PP4Y=""!(PP4Y]EPP4Y)  D
 | 
|---|
| 101 |  . S PPI=$O(^PRST(458,"AB",PP4Y,0))
 | 
|---|
| 102 |  . ; quit if pay period not covered by memo
 | 
|---|
| 103 |  . S D1=$P($G(^PRST(458,PPI,1)),U)
 | 
|---|
| 104 |  . Q:$$MIEN^PRSPUT1(PRSIEN,D1)'>0
 | 
|---|
| 105 |  . ;
 | 
|---|
| 106 |  . Q:$D(PPLCK(PPI))  ; already in lock array
 | 
|---|
| 107 |  . Q:$D(PPLCKE(PPI))  ; already in lock error array
 | 
|---|
| 108 |  . ;
 | 
|---|
| 109 |  . ; lock timecard
 | 
|---|
| 110 |  . L +^PRST(458,PPI,"E",PRSIEN):2
 | 
|---|
| 111 |  . S:'$T PPLCKE(PPI)=""
 | 
|---|
| 112 |  . S:$T PPLCK(PPI)=""
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  Q
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | TCULCK(PRSIEN,PPLCK) ; Time Card Unlock
 | 
|---|
| 118 |  ; This API unlocks a list of employee timecards.
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  ; Input
 | 
|---|
| 121 |  ;   PRSIEN - Employee IEN (file 450)
 | 
|---|
| 122 |  ;   PPLCK( - Array of Locked Pay Periods passed by reference
 | 
|---|
| 123 |  ;            format PPLCK(pay period IEN file 458)=""
 | 
|---|
| 124 |  ; Output
 | 
|---|
| 125 |  ;   PPLCK( - Input array is killed since pay periods are unlocked
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  Q:'$G(PRSIEN)  ; required input
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 |  N PPI
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  ; loop thru pay periods and unlock time card
 | 
|---|
| 132 |  S PPI="" F  S PPI=$O(PPLCK(PPI)) Q:'PPI  L -^PRST(458,PPI,"E",PRSIEN)
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  ; init lock array
 | 
|---|
| 135 |  K PPLCK
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 |  Q
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 | RLCKE(PPLCKE,WRITE,PRSARRN) ; Report Lock Errors
 | 
|---|
| 140 |  ; This API writes a list of timecards that could not be locked.
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  ; Input
 | 
|---|
| 143 |  ;   PPLCKE( - Array of Pay Periods with Lock Error passed by reference
 | 
|---|
| 144 |  ;             format PPLCKE(pay period IEN file 458)=""
 | 
|---|
| 145 |  ;   WRITE   - (optional) true (=1) if text should be written (default)
 | 
|---|
| 146 |  ;                        false (=0) if array should be returned instead
 | 
|---|
| 147 |  ;   PRSARRN - (optional) array name, default value is "PRSARR"
 | 
|---|
| 148 |  ; output
 | 
|---|
| 149 |  ;   If WRITE is True, the input array name (or "PRSARR" if not
 | 
|---|
| 150 |  ;     specified) will be killed.
 | 
|---|
| 151 |  ;   If WRITE is False, the input array name will contain the text
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  N LN,PPI
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 |  S PRSARRN=$G(PRSARRN,"PRSARR")
 | 
|---|
| 156 |  S WRITE=$G(WRITE,1)
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 |  S @PRSARRN@(1)="Unable to make changes because the time card for the following"
 | 
|---|
| 159 |  S @PRSARRN@(2)="pay period(s) are being edited by another user!"
 | 
|---|
| 160 |  S LN=2
 | 
|---|
| 161 |  ; loop thru pay periods
 | 
|---|
| 162 |  S PPI="" F  S PPI=$O(PPLCKE(PPI)) Q:'PPI  D
 | 
|---|
| 163 |  . S LN=LN+1
 | 
|---|
| 164 |  . S @PRSARRN@(LN)="  Pay Period: "_$P($G(^PRST(458,PPI,0)),U)
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 |  ; if not WRITE then quit (returns text in array to caller)
 | 
|---|
| 167 |  Q:'WRITE
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 |  ; otherwise write text to current device and then kill array of text
 | 
|---|
| 170 |  S LN=0 F  S LN=$O(@PRSARRN@(LN)) Q:'LN  D
 | 
|---|
| 171 |  . W !,@PRSARRN@(LN)
 | 
|---|
| 172 |  K @PRSARRN
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 |  Q
 | 
|---|
| 175 |  ;
 | 
|---|
| 176 |  ;PRSPAPU
 | 
|---|