| 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 | 
|---|