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