1 | PRSPEAU ;WOIFO/SAB - EXTENDED ABSENCE UTILITIES ;10/19/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 | ;
|
---|
7 | CONFLICT(PRSIEN,NFDT,NTDT,XEAIEN) ; check for conflict with existing EAs
|
---|
8 | ; input
|
---|
9 | ; PRSIEN - employee ien (file 450)
|
---|
10 | ; NFDT - new from date in fileman format
|
---|
11 | ; NTDT - (optional) new to date in fileman format
|
---|
12 | ; XEAIEN - (optional) existing extended absense ien, passed if dates
|
---|
13 | ; for an existing record are being checked so that entry does
|
---|
14 | ; not conflict with itself.
|
---|
15 | ; returns string with value =
|
---|
16 | ; list of Extended Absence iens (delimited by ^) that conflict OR
|
---|
17 | ; null when no conflict found
|
---|
18 | ;
|
---|
19 | ; A conflict exists if the date range (New From-New To) overlaps the
|
---|
20 | ; date range of a different, active (does not include cancelled)
|
---|
21 | ; extended absence. If the To Date is not passed, then the software
|
---|
22 | ; will just check the From Date to issue that it does not conflict with
|
---|
23 | ; another extended absence.
|
---|
24 | ;
|
---|
25 | N EAIEN,EAY0,PRSRET,PRSY,TDT
|
---|
26 | S PRSRET=""
|
---|
27 | S NTDT=$G(NTDT,NFDT) ; if To Date not passed then set equal to From Date
|
---|
28 | ;
|
---|
29 | ; loop thru extended absences for employee by reverse To Date until
|
---|
30 | ; the To Date is before the New From Date or no more To Dates
|
---|
31 | S TDT=9999999 ; initial To Date for loop
|
---|
32 | F S TDT=$O(^PRST(458.4,"AEE",PRSIEN,TDT),-1) Q:'TDT!(TDT<NFDT) D
|
---|
33 | . ; loop thru extended absences with To Date
|
---|
34 | . S EAIEN=0
|
---|
35 | . S EAIEN=$O(^PRST(458.4,"AEE",PRSIEN,TDT,EAIEN)) Q:'EAIEN D
|
---|
36 | . . Q:EAIEN=$G(XEAIEN) ; skip if entry is the one being checked
|
---|
37 | . . S EAY0=$G(^PRST(458.4,EAIEN,0)) ; extended absense 0 node
|
---|
38 | . . Q:$P(EAY0,U)=""!($P(EAY0,U,2)="") ; dates missing - invalid
|
---|
39 | . . Q:$P(EAY0,U)>NTDT ; skip if From Date after New To Date
|
---|
40 | . . Q:$P(EAY0,U,6)'="A" ; skip if Status not active
|
---|
41 | . . ;
|
---|
42 | . . ; extended absence overlaps the pay period
|
---|
43 | . . S PRSRET=PRSRET_EAIEN_U ; conflict
|
---|
44 | ;
|
---|
45 | Q PRSRET
|
---|
46 | ;
|
---|
47 | RCON(LIST,WRITE,PRSARRN) ; Report Conflicts
|
---|
48 | ; input
|
---|
49 | ; LIST - string of conflicting Ext Absence IENs delimited by ^
|
---|
50 | ; WRITE - (optional) true (=1) if text should be written (default)
|
---|
51 | ; false (=0) if array should be returned instead
|
---|
52 | ; PRSARRN - (optional) array name, default value is "PRSARR"
|
---|
53 | ; output
|
---|
54 | ; If WRITE is True, the input array name (or "PRSARR" if not
|
---|
55 | ; specified) will be killed.
|
---|
56 | ; If WRITE is False, the input array name will contain the text
|
---|
57 | ;
|
---|
58 | Q:$G(LIST)=""
|
---|
59 | ;
|
---|
60 | N EAIEN,LN,PC
|
---|
61 | ;
|
---|
62 | S PRSARRN=$G(PRSARRN,"PRSARR")
|
---|
63 | S WRITE=$G(WRITE,1)
|
---|
64 | ;
|
---|
65 | S @PRSARRN@(1)="The specified dates conflict with other extended absence(s)."
|
---|
66 | S @PRSARRN@(2)="Please specify different dates for this extended absence or"
|
---|
67 | S @PRSARRN@(3)="remove the conflict by first editing the other extended absence(s)."
|
---|
68 | S LN=3
|
---|
69 | F PC=1:1 S EAIEN=$P(LIST,U,PC) Q:EAIEN="" D
|
---|
70 | . S LN=LN+1
|
---|
71 | . S @PRSARRN@(LN)=" Conflicts with Absence: "_$$GET1^DIQ(458.4,EAIEN_",",.01)_" to "_$$GET1^DIQ(458.4,EAIEN_",",1)
|
---|
72 | ;
|
---|
73 | ; if not WRITE then quit (return text in array to caller)
|
---|
74 | Q:'WRITE
|
---|
75 | ;
|
---|
76 | ; otherwise write text to current device and then kill array of text
|
---|
77 | S LN=0 F S LN=$O(@PRSARRN@(LN)) Q:'LN D
|
---|
78 | . W !,@PRSARRN@(LN)
|
---|
79 | K @PRSARRN
|
---|
80 | ;
|
---|
81 | Q
|
---|
82 | ;
|
---|
83 | CHKRG(PRSIEN) ; Check for RG Posted to Today's ESR
|
---|
84 | ; Input
|
---|
85 | ; PRSIEN - Employee IEN (file 450)
|
---|
86 | ; Returns
|
---|
87 | ; boolean value, true (=1) if RG already posted on ESR for Today
|
---|
88 | ;
|
---|
89 | N D1,DAY,PP4Y,PPE,PPI,PRSRET
|
---|
90 | ;
|
---|
91 | S PRSRET=0 ; init return value
|
---|
92 | ;
|
---|
93 | I $G(PRSIEN) D
|
---|
94 | . S D1=DT
|
---|
95 | . D PP^PRSAPPU
|
---|
96 | . Q:'$G(PPI)
|
---|
97 | . Q:'$G(DAY)
|
---|
98 | . I $G(^PRST(458,PPI,"E",PRSIEN,"D",DAY,5))["RG" S PRSRET=1
|
---|
99 | ;
|
---|
100 | Q PRSRET
|
---|
101 | ;
|
---|
102 | DISEA(EAIEN,IC) ; Display EA
|
---|
103 | ; input
|
---|
104 | ; EAIEN - Extended Absence IEN (file 458.4)
|
---|
105 | ; IC - (optional) item count, number to be included in display
|
---|
106 | ; result
|
---|
107 | ; Writes information to current device (2-4 lines)
|
---|
108 | Q:'$G(EAIEN) ; IEN required
|
---|
109 | S IC=$G(IC)
|
---|
110 | ;
|
---|
111 | N PRSE,PRSIENS,PRSV
|
---|
112 | S PRSIENS=EAIEN_","
|
---|
113 | ;
|
---|
114 | D GETS^DIQ(458.4,PRSIENS,".01;1;3;4;5;6","","PRSV","PRSE")
|
---|
115 | ;
|
---|
116 | ; display info if no error
|
---|
117 | I '$D(PRSE) D
|
---|
118 | . W !
|
---|
119 | . I IC W $$RJ^XLFSTR(IC_") ",4)
|
---|
120 | . W PRSV(458.4,PRSIENS,.01)_" to "_PRSV(458.4,PRSIENS,1)
|
---|
121 | . W ?33,"Status: ",PRSV(458.4,PRSIENS,5)
|
---|
122 | . I PRSV(458.4,PRSIENS,6)]"" W !,?4,PRSV(458.4,PRSIENS,6) ; remarks
|
---|
123 | . W !,?33,"Entered: ",PRSV(458.4,PRSIENS,3)
|
---|
124 | . I PRSV(458.4,PRSIENS,4)]"" W !,?33,"Updated: ",PRSV(458.4,PRSIENS,4)
|
---|
125 | ;
|
---|
126 | I $D(PRSE) D MSG^DIALOG(,,,,"PRSE") ; display error
|
---|
127 | ;
|
---|
128 | Q
|
---|
129 | ;
|
---|
130 | BLDLST(PRSIEN,MINTDT,OKSTAT) ; Build List of Extended Absence Entries
|
---|
131 | ; input
|
---|
132 | ; PRSIEN - Employee IEN (file 450)
|
---|
133 | ; MINTDT - Minumum To Date (FileMan Internal)
|
---|
134 | ; OKSTAT - String of acceptable EA status values to place in list
|
---|
135 | ; delimited by ^ (e.g. "A" or "^A^" or "A^X"...)
|
---|
136 | ; ARRN - (optional) name of an array that will contain the list
|
---|
137 | ; default value is "EALIST"
|
---|
138 | ; output
|
---|
139 | ; local array EALIST with format
|
---|
140 | ; EALIST(0)=count of items in list
|
---|
141 | ; EALIST(1)=1st extended absence IEN in list
|
---|
142 | ; EALIST(n)=nth extended absence IEN in list
|
---|
143 | ;
|
---|
144 | ; initialize the list
|
---|
145 | K EALIST
|
---|
146 | ;
|
---|
147 | Q:'$G(PRSIEN)
|
---|
148 | Q:$G(MINTDT)'?7N
|
---|
149 | Q:$G(OKSTAT)=""
|
---|
150 | ;
|
---|
151 | I $E(OKSTAT)'="^" S OKSTAT="^"_OKSTAT
|
---|
152 | I $E(OKSTAT,$L(OKSTAT))'="^" S OKSTAT=OKSTAT_"^"
|
---|
153 | ;
|
---|
154 | ;
|
---|
155 | N CNT,EAIEN,PRSX,TDT
|
---|
156 | ;
|
---|
157 | ; loop thru extended absences by to date - build sorted temp list
|
---|
158 | S TDT=MINTDT-.01
|
---|
159 | F S TDT=$O(^PRST(458.4,"AEE",PRSIEN,TDT)) Q:'TDT D
|
---|
160 | . S EAIEN=0
|
---|
161 | . F S EAIEN=$O(^PRST(458.4,"AEE",PRSIEN,TDT,EAIEN)) Q:'EAIEN D
|
---|
162 | . . Q:OKSTAT'[(U_$P($G(^PRST(458.4,EAIEN,0)),U,6)_U)
|
---|
163 | . . S EALIST("T",TDT_"^"_EAIEN)=""
|
---|
164 | ;
|
---|
165 | ; build output list by number based on order in temp list
|
---|
166 | S CNT=0,PRSX=""
|
---|
167 | F S PRSX=$O(EALIST("T",PRSX)) Q:PRSX="" D
|
---|
168 | . S CNT=CNT+1
|
---|
169 | . S EALIST(CNT)=$P(PRSX,U,2)
|
---|
170 | S EALIST(0)=CNT ; set header node with count
|
---|
171 | ;
|
---|
172 | K EALIST("T") ; delete temp list
|
---|
173 | ;
|
---|
174 | Q
|
---|
175 | ;
|
---|
176 | DISLST() ; Display List of Extended Absences
|
---|
177 | ; input
|
---|
178 | ; local array EALIST with format
|
---|
179 | ; EALIST(0)=count of items in list
|
---|
180 | ; EALIST(1)=1st extended absence IEN in list
|
---|
181 | ; EALIST(n)=nth extended absence IEN in list
|
---|
182 | ; returns 1 if user entered an up-arrow or time-out
|
---|
183 | ;
|
---|
184 | N DIR,DIRUT,DIROUT,DTOUT,DUOUT,PRSI,PRSRET,X,Y
|
---|
185 | ;
|
---|
186 | S PRSRET=0
|
---|
187 | ;
|
---|
188 | I EALIST(0)=0 W !,"No extended absences were found."
|
---|
189 | ;
|
---|
190 | S PRSI=0 F S PRSI=$O(EALIST(PRSI)) Q:'PRSI D Q:PRSRET
|
---|
191 | . I $Y+6>IOSL S DIR(0)="E" D ^DIR K DIR S:'Y PRSRET=1 Q:'Y W @IOF
|
---|
192 | . S EAIEN=EALIST(PRSI)
|
---|
193 | . D DISEA(EAIEN,PRSI)
|
---|
194 | ;
|
---|
195 | Q PRSRET
|
---|
196 | ;
|
---|
197 | ;PRSPEAU
|
---|