[613] | 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
|
---|